From 18e9eb637c473385877ce996026725fcf1999ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 23 Apr 2018 13:24:29 +0300 Subject: [PATCH] Created Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo project --- Volo.Abp.sln | 9 +- .../AbpAspNetCoreMvcUiBootstrapDemoModule.cs | 38 + .../Pages/Components/Cards.cshtml | 39 + .../Pages/Components/Cards.cshtml.cs | 12 + .../Pages/Index.cshtml | 12 + .../Pages/Index.cshtml.cs | 17 + .../Pages/_Layout.cshtml | 35 + .../Pages/_ViewImports.cshtml | 3 + .../Pages/_ViewStart.cshtml | 3 + .../Program.cs | 18 + .../Properties/launchSettings.json | 27 + .../Startup.cs | 24 + ...bp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj | 22 + .../abp.resourcemapping.js | 15 + .../compilerconfig.json | 6 + .../compilerconfig.json.defaults | 49 + .../gulpfile.js | 11 + .../package.json | 10 + .../wwwroot/css/demo.css | 8 + .../wwwroot/css/demo.min.css | 1 + .../wwwroot/css/demo.scss | 11 + .../wwwroot/imgs/demo/300x200.png | Bin 0 -> 91280 bytes .../wwwroot/libs/abp/core/abp.js | 570 + .../wwwroot/libs/abp/jquery/abp.ajax.js | 188 + .../libs/abp/jquery/abp.resource-loader.js | 89 + .../wwwroot/libs/bootstrap/css/bootstrap.css | 8950 +++++++++ .../libs/bootstrap/js/bootstrap.bundle.js | 6433 +++++++ .../css/dataTables.bootstrap4.css | 202 + .../js/dataTables.bootstrap4.js | 184 + .../datatables.net/js/jquery.dataTables.js | 15242 ++++++++++++++++ .../libs/font-awesome/css/font-awesome.css | 2337 +++ .../libs/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 2671 +++ .../fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../libs/jquery-form/jquery.form.min.js | 23 + .../jquery.validate.unobtrusive.js | 431 + .../libs/jquery-validation/jquery.validate.js | 1601 ++ .../localization/messages_ar.js | 35 + .../localization/messages_az.js | 35 + .../localization/messages_bg.js | 35 + .../localization/messages_bn_BD.js | 35 + .../localization/messages_ca.js | 35 + .../localization/messages_cs.js | 35 + .../localization/messages_da.js | 32 + .../localization/messages_de.js | 32 + .../localization/messages_el.js | 35 + .../localization/messages_es.js | 38 + .../localization/messages_es_AR.js | 39 + .../localization/messages_es_PE.js | 39 + .../localization/messages_et.js | 33 + .../localization/messages_eu.js | 35 + .../localization/messages_fa.js | 38 + .../localization/messages_fi.js | 33 + .../localization/messages_fr.js | 63 + .../localization/messages_ge.js | 35 + .../localization/messages_gl.js | 40 + .../localization/messages_he.js | 35 + .../localization/messages_hr.js | 35 + .../localization/messages_hu.js | 35 + .../localization/messages_hy_AM.js | 35 + .../localization/messages_id.js | 34 + .../localization/messages_is.js | 33 + .../localization/messages_it.js | 39 + .../localization/messages_ja.js | 36 + .../localization/messages_ka.js | 35 + .../localization/messages_kk.js | 35 + .../localization/messages_ko.js | 35 + .../localization/messages_lt.js | 35 + .../localization/messages_lv.js | 35 + .../localization/messages_mk.js | 35 + .../localization/messages_my.js | 35 + .../localization/messages_nl.js | 46 + .../localization/messages_no.js | 36 + .../localization/messages_pl.js | 37 + .../localization/messages_pt_BR.js | 88 + .../localization/messages_pt_PT.js | 39 + .../localization/messages_ro.js | 35 + .../localization/messages_ru.js | 35 + .../localization/messages_sd.js | 35 + .../localization/messages_si.js | 35 + .../localization/messages_sk.js | 32 + .../localization/messages_sl.js | 35 + .../localization/messages_sr.js | 35 + .../localization/messages_sr_lat.js | 35 + .../localization/messages_sv.js | 33 + .../localization/messages_th.js | 35 + .../localization/messages_tj.js | 35 + .../localization/messages_tr.js | 36 + .../localization/messages_uk.js | 35 + .../localization/messages_ur.js | 35 + .../localization/messages_vi.js | 35 + .../localization/messages_zh.js | 35 + .../localization/messages_zh_TW.js | 36 + .../localization/methods_de.js | 24 + .../localization/methods_es_CL.js | 24 + .../localization/methods_fi.js | 24 + .../localization/methods_nl.js | 24 + .../localization/methods_pt.js | 21 + .../wwwroot/libs/jquery/jquery.js | 10364 +++++++++++ .../yarn.lock | 1522 ++ 103 files changed, 53360 insertions(+), 1 deletion(-) create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml.cs create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml.cs create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_Layout.cshtml create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewImports.cshtml create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewStart.cshtml create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Properties/launchSettings.json create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json.defaults create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/gulpfile.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/imgs/demo/300x200.png create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.ajax.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.resource-loader.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/css/bootstrap.css create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/js/bootstrap.bundle.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/datatables.net-bs4/css/dataTables.bootstrap4.css create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/datatables.net-bs4/js/dataTables.bootstrap4.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/datatables.net/js/jquery.dataTables.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/font-awesome/css/font-awesome.css create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/font-awesome/fonts/FontAwesome.otf create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-form/jquery.form.min.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/jquery.validate.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ar.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_az.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_bg.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_bn_BD.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ca.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_cs.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_da.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_de.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_el.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_es.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_es_AR.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_es_PE.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_et.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_eu.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_fa.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_fi.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_fr.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ge.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_gl.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_he.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_hr.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_hu.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_hy_AM.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_id.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_is.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_it.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ja.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ka.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_kk.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ko.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_lt.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_lv.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_mk.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_my.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_nl.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_no.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_pl.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_pt_BR.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_pt_PT.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ro.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ru.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_sd.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_si.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_sk.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_sl.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_sr.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_sr_lat.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_sv.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_th.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_tj.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_tr.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_uk.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_ur.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_vi.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_zh.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/messages_zh_TW.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/methods_de.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/methods_es_CL.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/methods_fi.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/methods_nl.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery-validation/localization/methods_pt.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/jquery/jquery.js create mode 100644 test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock diff --git a/Volo.Abp.sln b/Volo.Abp.sln index 111484058d..bf4b02fdf9 100644 --- a/Volo.Abp.sln +++ b/Volo.Abp.sln @@ -178,10 +178,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.EventBus.Distribut EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic", "src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic\Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.csproj", "{2F5EE6D9-511B-4998-BD62-0B9F03E02432}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared", "src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared\Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj", "{86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared", "src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared\Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj", "{86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.UI.Tests", "test\Volo.Abp.AspNetCore.Mvc.UI.Tests\Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj", "{7E0517E0-AE09-4E10-8469-308F065F2F43}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo", "test\Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo\Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj", "{57E29185-6DAF-4A41-8CE0-3F07EE3E289A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -508,6 +510,10 @@ Global {7E0517E0-AE09-4E10-8469-308F065F2F43}.Debug|Any CPU.Build.0 = Debug|Any CPU {7E0517E0-AE09-4E10-8469-308F065F2F43}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E0517E0-AE09-4E10-8469-308F065F2F43}.Release|Any CPU.Build.0 = Release|Any CPU + {57E29185-6DAF-4A41-8CE0-3F07EE3E289A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57E29185-6DAF-4A41-8CE0-3F07EE3E289A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57E29185-6DAF-4A41-8CE0-3F07EE3E289A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57E29185-6DAF-4A41-8CE0-3F07EE3E289A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -595,6 +601,7 @@ Global {2F5EE6D9-511B-4998-BD62-0B9F03E02432} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {7E0517E0-AE09-4E10-8469-308F065F2F43} = {447C8A77-E5F0-4538-8687-7383196D04EA} + {57E29185-6DAF-4A41-8CE0-3F07EE3E289A} = {447C8A77-E5F0-4538-8687-7383196D04EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs new file mode 100644 index 0000000000..a51926b15f --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/AbpAspNetCoreMvcUiBootstrapDemoModule.cs @@ -0,0 +1,38 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Modularity; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo +{ + [DependsOn( + typeof(AbpAspNetCoreMvcUiThemeSharedModule), + typeof(AbpAutofacModule) + )] + public class AbpAspNetCoreMvcUiBootstrapDemoModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseStaticFiles(); + app.UseVirtualFiles(); + + app.UseMvcWithDefaultRoute(); + } + } +} \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml new file mode 100644 index 0000000000..1e9027e87d --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml @@ -0,0 +1,39 @@ +@page +@model Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components.CardsModel +@{ + ViewData["Title"] = "Cards"; +} + +

Cards

+ +

Example - 1

+ +
+
+
+ + Card image cap +
+
Card title
+

Some quick example text to build on the card title and make up the bulk of the card's content.

+ Go somewhere +
+
+
+
+
+<div class="card" style="width: 18rem;">
+    <img class="card-img-top" src=".../100px180/" alt="Card image cap">
+    <div class="card-body">
+        <h5 class="card-title">Card title</h5>
+        <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+        <a href="#" class="btn btn-primary">Go somewhere</a>
+    </div>
+</div>
+
+
+
+ +
+ +< back \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml.cs new file mode 100644 index 0000000000..c94b69e4fe --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Cards.cshtml.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components +{ + public class CardsModel : PageModel + { + public void OnGet() + { + + } + } +} \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml new file mode 100644 index 0000000000..a0533a4f76 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml @@ -0,0 +1,12 @@ +@page +@model Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.IndexModel +@{ + ViewData["Title"] = "Index"; +} + +

Components

+ + + diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml.cs new file mode 100644 index 0000000000..68dde66bc7 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Index.cshtml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages +{ + public class IndexModel : PageModel + { + public void OnGet() + { + + } + } +} \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_Layout.cshtml b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_Layout.cshtml new file mode 100644 index 0000000000..89fc9f40de --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_Layout.cshtml @@ -0,0 +1,35 @@ +@{ + Layout = null; + var title = "ABP Bootstrap Demo"; + if (ViewData["Title"] != null) + { + title += " | " + ViewData["Title"]; + } +} + + + + + + + + + @title + + + @* TODO: Add to the GlobalStyles bundle! *@ + + @RenderSection("styles", false) + + + +
+ @RenderBody() +
+ + + + @RenderSection("scripts", false) + + + \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewImports.cshtml b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewImports.cshtml new file mode 100644 index 0000000000..05e1baf060 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewStart.cshtml b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewStart.cshtml new file mode 100644 index 0000000000..821d04a80b --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Pages/_Layout.cshtml"; +} diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs new file mode 100644 index 0000000000..7375376a06 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Program.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo +{ + public class Program + { + public static void Main(string[] args) + { + BuildWebHostInternal(args).Run(); + } + + public static IWebHost BuildWebHostInternal(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup() + .Build(); + } +} diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Properties/launchSettings.json b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Properties/launchSettings.json new file mode 100644 index 0000000000..bf3d843c8b --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:49211/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:49212/" + } + } +} diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs new file mode 100644 index 0000000000..eba905830d --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Startup.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo +{ + public class Startup + { + public IServiceProvider ConfigureServices(IServiceCollection services) + { + services.AddApplication(options => + { + options.UseAutofac(); + }); + + return services.BuildServiceProviderFromFactory(); + } + + public void Configure(IApplicationBuilder app) + { + app.InitializeApplication(); + } + } +} diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj new file mode 100644 index 0000000000..79c9ba038d --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -0,0 +1,22 @@ + + + + netcoreapp2.0 + + + + <_ContentIncludedByDefault Remove="wwwroot\css\demo.css" /> + <_ContentIncludedByDefault Remove="wwwroot\css\demo.min.css" /> + + + + + + + + + + + + + diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js new file mode 100644 index 0000000000..fa447065ab --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/abp.resourcemapping.js @@ -0,0 +1,15 @@ +module.exports = { + imports: [ + "node_modules/@abp/aspnetcore.mvc.ui.theme.shared/abp.resourcemapping.js" + ], + aliases: { //TODO: Make some aliases default: node_modules, libs + "@node_modules": "./node_modules", + "@libs": "./wwwroot/libs" + }, + clean: [ + "@libs" + ], + mappings: { + + } +} \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json new file mode 100644 index 0000000000..ade33b1ebb --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json @@ -0,0 +1,6 @@ +[ + { + "outputFile": "wwwroot/css/demo.css", + "inputFile": "wwwroot/css/demo.scss" + } +] \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json.defaults b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json.defaults new file mode 100644 index 0000000000..c75eb7d519 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/compilerconfig.json.defaults @@ -0,0 +1,49 @@ +{ + "compilers": { + "less": { + "autoPrefix": "", + "cssComb": "none", + "ieCompat": true, + "strictMath": false, + "strictUnits": false, + "relativeUrls": true, + "rootPath": "", + "sourceMapRoot": "", + "sourceMapBasePath": "", + "sourceMap": false + }, + "sass": { + "includePath": "", + "indentType": "space", + "indentWidth": 2, + "outputStyle": "nested", + "Precision": 5, + "relativeUrls": true, + "sourceMapRoot": "", + "sourceMap": false + }, + "stylus": { + "sourceMap": false + }, + "babel": { + "sourceMap": false + }, + "coffeescript": { + "bare": false, + "runtimeMode": "node", + "sourceMap": false + } + }, + "minifiers": { + "css": { + "enabled": true, + "termSemicolons": true, + "gzip": false + }, + "javascript": { + "enabled": true, + "termSemicolons": true, + "gzip": false + } + } +} \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/gulpfile.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/gulpfile.js new file mode 100644 index 0000000000..0a39f1fca8 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/gulpfile.js @@ -0,0 +1,11 @@ +"use strict"; + +var gulp = require("gulp"), + path = require('path'), + copyResources = require('./node_modules/@abp/aspnetcore.mvc.ui/gulp/copy-resources.js'); + +copyResources.init(path.resolve('./abp.resourcemapping.js')); + +gulp.task('default', [copyResources.taskName], function () { + +}); \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json new file mode 100644 index 0000000000..a4e9e51664 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json @@ -0,0 +1,10 @@ +{ + "version": "1.0.0", + "name": "asp.net", + "private": true, + "dependencies": { + "@abp/aspnetcore.mvc.ui.theme.shared": "^0.2.2" + }, + "devDependencies": { + } +} \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css new file mode 100644 index 0000000000..c27f90cea4 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.css @@ -0,0 +1,8 @@ +.demo-with-code .demo-area { + margin-bottom: 2em; } + +.demo-with-code .code-area { + border: 1px solid #ddd; + padding: 10px; + font-size: 0.9em; } + diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css new file mode 100644 index 0000000000..10d854a024 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.min.css @@ -0,0 +1 @@ +.demo-with-code .demo-area{margin-bottom:2em;}.demo-with-code .code-area{border:1px solid #ddd;padding:10px;font-size:.9em;} \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss new file mode 100644 index 0000000000..95bd900024 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/css/demo.scss @@ -0,0 +1,11 @@ +.demo-with-code { + .demo-area { + margin-bottom: 2em; + } + + .code-area { + border: 1px solid #ddd; + padding: 10px; + font-size: 0.9em; + } +} diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/imgs/demo/300x200.png b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/imgs/demo/300x200.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2ee486cada7f30fb1df469cb25c5a98ff13f65 GIT binary patch literal 91280 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 literal 0 HcmV?d00001 diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js new file mode 100644 index 0000000000..3ba61f1885 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/core/abp.js @@ -0,0 +1,570 @@ +var abp = abp || {}; +(function ($) { + + /* Application paths *****************************************/ + + //Current application root path (including virtual directory if exists). + abp.appPath = abp.appPath || '/'; + + abp.pageLoadTime = new Date(); + + //Converts given path to absolute path using abp.appPath variable. + abp.toAbsAppPath = function (path) { + if (path.indexOf('/') == 0) { + path = path.substring(1); + } + + return abp.appPath + path; + }; + + /* LOGGING ***************************************************/ + //Implements Logging API that provides secure & controlled usage of console.log + + abp.log = abp.log || {}; + + abp.log.levels = { + DEBUG: 1, + INFO: 2, + WARN: 3, + ERROR: 4, + FATAL: 5 + }; + + abp.log.level = abp.log.levels.DEBUG; + + abp.log.log = function (logObject, logLevel) { + if (!window.console || !window.console.log) { + return; + } + + if (logLevel != undefined && logLevel < abp.log.level) { + return; + } + + console.log(logObject); + }; + + abp.log.debug = function (logObject) { + abp.log.log("DEBUG: ", abp.log.levels.DEBUG); + abp.log.log(logObject, abp.log.levels.DEBUG); + }; + + abp.log.info = function (logObject) { + abp.log.log("INFO: ", abp.log.levels.INFO); + abp.log.log(logObject, abp.log.levels.INFO); + }; + + abp.log.warn = function (logObject) { + abp.log.log("WARN: ", abp.log.levels.WARN); + abp.log.log(logObject, abp.log.levels.WARN); + }; + + abp.log.error = function (logObject) { + abp.log.log("ERROR: ", abp.log.levels.ERROR); + abp.log.log(logObject, abp.log.levels.ERROR); + }; + + abp.log.fatal = function (logObject) { + abp.log.log("FATAL: ", abp.log.levels.FATAL); + abp.log.log(logObject, abp.log.levels.FATAL); + }; + + /* LOCALIZATION ***********************************************/ + + abp.localization = abp.localization || {}; + + abp.localization.values = {}; + + abp.localization.localize = function (key, sourceName) { + sourceName = sourceName || abp.localization.defaultResourceName; + + var source = abp.localization.values[sourceName]; + + if (!source) { + abp.log.warn('Could not find localization source: ' + sourceName); + return key; + } + + var value = source[key]; + if (value == undefined) { + return key; + } + + var copiedArguments = Array.prototype.slice.call(arguments, 0); + copiedArguments.splice(1, 1); + copiedArguments[0] = value; + + return abp.utils.formatString.apply(this, copiedArguments); + }; + + abp.localization.getResource = function (name) { + return function () { + var copiedArguments = Array.prototype.slice.call(arguments, 0); + copiedArguments.splice(1, 0, name); + return abp.localization.localize.apply(this, copiedArguments); + }; + }; + + abp.localization.defaultResourceName = undefined; + + /* AUTHORIZATION **********************************************/ + + abp.auth = abp.auth || {}; + + abp.auth.policies = abp.auth.policies || {}; + + abp.auth.grantedPolicies = abp.auth.grantedPolicies || {}; + + abp.auth.isGranted = function (policyName) { + return abp.auth.policies[policyName] != undefined && abp.auth.grantedPolicies[policyName] != undefined; + }; + + abp.auth.isAnyGranted = function () { + if (!arguments || arguments.length <= 0) { + return true; + } + + for (var i = 0; i < arguments.length; i++) { + if (abp.auth.isGranted(arguments[i])) { + return true; + } + } + + return false; + }; + + abp.auth.areAllGranted = function () { + if (!arguments || arguments.length <= 0) { + return true; + } + + for (var i = 0; i < arguments.length; i++) { + if (!abp.auth.isGranted(arguments[i])) { + return false; + } + } + + return true; + }; + + abp.auth.tokenCookieName = 'Abp.AuthToken'; + + abp.auth.setToken = function (authToken, expireDate) { + abp.utils.setCookieValue(abp.auth.tokenCookieName, authToken, expireDate, abp.appPath, abp.domain); + }; + + abp.auth.getToken = function () { + return abp.utils.getCookieValue(abp.auth.tokenCookieName); + } + + abp.auth.clearToken = function () { + abp.auth.setToken(); + } + + /* NOTIFICATION *********************************************/ + //Defines Notification API, not implements it + + abp.notify = abp.notify || {}; + + abp.notify.success = function (message, title, options) { + abp.log.warn('abp.notify.success is not implemented!'); + }; + + abp.notify.info = function (message, title, options) { + abp.log.warn('abp.notify.info is not implemented!'); + }; + + abp.notify.warn = function (message, title, options) { + abp.log.warn('abp.notify.warn is not implemented!'); + }; + + abp.notify.error = function (message, title, options) { + abp.log.warn('abp.notify.error is not implemented!'); + }; + + /* MESSAGE **************************************************/ + //Defines Message API, not implements it + + abp.message = abp.message || {}; + + var showMessage = function (message, title) { + alert((title || '') + ' ' + message); + + if (!$) { + abp.log.warn('abp.message can not return promise since jQuery is not defined!'); + return null; + } + + return $.Deferred(function ($dfd) { + $dfd.resolve(); + }); + }; + + abp.message.info = function (message, title) { + abp.log.warn('abp.message.info is not implemented!'); + return showMessage(message, title); + }; + + abp.message.success = function (message, title) { + abp.log.warn('abp.message.success is not implemented!'); + return showMessage(message, title); + }; + + abp.message.warn = function (message, title) { + abp.log.warn('abp.message.warn is not implemented!'); + return showMessage(message, title); + }; + + abp.message.error = function (message, title) { + abp.log.warn('abp.message.error is not implemented!'); + return showMessage(message, title); + }; + + abp.message.confirm = function (message, titleOrCallback, callback) { + abp.log.warn('abp.message.confirm is not implemented!'); + + if (titleOrCallback && !(typeof titleOrCallback == 'string')) { + callback = titleOrCallback; + } + + var result = confirm(message); + callback && callback(result); + + if (!$) { + abp.log.warn('abp.message can not return promise since jQuery is not defined!'); + return null; + } + + return $.Deferred(function ($dfd) { + $dfd.resolve(); + }); + }; + + /* UI *******************************************************/ + + abp.ui = abp.ui || {}; + + /* UI BLOCK */ + //Defines UI Block API, not implements it + + abp.ui.block = function (elm) { + abp.log.warn('abp.ui.block is not implemented!'); + }; + + abp.ui.unblock = function (elm) { + abp.log.warn('abp.ui.unblock is not implemented!'); + }; + + /* UI BUSY */ + //Defines UI Busy API, not implements it + + abp.ui.setBusy = function (elm, optionsOrPromise) { + abp.log.warn('abp.ui.setBusy is not implemented!'); + }; + + abp.ui.clearBusy = function (elm) { + abp.log.warn('abp.ui.clearBusy is not implemented!'); + }; + + /* SIMPLE EVENT BUS *****************************************/ + + abp.event = (function () { + + var _callbacks = {}; + + var on = function (eventName, callback) { + if (!_callbacks[eventName]) { + _callbacks[eventName] = []; + } + + _callbacks[eventName].push(callback); + }; + + var off = function (eventName, callback) { + var callbacks = _callbacks[eventName]; + if (!callbacks) { + return; + } + + var index = -1; + for (var i = 0; i < callbacks.length; i++) { + if (callbacks[i] === callback) { + index = i; + break; + } + } + + if (index < 0) { + return; + } + + _callbacks[eventName].splice(index, 1); + }; + + var trigger = function (eventName) { + var callbacks = _callbacks[eventName]; + if (!callbacks || !callbacks.length) { + return; + } + + var args = Array.prototype.slice.call(arguments, 1); + for (var i = 0; i < callbacks.length; i++) { + callbacks[i].apply(this, args); + } + }; + + // Public interface /////////////////////////////////////////////////// + + return { + on: on, + off: off, + trigger: trigger + }; + })(); + + + /* UTILS ***************************************************/ + + abp.utils = abp.utils || {}; + + /* Creates a name namespace. + * Example: + * var taskService = abp.utils.createNamespace(abp, 'services.task'); + * taskService will be equal to abp.services.task + * first argument (root) must be defined first + ************************************************************/ + abp.utils.createNamespace = function (root, ns) { + var parts = ns.split('.'); + for (var i = 0; i < parts.length; i++) { + if (typeof root[parts[i]] == 'undefined') { + root[parts[i]] = {}; + } + + root = root[parts[i]]; + } + + return root; + }; + + /* Find and replaces a string (search) to another string (replacement) in + * given string (str). + * Example: + * abp.utils.replaceAll('This is a test string', 'is', 'X') = 'ThX X a test string' + ************************************************************/ + abp.utils.replaceAll = function (str, search, replacement) { + var fix = search.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + return str.replace(new RegExp(fix, 'g'), replacement); + }; + + /* Formats a string just like string.format in C#. + * Example: + * abp.utils.formatString('Hello {0}','Tuana') = 'Hello Tuana' + ************************************************************/ + abp.utils.formatString = function () { + if (arguments.length < 1) { + return null; + } + + var str = arguments[0]; + + for (var i = 1; i < arguments.length; i++) { + var placeHolder = '{' + (i - 1) + '}'; + str = abp.utils.replaceAll(str, placeHolder, arguments[i]); + } + + return str; + }; + + abp.utils.toPascalCase = function (str) { + if (!str || !str.length) { + return str; + } + + if (str.length === 1) { + return str.charAt(0).toUpperCase(); + } + + return str.charAt(0).toUpperCase() + str.substr(1); + } + + abp.utils.toCamelCase = function (str) { + if (!str || !str.length) { + return str; + } + + if (str.length === 1) { + return str.charAt(0).toLowerCase(); + } + + return str.charAt(0).toLowerCase() + str.substr(1); + } + + abp.utils.truncateString = function (str, maxLength) { + if (!str || !str.length || str.length <= maxLength) { + return str; + } + + return str.substr(0, maxLength); + }; + + abp.utils.truncateStringWithPostfix = function (str, maxLength, postfix) { + postfix = postfix || '...'; + + if (!str || !str.length || str.length <= maxLength) { + return str; + } + + if (maxLength <= postfix.length) { + return postfix.substr(0, maxLength); + } + + return str.substr(0, maxLength - postfix.length) + postfix; + }; + + abp.utils.isFunction = function (obj) { + if ($) { + //Prefer to use jQuery if possible + return $.isFunction(obj); + } + + //alternative for $.isFunction + return !!(obj && obj.constructor && obj.call && obj.apply); + }; + + /** + * parameterInfos should be an array of { name, value } objects + * where name is query string parameter name and value is it's value. + * includeQuestionMark is true by default. + */ + abp.utils.buildQueryString = function (parameterInfos, includeQuestionMark) { + if (includeQuestionMark === undefined) { + includeQuestionMark = true; + } + + var qs = ''; + + function addSeperator() { + if (!qs.length) { + if (includeQuestionMark) { + qs = qs + '?'; + } + } else { + qs = qs + '&'; + } + } + + for (var i = 0; i < parameterInfos.length; ++i) { + var parameterInfo = parameterInfos[i]; + if (parameterInfo.value === undefined) { + continue; + } + + if (parameterInfo.value === null) { + parameterInfo.value = ''; + } + + addSeperator(); + + if (parameterInfo.value.toJSON && typeof parameterInfo.value.toJSON === "function") { + qs = qs + parameterInfo.name + '=' + encodeURIComponent(parameterInfo.value.toJSON()); + } else if (Array.isArray(parameterInfo.value) && parameterInfo.value.length) { + for (var j = 0; j < parameterInfo.value.length; j++) { + if (j > 0) { + addSeperator(); + } + + qs = qs + parameterInfo.name + '[' + j + ']=' + encodeURIComponent(parameterInfo.value[j]); + } + } else { + qs = qs + parameterInfo.name + '=' + encodeURIComponent(parameterInfo.value); + } + } + + return qs; + } + + /** + * Sets a cookie value for given key. + * This is a simple implementation created to be used by ABP. + * Please use a complete cookie library if you need. + * @param {string} key + * @param {string} value + * @param {Date} expireDate (optional). If not specified the cookie will expire at the end of session. + * @param {string} path (optional) + */ + abp.utils.setCookieValue = function (key, value, expireDate, path) { + var cookieValue = encodeURIComponent(key) + '='; + + if (value) { + cookieValue = cookieValue + encodeURIComponent(value); + } + + if (expireDate) { + cookieValue = cookieValue + "; expires=" + expireDate.toUTCString(); + } + + if (path) { + cookieValue = cookieValue + "; path=" + path; + } + + document.cookie = cookieValue; + }; + + /** + * Gets a cookie with given key. + * This is a simple implementation created to be used by ABP. + * Please use a complete cookie library if you need. + * @param {string} key + * @returns {string} Cookie value or null + */ + abp.utils.getCookieValue = function (key) { + var equalities = document.cookie.split('; '); + for (var i = 0; i < equalities.length; i++) { + if (!equalities[i]) { + continue; + } + + var splitted = equalities[i].split('='); + if (splitted.length != 2) { + continue; + } + + if (decodeURIComponent(splitted[0]) === key) { + return decodeURIComponent(splitted[1] || ''); + } + } + + return null; + }; + + /** + * Deletes cookie for given key. + * This is a simple implementation created to be used by ABP. + * Please use a complete cookie library if you need. + * @param {string} key + * @param {string} path (optional) + */ + abp.utils.deleteCookie = function (key, path) { + var cookieValue = encodeURIComponent(key) + '='; + + cookieValue = cookieValue + "; expires=" + (new Date(new Date().getTime() - 86400000)).toUTCString(); + + if (path) { + cookieValue = cookieValue + "; path=" + path; + } + + document.cookie = cookieValue; + } + + /* SECURITY ***************************************/ + abp.security = abp.security || {}; + abp.security.antiForgery = abp.security.antiForgery || {}; + + abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN'; + abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN'; + + abp.security.antiForgery.getToken = function () { + return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName); + }; + +})(); \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.ajax.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.ajax.js new file mode 100644 index 0000000000..f1dc266687 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.ajax.js @@ -0,0 +1,188 @@ +var abp = abp || {}; +(function ($) { + + if (!$) { + return; + } + + /* JQUERY ENHANCEMENTS ***************************************************/ + + // abp.ajax -> uses $.ajax ------------------------------------------------ + + abp.ajax = function (userOptions) { + userOptions = userOptions || {}; + + var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); + + options.success = undefined; + options.error = undefined; + + return $.Deferred(function ($dfd) { + $.ajax(options) + .done(function (data, textStatus, jqXHR) { + $dfd.resolve(data); + userOptions.success && userOptions.success(data); + }).fail(function (jqXHR) { + if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { + abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); + } else { + abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); + } + }); + }); + }; + + $.extend(abp.ajax, { + defaultOpts: { + dataType: 'json', + type: 'POST', + contentType: 'application/json', + headers: { + 'X-Requested-With': 'XMLHttpRequest' + } + }, + + defaultError: { + message: 'An error has occurred!', + details: 'Error detail not sent by server.' + }, + + defaultError401: { + message: 'You are not authenticated!', + details: 'You should be authenticated (sign in) in order to perform this operation.' + }, + + defaultError403: { + message: 'You are not authorized!', + details: 'You are not allowed to perform this operation.' + }, + + defaultError404: { + message: 'Resource not found!', + details: 'The resource requested could not found on the server.' + }, + + logError: function (error) { + abp.log.error(error); + }, + + showError: function (error) { + if (error.details) { + return abp.message.error(error.details, error.message); + } else { + return abp.message.error(error.message || abp.ajax.defaultError.message); + } + }, + + handleTargetUrl: function (targetUrl) { + if (!targetUrl) { + location.href = abp.appPath; + } else { + location.href = targetUrl; + } + }, + + handleErrorStatusCode: function (status) { + switch (status) { + case 401: + abp.ajax.handleUnAuthorizedRequest( + abp.ajax.showError(abp.ajax.defaultError401), + abp.appPath + ); + break; + case 403: + abp.ajax.showError(abp.ajax.defaultError403); + break; + case 404: + abp.ajax.showError(abp.ajax.defaultError404); + break; + default: + abp.ajax.showError(abp.ajax.defaultError); + break; + } + }, + + handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { + if (userOptions.abpHandleError !== false) { + abp.ajax.handleErrorStatusCode(jqXHR.status); + } + + $dfd.reject.apply(this, arguments); + userOptions.error && userOptions.error.apply(this, arguments); + }, + + handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { + var messagePromise = null; + + if (userOptions.abpHandleError !== false) { + messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); + } + + abp.ajax.logError(jqXHR.responseJSON.error); + + $dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); + userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); + + if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { + abp.ajax.handleUnAuthorizedRequest(messagePromise); + } + }, + + handleUnAuthorizedRequest: function (messagePromise, targetUrl) { + if (messagePromise) { + messagePromise.done(function () { + abp.ajax.handleTargetUrl(targetUrl); + }); + } else { + abp.ajax.handleTargetUrl(targetUrl); + } + }, + + blockUI: function (options) { + if (options.blockUI) { + if (options.blockUI === true) { //block whole page + abp.ui.setBusy(); + } else { //block an element + abp.ui.setBusy(options.blockUI); + } + } + }, + + unblockUI: function (options) { + if (options.blockUI) { + if (options.blockUI === true) { //unblock whole page + abp.ui.clearBusy(); + } else { //unblock an element + abp.ui.clearBusy(options.blockUI); + } + } + }//, + + //ajaxSendHandler: function (event, request, settings) { + // var token = abp.security.antiForgery.getToken(); + // if (!token) { + // return; + // } + + // if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { + // request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); + // } + //} + }); + + //$(document).ajaxSend(function (event, request, settings) { + // return abp.ajax.ajaxSendHandler(event, request, settings); + //}); + + //abp.event.on('abp.dynamicScriptsInitialized', function () { + // abp.ajax.defaultError.message = abp.localization.abpWeb('DefaultError'); + // abp.ajax.defaultError.details = abp.localization.abpWeb('DefaultErrorDetail'); + // abp.ajax.defaultError401.message = abp.localization.abpWeb('DefaultError401'); + // abp.ajax.defaultError401.details = abp.localization.abpWeb('DefaultErrorDetail401'); + // abp.ajax.defaultError403.message = abp.localization.abpWeb('DefaultError403'); + // abp.ajax.defaultError403.details = abp.localization.abpWeb('DefaultErrorDetail403'); + // abp.ajax.defaultError404.message = abp.localization.abpWeb('DefaultError404'); + // abp.ajax.defaultError404.details = abp.localization.abpWeb('DefaultErrorDetail404'); + //}); + +})(jQuery); \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.resource-loader.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.resource-loader.js new file mode 100644 index 0000000000..9064c68afc --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/jquery/abp.resource-loader.js @@ -0,0 +1,89 @@ +/** + * abp.ResourceLoader can be used to load scripts when needed. + * It ensures that every script is only loaded once. + * + * TODO: Add a loadStyle method + */ +var abp = abp || {}; +(function ($) { + + /* UrlStates enum */ + var UrlStates = { + LOADING: 'LOADING', + LOADED: 'LOADED', + FAILED: 'FAILED' + }; + + /* UrlInfo class */ + function UrlInfo() { + this.state = UrlStates.LOADING; + this.loadCallbacks = []; + this.failCallbacks = []; + } + + UrlInfo.prototype.succeed = function () { + this.state = UrlStates.LOADED; + for (var i = 0; i < this.loadCallbacks.length; i++) { + this.loadCallbacks[i](); + } + }; + + UrlInfo.prototype.failed = function () { + this.state = UrlStates.FAILED; + for (var i = 0; i < this.failCallbacks.length; i++) { + this.failCallbacks[i](); + } + }; + + UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { + switch (this.state) { + case UrlStates.LOADED: + loadCallback && loadCallback(); + break; + case UrlStates.FAILED: + failCallback && failCallback(); + break; + case UrlStates.LOADING: + this.addCallbacks(loadCallback, failCallback); + break; + } + }; + + UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { + loadCallback && this.loadCallbacks.push(loadCallback); + failCallback && this.failCallbacks.push(failCallback); + }; + + /* ResourceLoader API */ + + abp.ResourceLoader = (function () { + + var _urlInfos = {}; + + var _loadScript = function (url, loadCallback, failCallback) { + + var urlInfo = _urlInfos[url]; + + if (urlInfo) { + urlInfo.handleCallbacks(loadCallback, failCallback); + return; + } + + _urlInfos[url] = urlInfo = new UrlInfo(); + urlInfo.addCallbacks(loadCallback, failCallback); + + $.getScript(url) + .done(function (script, textStatus) { + urlInfo.succeed(); + }) + .fail(function (jqxhr, settings, exception) { + urlInfo.failed(); + }); + }; + + return { + loadScript: _loadScript + } + })(); + +})(jQuery); \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/css/bootstrap.css b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/css/bootstrap.css new file mode 100644 index 0000000000..7220f3c05f --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/css/bootstrap.css @@ -0,0 +1,8950 @@ +/*! + * Bootstrap v4.1.0 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors + * Copyright 2011-2018 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; +} + +@-ms-viewport { + width: device-width; +} + +article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.2; + color: inherit; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #6c757d; +} + +code, +kbd, +pre, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; +} + +.table tbody + tbody { + border-top: 2px solid #dee2e6; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #dee2e6; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #dee2e6; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #b8daff; +} + +.table-hover .table-primary:hover { + background-color: #9fcdff; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #9fcdff; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #d6d8db; +} + +.table-hover .table-secondary:hover { + background-color: #c8cbcf; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #c8cbcf; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c3e6cb; +} + +.table-hover .table-success:hover { + background-color: #b1dfbb; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #b1dfbb; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bee5eb; +} + +.table-hover .table-info:hover { + background-color: #abdde5; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #abdde5; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffeeba; +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #ffe8a1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f5c6cb; +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f1b0b7; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; +} + +.table-hover .table-light:hover { + background-color: #ececf6; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #ececf6; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c6c8ca; +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #b9bbbe; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #212529; + border-color: #32383e; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.table-dark { + color: #fff; + background-color: #212529; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #32383e; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-xl > .table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.table-responsive > .table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.form-control:not([size]):not([multiple]) { + height: calc(2.25rem + 2px); +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; + width: 100%; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control, +.input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text, +.input-group-sm > .input-group-append > .form-control-plaintext.input-group-text, +.input-group-sm > .input-group-prepend > .form-control-plaintext.btn, +.input-group-sm > .input-group-append > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control, +.input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text, +.input-group-lg > .input-group-append > .form-control-plaintext.input-group-text, +.input-group-lg > .input-group-prepend > .form-control-plaintext.btn, +.input-group-lg > .input-group-append > .form-control-plaintext.btn { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), +.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), +.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]), +.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]), +.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) { + height: calc(1.8125rem + 2px); +} + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), +.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), +.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), +.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), +.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) { + height: calc(2.875rem + 2px); +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} + +.form-row > .col, +.form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} + +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(40, 167, 69, 0.8); + border-radius: .2rem; +} + +.was-validated .form-control:valid, .form-control.is-valid, .was-validated +.custom-select:valid, +.custom-select.is-valid { + border-color: #28a745; +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated +.custom-select:valid:focus, +.custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .form-control:valid ~ .valid-feedback, +.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, +.form-control.is-valid ~ .valid-tooltip, .was-validated +.custom-select:valid ~ .valid-feedback, +.was-validated +.custom-select:valid ~ .valid-tooltip, +.custom-select.is-valid ~ .valid-feedback, +.custom-select.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #28a745; +} + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + background-color: #71dd8a; +} + +.was-validated .custom-control-input:valid ~ .valid-feedback, +.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, +.custom-control-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + background-color: #34ce57; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label::before, .custom-file-input.is-valid ~ .custom-file-label::before { + border-color: inherit; +} + +.was-validated .custom-file-input:valid ~ .valid-feedback, +.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, +.custom-file-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(220, 53, 69, 0.8); + border-radius: .2rem; +} + +.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated +.custom-select:invalid, +.custom-select.is-invalid { + border-color: #dc3545; +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated +.custom-select:invalid:focus, +.custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-control:invalid ~ .invalid-feedback, +.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, +.form-control.is-invalid ~ .invalid-tooltip, .was-validated +.custom-select:invalid ~ .invalid-feedback, +.was-validated +.custom-select:invalid ~ .invalid-tooltip, +.custom-select.is-invalid ~ .invalid-feedback, +.custom-select.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + background-color: #efa2a9; +} + +.was-validated .custom-control-input:invalid ~ .invalid-feedback, +.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, +.custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + background-color: #e4606d; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label::before, .custom-file-input.is-invalid ~ .custom-file-label::before { + border-color: inherit; +} + +.was-validated .custom-file-input:invalid ~ .invalid-feedback, +.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, +.custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} + +.btn:hover, .btn:focus { + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active { + background-image: none; +} + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc; +} + +.btn-primary:focus, .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; +} + +.btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; +} + +.btn-success:focus, .btn-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} + +.btn-info:focus, .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; +} + +.btn-warning:focus, .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} + +.btn-danger:focus, .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; +} + +.btn-light:focus, .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} + +.btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-primary { + color: #007bff; + background-color: transparent; + background-image: none; + border-color: #007bff; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #007bff; + background-color: transparent; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-secondary { + color: #6c757d; + background-color: transparent; + background-image: none; + border-color: #6c757d; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-success { + color: #28a745; + background-color: transparent; + background-image: none; + border-color: #28a745; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; +} + +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-info { + color: #17a2b8; + background-color: transparent; + background-image: none; + border-color: #17a2b8; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; +} + +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-warning { + color: #ffc107; + background-color: transparent; + background-image: none; + border-color: #ffc107; +} + +.btn-outline-warning:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, +.show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-danger { + color: #dc3545; + background-color: transparent; + background-image: none; + border-color: #dc3545; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa; +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; +} + +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, +.show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-dark { + color: #343a40; + background-color: transparent; + background-image: none; + border-color: #343a40; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, +.show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-link { + font-weight: 400; + color: #007bff; + background-color: transparent; +} + +.btn-link:hover { + color: #0056b3; + text-decoration: underline; + background-color: transparent; + border-color: transparent; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; + border-color: transparent; + box-shadow: none; +} + +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; + pointer-events: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + transition: opacity 0.15s linear; +} + +@media screen and (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropright .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-toggle::after { + vertical-align: 0; +} + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropleft .dropdown-toggle::after { + display: none; +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + width: 0; + height: 0; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 1; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group, +.btn-group-vertical .btn + .btn, +.btn-group-vertical .btn + .btn-group, +.btn-group-vertical .btn-group + .btn, +.btn-group-vertical .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical .btn, +.btn-group-vertical .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; +} + +.btn-group-toggle > .btn input[type="radio"], +.btn-group-toggle > .btn input[type="checkbox"], +.btn-group-toggle > .btn-group > .btn input[type="radio"], +.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group > .form-control:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file:focus { + z-index: 3; +} + +.input-group > .form-control + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .custom-select + .form-control, +.input-group > .custom-select + .custom-select, +.input-group > .custom-select + .custom-file, +.input-group > .custom-file + .form-control, +.input-group > .custom-file + .custom-select, +.input-group > .custom-file + .custom-file { + margin-left: -1px; +} + +.input-group > .form-control:not(:last-child), +.input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .form-control:not(:first-child), +.input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group > .custom-file { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; +} + +.input-group > .custom-file:not(:last-child) .custom-file-label, +.input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .custom-file:not(:first-child) .custom-file-label, +.input-group > .custom-file:not(:first-child) .custom-file-label::after { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-prepend, +.input-group-append { + display: -ms-flexbox; + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn + .btn, +.input-group-prepend .btn + .input-group-text, +.input-group-prepend .input-group-text + .input-group-text, +.input-group-prepend .input-group-text + .btn, +.input-group-append .btn + .btn, +.input-group-append .btn + .input-group-text, +.input-group-append .input-group-text + .input-group-text, +.input-group-append .input-group-text + .btn { + margin-left: -1px; +} + +.input-group-prepend { + margin-right: -1px; +} + +.input-group-append { + margin-left: -1px; +} + +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text, +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .input-group-append > .btn, +.input-group > .input-group-append > .input-group-text, +.input-group > .input-group-prepend:not(:first-child) > .btn, +.input-group > .input-group-prepend:not(:first-child) > .input-group-text, +.input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; +} + +.custom-control-inline { + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + background-color: #007bff; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-control-input:active ~ .custom-control-label::before { + color: #fff; + background-color: #b3d7ff; +} + +.custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; +} + +.custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; +} + +.custom-control-label { + margin-bottom: 0; +} + +.custom-control-label::before { + position: absolute; + top: 0.25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #dee2e6; +} + +.custom-control-label::after { + position: absolute; + top: 0.25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50%; +} + +.custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { + background-color: #007bff; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + background-color: #007bff; +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-radio .custom-control-label::before { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::before { + background-color: #007bff; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + background-size: 8px 10px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5); +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + opacity: 0; +} + +.custom-select-sm { + height: calc(1.8125rem + 2px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} + +.custom-select-lg { + height: calc(2.875rem + 2px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 125%; +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(2.25rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(2.25rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-file-input:focus ~ .custom-file-label::after { + border-color: #80bdff; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(2.25rem + 2px); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(calc(2.25rem + 2px) - 1px * 2); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: 1px solid #ced4da; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-range { + width: 100%; + padding-left: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -webkit-appearance: none; + appearance: none; +} + +.custom-range::-webkit-slider-thumb:focus { + outline: none; + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -moz-appearance: none; + appearance: none; +} + +.custom-range::-moz-range-thumb:focus { + outline: none; + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range::-moz-range-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + appearance: none; +} + +.custom-range::-ms-thumb:focus { + outline: none; + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range::-ms-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #007bff; +} + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0.5rem 1rem; +} + +.navbar > .container, +.navbar > .container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; +} + +.navbar-toggler:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; +} + +.navbar-expand .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-header + .list-group .list-group-item:first-child { + border-top: 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img { + width: 100%; + border-radius: calc(0.25rem - 1px); +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-deck .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-deck { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-group > .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-group { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:first-child .card-img-top, + .card-group > .card:first-child .card-header { + border-top-right-radius: 0; + } + .card-group > .card:first-child .card-img-bottom, + .card-group > .card:first-child .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:last-child .card-img-top, + .card-group > .card:last-child .card-header { + border-top-left-radius: 0; + } + .card-group > .card:last-child .card-img-bottom, + .card-group > .card:last-child .card-footer { + border-bottom-left-radius: 0; + } + .card-group > .card:only-child { + border-radius: 0.25rem; + } + .card-group > .card:only-child .card-img-top, + .card-group > .card:only-child .card-header { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + } + .card-group > .card:only-child .card-img-bottom, + .card-group > .card:only-child .card-footer { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) { + border-radius: 0; + } + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, + .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer { + border-radius: 0; + } +} + +.card-columns .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; +} + +.accordion .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; +} + +.accordion .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6; +} + +.page-link:hover { + z-index: 2; + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.page-link:focus { + z-index: 2; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.page-link:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.badge-primary { + color: #fff; + background-color: #007bff; +} + +.badge-primary[href]:hover, .badge-primary[href]:focus { + color: #fff; + text-decoration: none; + background-color: #0062cc; +} + +.badge-secondary { + color: #fff; + background-color: #6c757d; +} + +.badge-secondary[href]:hover, .badge-secondary[href]:focus { + color: #fff; + text-decoration: none; + background-color: #545b62; +} + +.badge-success { + color: #fff; + background-color: #28a745; +} + +.badge-success[href]:hover, .badge-success[href]:focus { + color: #fff; + text-decoration: none; + background-color: #1e7e34; +} + +.badge-info { + color: #fff; + background-color: #17a2b8; +} + +.badge-info[href]:hover, .badge-info[href]:focus { + color: #fff; + text-decoration: none; + background-color: #117a8b; +} + +.badge-warning { + color: #212529; + background-color: #ffc107; +} + +.badge-warning[href]:hover, .badge-warning[href]:focus { + color: #212529; + text-decoration: none; + background-color: #d39e00; +} + +.badge-danger { + color: #fff; + background-color: #dc3545; +} + +.badge-danger[href]:hover, .badge-danger[href]:focus { + color: #fff; + text-decoration: none; + background-color: #bd2130; +} + +.badge-light { + color: #212529; + background-color: #f8f9fa; +} + +.badge-light[href]:hover, .badge-light[href]:focus { + color: #212529; + text-decoration: none; + background-color: #dae0e5; +} + +.badge-dark { + color: #fff; + background-color: #343a40; +} + +.badge-dark[href]:hover, .badge-dark[href]:focus { + color: #fff; + text-decoration: none; + background-color: #1d2124; +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 4rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} + +.alert-primary hr { + border-top-color: #9fcdff; +} + +.alert-primary .alert-link { + color: #002752; +} + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; +} + +.alert-secondary hr { + border-top-color: #c8cbcf; +} + +.alert-secondary .alert-link { + color: #202326; +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} + +.alert-success hr { + border-top-color: #b1dfbb; +} + +.alert-success .alert-link { + color: #0b2e13; +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} + +.alert-info hr { + border-top-color: #abdde5; +} + +.alert-info .alert-link { + color: #062c33; +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} + +.alert-warning hr { + border-top-color: #ffe8a1; +} + +.alert-warning .alert-link { + color: #533f03; +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} + +.alert-danger hr { + border-top-color: #f1b0b7; +} + +.alert-danger .alert-link { + color: #491217; +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} + +.alert-light hr { + border-top-color: #ececf6; +} + +.alert-light .alert-link { + color: #686868; +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} + +.alert-dark hr { + border-top-color: #b9bbbe; +} + +.alert-dark .alert-link { + color: #040505; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #007bff; + transition: width 0.6s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} + +.media-body { + -ms-flex: 1; + flex: 1; +} + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item:hover, .list-group-item:focus { + z-index: 1; + text-decoration: none; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #004085; + background-color: #9fcdff; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004085; + border-color: #004085; +} + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #383d41; + background-color: #c8cbcf; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41; +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #155724; + background-color: #b1dfbb; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724; +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #0c5460; + background-color: #abdde5; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #856404; + background-color: #ffe8a1; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404; +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #721c24; + background-color: #f1b0b7; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #1b1e21; + background-color: #b9bbbe; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:hover, .close:focus { + color: #000; + text-decoration: none; + opacity: .75; +} + +.close:not(:disabled):not(.disabled) { + cursor: pointer; +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +@media screen and (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - (0.5rem * 2)); +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem; + border-bottom: 1px solid #e9ecef; + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.modal-header .close { + padding: 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #e9ecef; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-centered { + min-height: calc(100% - (1.75rem * 2)); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} + +.popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; +} + +.bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { + bottom: calc((0.5rem + 1px) * -1); +} + +.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, +.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after { + border-width: 0.5rem 0.5rem 0; +} + +.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before { + bottom: 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after { + bottom: 1px; + border-top-color: #fff; +} + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; +} + +.bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, +.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after { + border-width: 0.5rem 0.5rem 0.5rem 0; +} + +.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before { + left: 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after { + left: 1px; + border-right-color: #fff; +} + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; +} + +.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { + top: calc((0.5rem + 1px) * -1); +} + +.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, +.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after { + border-width: 0 0.5rem 0.5rem 0.5rem; +} + +.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before { + top: 0; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after { + top: 1px; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; +} + +.bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, +.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after { + border-width: 0.5rem 0 0.5rem 0.5rem; +} + +.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before { + right: 0; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after { + right: 1px; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + transition: -webkit-transform 0.6s ease; + transition: transform 0.6s ease; + transition: transform 0.6s ease, -webkit-transform 0.6s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; +} + +@media screen and (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0; +} + +.carousel-item-next.carousel-item-left, +.carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-item-next, +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.carousel-item-prev, +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-duration: .6s; + transition-property: opacity; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + opacity: 0; +} + +.carousel-fade .carousel-item-next, +.carousel-fade .carousel-item-prev, +.carousel-fade .carousel-item.active, +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-prev { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-fade .carousel-item-next, + .carousel-fade .carousel-item-prev, + .carousel-fade .carousel-item.active, + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-prev { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + background-color: rgba(255, 255, 255, 0.5); +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #007bff !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #0062cc !important; +} + +.bg-secondary { + background-color: #6c757d !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #545b62 !important; +} + +.bg-success { + background-color: #28a745 !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #1e7e34 !important; +} + +.bg-info { + background-color: #17a2b8 !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #117a8b !important; +} + +.bg-warning { + background-color: #ffc107 !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #d39e00 !important; +} + +.bg-danger { + background-color: #dc3545 !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #bd2130 !important; +} + +.bg-light { + background-color: #f8f9fa !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dae0e5 !important; +} + +.bg-dark { + background-color: #343a40 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #1d2124 !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-right { + border-right: 1px solid #dee2e6 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-left { + border-left: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #007bff !important; +} + +.border-secondary { + border-color: #6c757d !important; +} + +.border-success { + border-color: #28a745 !important; +} + +.border-info { + border-color: #17a2b8 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #343a40 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +@supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.mt-3, +.my-3 { + margin-top: 1rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 1rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.mt-5, +.my-5 { + margin-top: 3rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 3rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 3rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.pt-3, +.py-3 { + padding-top: 1rem !important; +} + +.pr-3, +.px-3 { + padding-right: 1rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; +} + +.pl-3, +.px-3 { + padding-left: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; +} + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.pt-5, +.py-5 { + padding-top: 3rem !important; +} + +.pr-5, +.px-5 { + padding-right: 3rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; +} + +.pl-5, +.px-5 { + padding-left: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-light { + font-weight: 300 !important; +} + +.font-weight-normal { + font-weight: 400 !important; +} + +.font-weight-bold { + font-weight: 700 !important; +} + +.font-italic { + font-style: italic !important; +} + +.text-white { + color: #fff !important; +} + +.text-primary { + color: #007bff !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #0062cc !important; +} + +.text-secondary { + color: #6c757d !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #545b62 !important; +} + +.text-success { + color: #28a745 !important; +} + +a.text-success:hover, a.text-success:focus { + color: #1e7e34 !important; +} + +.text-info { + color: #17a2b8 !important; +} + +a.text-info:hover, a.text-info:focus { + color: #117a8b !important; +} + +.text-warning { + color: #ffc107 !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #d39e00 !important; +} + +.text-danger { + color: #dc3545 !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #bd2130 !important; +} + +.text-light { + color: #f8f9fa !important; +} + +a.text-light:hover, a.text-light:focus { + color: #dae0e5 !important; +} + +.text-dark { + color: #343a40 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #1d2124 !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/js/bootstrap.bundle.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/js/bootstrap.bundle.js new file mode 100644 index 0000000000..9bea2ea301 --- /dev/null +++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/bootstrap/js/bootstrap.bundle.js @@ -0,0 +1,6433 @@ +/*! + * Bootstrap v4.1.0 (https://getbootstrap.com/) + * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : + typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : + (factory((global.bootstrap = {}),global.jQuery)); +}(this, (function (exports,$) { 'use strict'; + + $ = $ && $.hasOwnProperty('default') ? $['default'] : $; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): util.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Util = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Private TransitionEnd Helpers + * ------------------------------------------------------------------------ + */ + var TRANSITION_END = 'transitionend'; + var MAX_UID = 1000000; + var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) + + function toType(obj) { + return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); + } + + function getSpecialTransitionEndEvent() { + return { + bindType: TRANSITION_END, + delegateType: TRANSITION_END, + handle: function handle(event) { + if ($$$1(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params + } + + return undefined; // eslint-disable-line no-undefined + } + }; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + $$$1(this).one(Util.TRANSITION_END, function () { + called = true; + }); + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + return this; + } + + function setTransitionEndSupport() { + $$$1.fn.emulateTransitionEnd = transitionEndEmulator; + $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } + /** + * -------------------------------------------------------------------------- + * Public Util Api + * -------------------------------------------------------------------------- + */ + + + var Util = { + TRANSITION_END: 'bsTransitionEnd', + getUID: function getUID(prefix) { + do { + // eslint-disable-next-line no-bitwise + prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here + } while (document.getElementById(prefix)); + + return prefix; + }, + getSelectorFromElement: function getSelectorFromElement(element) { + var selector = element.getAttribute('data-target'); + + if (!selector || selector === '#') { + selector = element.getAttribute('href') || ''; + } + + try { + var $selector = $$$1(document).find(selector); + return $selector.length > 0 ? selector : null; + } catch (err) { + return null; + } + }, + getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { + if (!element) { + return 0; + } // Get transition-duration of the element + + + var transitionDuration = $$$1(element).css('transition-duration'); + var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found + + if (!floatTransitionDuration) { + return 0; + } // If multiple durations are defined, take the first + + + transitionDuration = transitionDuration.split(',')[0]; + return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER; + }, + reflow: function reflow(element) { + return element.offsetHeight; + }, + triggerTransitionEnd: function triggerTransitionEnd(element) { + $$$1(element).trigger(TRANSITION_END); + }, + // TODO: Remove in v5 + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(TRANSITION_END); + }, + isElement: function isElement(obj) { + return (obj[0] || obj).nodeType; + }, + typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { + for (var property in configTypes) { + if (Object.prototype.hasOwnProperty.call(configTypes, property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = value && Util.isElement(value) ? 'element' : toType(value); + + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); + } + } + } + } + }; + setTransitionEndSupport(); + return Util; + }($); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): alert.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Alert = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'alert'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.alert'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var Selector = { + DISMISS: '[data-dismiss="alert"]' + }; + var Event = { + CLOSE: "close" + EVENT_KEY, + CLOSED: "closed" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + ALERT: 'alert', + FADE: 'fade', + SHOW: 'show' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Alert = + /*#__PURE__*/ + function () { + function Alert(element) { + this._element = element; + } // Getters + + + var _proto = Alert.prototype; + + // Public + _proto.close = function close(element) { + element = element || this._element; + + var rootElement = this._getRootElement(element); + + var customEvent = this._triggerCloseEvent(rootElement); + + if (customEvent.isDefaultPrevented()) { + return; + } + + this._removeElement(rootElement); + }; + + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + this._element = null; + }; // Private + + + _proto._getRootElement = function _getRootElement(element) { + var selector = Util.getSelectorFromElement(element); + var parent = false; + + if (selector) { + parent = $$$1(selector)[0]; + } + + if (!parent) { + parent = $$$1(element).closest("." + ClassName.ALERT)[0]; + } + + return parent; + }; + + _proto._triggerCloseEvent = function _triggerCloseEvent(element) { + var closeEvent = $$$1.Event(Event.CLOSE); + $$$1(element).trigger(closeEvent); + return closeEvent; + }; + + _proto._removeElement = function _removeElement(element) { + var _this = this; + + $$$1(element).removeClass(ClassName.SHOW); + + if (!$$$1(element).hasClass(ClassName.FADE)) { + this._destroyElement(element); + + return; + } + + var transitionDuration = Util.getTransitionDurationFromElement(element); + $$$1(element).one(Util.TRANSITION_END, function (event) { + return _this._destroyElement(element, event); + }).emulateTransitionEnd(transitionDuration); + }; + + _proto._destroyElement = function _destroyElement(element) { + $$$1(element).detach().trigger(Event.CLOSED).remove(); + }; // Static + + + Alert._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var $element = $$$1(this); + var data = $element.data(DATA_KEY); + + if (!data) { + data = new Alert(this); + $element.data(DATA_KEY, data); + } + + if (config === 'close') { + data[config](this); + } + }); + }; + + Alert._handleDismiss = function _handleDismiss(alertInstance) { + return function (event) { + if (event) { + event.preventDefault(); + } + + alertInstance.close(this); + }; + }; + + _createClass(Alert, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }]); + + return Alert; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $$$1.fn[NAME] = Alert._jQueryInterface; + $$$1.fn[NAME].Constructor = Alert; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Alert._jQueryInterface; + }; + + return Alert; + }($); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): button.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Button = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'button'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.button'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var ClassName = { + ACTIVE: 'active', + BUTTON: 'btn', + FOCUS: 'focus' + }; + var Selector = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: 'input', + ACTIVE: '.active', + BUTTON: '.btn' + }; + var Event = { + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, + FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Button = + /*#__PURE__*/ + function () { + function Button(element) { + this._element = element; + } // Getters + + + var _proto = Button.prototype; + + // Public + _proto.toggle = function toggle() { + var triggerChangeEvent = true; + var addAriaPressed = true; + var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; + + if (rootElement) { + var input = $$$1(this._element).find(Selector.INPUT)[0]; + + if (input) { + if (input.type === 'radio') { + if (input.checked && $$$1(this._element).hasClass(ClassName.ACTIVE)) { + triggerChangeEvent = false; + } else { + var activeElement = $$$1(rootElement).find(Selector.ACTIVE)[0]; + + if (activeElement) { + $$$1(activeElement).removeClass(ClassName.ACTIVE); + } + } + } + + if (triggerChangeEvent) { + if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { + return; + } + + input.checked = !$$$1(this._element).hasClass(ClassName.ACTIVE); + $$$1(input).trigger('change'); + } + + input.focus(); + addAriaPressed = false; + } + } + + if (addAriaPressed) { + this._element.setAttribute('aria-pressed', !$$$1(this._element).hasClass(ClassName.ACTIVE)); + } + + if (triggerChangeEvent) { + $$$1(this._element).toggleClass(ClassName.ACTIVE); + } + }; + + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + this._element = null; + }; // Static + + + Button._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); + + if (!data) { + data = new Button(this); + $$$1(this).data(DATA_KEY, data); + } + + if (config === 'toggle') { + data[config](); + } + }); + }; + + _createClass(Button, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }]); + + return Button; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + event.preventDefault(); + var button = event.target; + + if (!$$$1(button).hasClass(ClassName.BUTTON)) { + button = $$$1(button).closest(Selector.BUTTON); + } + + Button._jQueryInterface.call($$$1(button), 'toggle'); + }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + var button = $$$1(event.target).closest(Selector.BUTTON)[0]; + $$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $$$1.fn[NAME] = Button._jQueryInterface; + $$$1.fn[NAME].Constructor = Button; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Button._jQueryInterface; + }; + + return Button; + }($); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): carousel.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Carousel = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'carousel'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.carousel'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key + + var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key + + var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch + + var Default = { + interval: 5000, + keyboard: true, + slide: false, + pause: 'hover', + wrap: true + }; + var DefaultType = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean' + }; + var Direction = { + NEXT: 'next', + PREV: 'prev', + LEFT: 'left', + RIGHT: 'right' + }; + var Event = { + SLIDE: "slide" + EVENT_KEY, + SLID: "slid" + EVENT_KEY, + KEYDOWN: "keydown" + EVENT_KEY, + MOUSEENTER: "mouseenter" + EVENT_KEY, + MOUSELEAVE: "mouseleave" + EVENT_KEY, + TOUCHEND: "touchend" + EVENT_KEY, + LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + CAROUSEL: 'carousel', + ACTIVE: 'active', + SLIDE: 'slide', + RIGHT: 'carousel-item-right', + LEFT: 'carousel-item-left', + NEXT: 'carousel-item-next', + PREV: 'carousel-item-prev', + ITEM: 'carousel-item' + }; + var Selector = { + ACTIVE: '.active', + ACTIVE_ITEM: '.active.carousel-item', + ITEM: '.carousel-item', + NEXT_PREV: '.carousel-item-next, .carousel-item-prev', + INDICATORS: '.carousel-indicators', + DATA_SLIDE: '[data-slide], [data-slide-to]', + DATA_RIDE: '[data-ride="carousel"]' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Carousel = + /*#__PURE__*/ + function () { + function Carousel(element, config) { + this._items = null; + this._interval = null; + this._activeElement = null; + this._isPaused = false; + this._isSliding = false; + this.touchTimeout = null; + this._config = this._getConfig(config); + this._element = $$$1(element)[0]; + this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0]; + + this._addEventListeners(); + } // Getters + + + var _proto = Carousel.prototype; + + // Public + _proto.next = function next() { + if (!this._isSliding) { + this._slide(Direction.NEXT); + } + }; + + _proto.nextWhenVisible = function nextWhenVisible() { + // Don't call next when the page isn't visible + // or the carousel or its parent isn't visible + if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { + this.next(); + } + }; + + _proto.prev = function prev() { + if (!this._isSliding) { + this._slide(Direction.PREV); + } + }; + + _proto.pause = function pause(event) { + if (!event) { + this._isPaused = true; + } + + if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) { + Util.triggerTransitionEnd(this._element); + this.cycle(true); + } + + clearInterval(this._interval); + this._interval = null; + }; + + _proto.cycle = function cycle(event) { + if (!event) { + this._isPaused = false; + } + + if (this._interval) { + clearInterval(this._interval); + this._interval = null; + } + + if (this._config.interval && !this._isPaused) { + this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); + } + }; + + _proto.to = function to(index) { + var _this = this; + + this._activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; + + var activeIndex = this._getItemIndex(this._activeElement); + + if (index > this._items.length - 1 || index < 0) { + return; + } + + if (this._isSliding) { + $$$1(this._element).one(Event.SLID, function () { + return _this.to(index); + }); + return; + } + + if (activeIndex === index) { + this.pause(); + this.cycle(); + return; + } + + var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; + + this._slide(direction, this._items[index]); + }; + + _proto.dispose = function dispose() { + $$$1(this._element).off(EVENT_KEY); + $$$1.removeData(this._element, DATA_KEY); + this._items = null; + this._config = null; + this._element = null; + this._interval = null; + this._isPaused = null; + this._isSliding = null; + this._activeElement = null; + this._indicatorsElement = null; + }; // Private + + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + }; + + _proto._addEventListeners = function _addEventListeners() { + var _this2 = this; + + if (this._config.keyboard) { + $$$1(this._element).on(Event.KEYDOWN, function (event) { + return _this2._keydown(event); + }); + } + + if (this._config.pause === 'hover') { + $$$1(this._element).on(Event.MOUSEENTER, function (event) { + return _this2.pause(event); + }).on(Event.MOUSELEAVE, function (event) { + return _this2.cycle(event); + }); + + if ('ontouchstart' in document.documentElement) { + // If it's a touch-enabled device, mouseenter/leave are fired as + // part of the mouse compatibility events on first tap - the carousel + // would stop cycling until user tapped out of it; + // here, we listen for touchend, explicitly pause the carousel + // (as if it's the second time we tap on it, mouseenter compat event + // is NOT fired) and after a timeout (to allow for mouse compatibility + // events to fire) we explicitly restart cycling + $$$1(this._element).on(Event.TOUCHEND, function () { + _this2.pause(); + + if (_this2.touchTimeout) { + clearTimeout(_this2.touchTimeout); + } + + _this2.touchTimeout = setTimeout(function (event) { + return _this2.cycle(event); + }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); + }); + } + } + }; + + _proto._keydown = function _keydown(event) { + if (/input|textarea/i.test(event.target.tagName)) { + return; + } + + switch (event.which) { + case ARROW_LEFT_KEYCODE: + event.preventDefault(); + this.prev(); + break; + + case ARROW_RIGHT_KEYCODE: + event.preventDefault(); + this.next(); + break; + + default: + } + }; + + _proto._getItemIndex = function _getItemIndex(element) { + this._items = $$$1.makeArray($$$1(element).parent().find(Selector.ITEM)); + return this._items.indexOf(element); + }; + + _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { + var isNextDirection = direction === Direction.NEXT; + var isPrevDirection = direction === Direction.PREV; + + var activeIndex = this._getItemIndex(activeElement); + + var lastItemIndex = this._items.length - 1; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; + + if (isGoingToWrap && !this._config.wrap) { + return activeElement; + } + + var delta = direction === Direction.PREV ? -1 : 1; + var itemIndex = (activeIndex + delta) % this._items.length; + return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; + }; + + _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { + var targetIndex = this._getItemIndex(relatedTarget); + + var fromIndex = this._getItemIndex($$$1(this._element).find(Selector.ACTIVE_ITEM)[0]); + + var slideEvent = $$$1.Event(Event.SLIDE, { + relatedTarget: relatedTarget, + direction: eventDirectionName, + from: fromIndex, + to: targetIndex + }); + $$$1(this._element).trigger(slideEvent); + return slideEvent; + }; + + _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { + if (this._indicatorsElement) { + $$$1(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + + var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; + + if (nextIndicator) { + $$$1(nextIndicator).addClass(ClassName.ACTIVE); + } + } + }; + + _proto._slide = function _slide(direction, element) { + var _this3 = this; + + var activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; + + var activeElementIndex = this._getItemIndex(activeElement); + + var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); + + var nextElementIndex = this._getItemIndex(nextElement); + + var isCycling = Boolean(this._interval); + var directionalClassName; + var orderClassName; + var eventDirectionName; + + if (direction === Direction.NEXT) { + directionalClassName = ClassName.LEFT; + orderClassName = ClassName.NEXT; + eventDirectionName = Direction.LEFT; + } else { + directionalClassName = ClassName.RIGHT; + orderClassName = ClassName.PREV; + eventDirectionName = Direction.RIGHT; + } + + if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { + this._isSliding = false; + return; + } + + var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); + + if (slideEvent.isDefaultPrevented()) { + return; + } + + if (!activeElement || !nextElement) { + // Some weirdness is happening, so we bail + return; + } + + this._isSliding = true; + + if (isCycling) { + this.pause(); + } + + this._setActiveIndicatorElement(nextElement); + + var slidEvent = $$$1.Event(Event.SLID, { + relatedTarget: nextElement, + direction: eventDirectionName, + from: activeElementIndex, + to: nextElementIndex + }); + + if ($$$1(this._element).hasClass(ClassName.SLIDE)) { + $$$1(nextElement).addClass(orderClassName); + Util.reflow(nextElement); + $$$1(activeElement).addClass(directionalClassName); + $$$1(nextElement).addClass(directionalClassName); + var transitionDuration = Util.getTransitionDurationFromElement(activeElement); + $$$1(activeElement).one(Util.TRANSITION_END, function () { + $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); + $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); + _this3._isSliding = false; + setTimeout(function () { + return $$$1(_this3._element).trigger(slidEvent); + }, 0); + }).emulateTransitionEnd(transitionDuration); + } else { + $$$1(activeElement).removeClass(ClassName.ACTIVE); + $$$1(nextElement).addClass(ClassName.ACTIVE); + this._isSliding = false; + $$$1(this._element).trigger(slidEvent); + } + + if (isCycling) { + this.cycle(); + } + }; // Static + + + Carousel._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); + + var _config = _objectSpread({}, Default, $$$1(this).data()); + + if (typeof config === 'object') { + _config = _objectSpread({}, _config, config); + } + + var action = typeof config === 'string' ? config : _config.slide; + + if (!data) { + data = new Carousel(this, _config); + $$$1(this).data(DATA_KEY, data); + } + + if (typeof config === 'number') { + data.to(config); + } else if (typeof action === 'string') { + if (typeof data[action] === 'undefined') { + throw new TypeError("No method named \"" + action + "\""); + } + + data[action](); + } else if (_config.interval) { + data.pause(); + data.cycle(); + } + }); + }; + + Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { + var selector = Util.getSelectorFromElement(this); + + if (!selector) { + return; + } + + var target = $$$1(selector)[0]; + + if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { + return; + } + + var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data()); + + var slideIndex = this.getAttribute('data-slide-to'); + + if (slideIndex) { + config.interval = false; + } + + Carousel._jQueryInterface.call($$$1(target), config); + + if (slideIndex) { + $$$1(target).data(DATA_KEY).to(slideIndex); + } + + event.preventDefault(); + }; + + _createClass(Carousel, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }, { + key: "Default", + get: function get() { + return Default; + } + }]); + + return Carousel; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); + $$$1(window).on(Event.LOAD_DATA_API, function () { + $$$1(Selector.DATA_RIDE).each(function () { + var $carousel = $$$1(this); + + Carousel._jQueryInterface.call($carousel, $carousel.data()); + }); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $$$1.fn[NAME] = Carousel._jQueryInterface; + $$$1.fn[NAME].Constructor = Carousel; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Carousel._jQueryInterface; + }; + + return Carousel; + }($); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): collapse.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Collapse = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'collapse'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.collapse'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var Default = { + toggle: true, + parent: '' + }; + var DefaultType = { + toggle: 'boolean', + parent: '(string|element)' + }; + var Event = { + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + SHOW: 'show', + COLLAPSE: 'collapse', + COLLAPSING: 'collapsing', + COLLAPSED: 'collapsed' + }; + var Dimension = { + WIDTH: 'width', + HEIGHT: 'height' + }; + var Selector = { + ACTIVES: '.show, .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Collapse = + /*#__PURE__*/ + function () { + function Collapse(element, config) { + this._isTransitioning = false; + this._element = element; + this._config = this._getConfig(config); + this._triggerArray = $$$1.makeArray($$$1("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); + var tabToggles = $$$1(Selector.DATA_TOGGLE); + + for (var i = 0; i < tabToggles.length; i++) { + var elem = tabToggles[i]; + var selector = Util.getSelectorFromElement(elem); + + if (selector !== null && $$$1(selector).filter(element).length > 0) { + this._selector = selector; + + this._triggerArray.push(elem); + } + } + + this._parent = this._config.parent ? this._getParent() : null; + + if (!this._config.parent) { + this._addAriaAndCollapsedClass(this._element, this._triggerArray); + } + + if (this._config.toggle) { + this.toggle(); + } + } // Getters + + + var _proto = Collapse.prototype; + + // Public + _proto.toggle = function toggle() { + if ($$$1(this._element).hasClass(ClassName.SHOW)) { + this.hide(); + } else { + this.show(); + } + }; + + _proto.show = function show() { + var _this = this; + + if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { + return; + } + + var actives; + var activesData; + + if (this._parent) { + actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]")); + + if (actives.length === 0) { + actives = null; + } + } + + if (actives) { + activesData = $$$1(actives).not(this._selector).data(DATA_KEY); + + if (activesData && activesData._isTransitioning) { + return; + } + } + + var startEvent = $$$1.Event(Event.SHOW); + $$$1(this._element).trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + if (actives) { + Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); + + if (!activesData) { + $$$1(actives).data(DATA_KEY, null); + } + } + + var dimension = this._getDimension(); + + $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); + this._element.style[dimension] = 0; + + if (this._triggerArray.length > 0) { + $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); + } + + this.setTransitioning(true); + + var complete = function complete() { + $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); + _this._element.style[dimension] = ''; + + _this.setTransitioning(false); + + $$$1(_this._element).trigger(Event.SHOWN); + }; + + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = "scroll" + capitalizedDimension; + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + this._element.style[dimension] = this._element[scrollSize] + "px"; + }; + + _proto.hide = function hide() { + var _this2 = this; + + if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { + return; + } + + var startEvent = $$$1.Event(Event.HIDE); + $$$1(this._element).trigger(startEvent); + + if (startEvent.isDefaultPrevented()) { + return; + } + + var dimension = this._getDimension(); + + this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; + Util.reflow(this._element); + $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); + + if (this._triggerArray.length > 0) { + for (var i = 0; i < this._triggerArray.length; i++) { + var trigger = this._triggerArray[i]; + var selector = Util.getSelectorFromElement(trigger); + + if (selector !== null) { + var $elem = $$$1(selector); + + if (!$elem.hasClass(ClassName.SHOW)) { + $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); + } + } + } + } + + this.setTransitioning(true); + + var complete = function complete() { + _this2.setTransitioning(false); + + $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); + }; + + this._element.style[dimension] = ''; + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + }; + + _proto.setTransitioning = function setTransitioning(isTransitioning) { + this._isTransitioning = isTransitioning; + }; + + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + this._config = null; + this._parent = null; + this._element = null; + this._triggerArray = null; + this._isTransitioning = null; + }; // Private + + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default, config); + config.toggle = Boolean(config.toggle); // Coerce string values + + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + }; + + _proto._getDimension = function _getDimension() { + var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); + return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; + }; + + _proto._getParent = function _getParent() { + var _this3 = this; + + var parent = null; + + if (Util.isElement(this._config.parent)) { + parent = this._config.parent; // It's a jQuery object + + if (typeof this._config.parent.jquery !== 'undefined') { + parent = this._config.parent[0]; + } + } else { + parent = $$$1(this._config.parent)[0]; + } + + var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; + $$$1(parent).find(selector).each(function (i, element) { + _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); + }); + return parent; + }; + + _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { + if (element) { + var isOpen = $$$1(element).hasClass(ClassName.SHOW); + + if (triggerArray.length > 0) { + $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); + } + } + }; // Static + + + Collapse._getTargetFromElement = function _getTargetFromElement(element) { + var selector = Util.getSelectorFromElement(element); + return selector ? $$$1(selector)[0] : null; + }; + + Collapse._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var $this = $$$1(this); + var data = $this.data(DATA_KEY); + + var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config); + + if (!data && _config.toggle && /show|hide/.test(config)) { + _config.toggle = false; + } + + if (!data) { + data = new Collapse(this, _config); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + _createClass(Collapse, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }, { + key: "Default", + get: function get() { + return Default; + } + }]); + + return Collapse; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + // preventDefault only for elements (which change the URL) not inside the collapsible element + if (event.currentTarget.tagName === 'A') { + event.preventDefault(); + } + + var $trigger = $$$1(this); + var selector = Util.getSelectorFromElement(this); + $$$1(selector).each(function () { + var $target = $$$1(this); + var data = $target.data(DATA_KEY); + var config = data ? 'toggle' : $trigger.data(); + + Collapse._jQueryInterface.call($target, config); + }); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $$$1.fn[NAME] = Collapse._jQueryInterface; + $$$1.fn[NAME].Constructor = Collapse; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Collapse._jQueryInterface; + }; + + return Collapse; + }($); + + /**! + * @fileOverview Kickass library to create and place poppers near their reference elements. + * @version 1.14.1 + * @license + * Copyright (c) 2016 Federico Zivolo and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; + var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; + var timeoutDuration = 0; + for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { + if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { + timeoutDuration = 1; + break; + } + } + + function microtaskDebounce(fn) { + var called = false; + return function () { + if (called) { + return; + } + called = true; + window.Promise.resolve().then(function () { + called = false; + fn(); + }); + }; + } + + function taskDebounce(fn) { + var scheduled = false; + return function () { + if (!scheduled) { + scheduled = true; + setTimeout(function () { + scheduled = false; + fn(); + }, timeoutDuration); + } + }; + } + + var supportsMicroTasks = isBrowser && window.Promise; + + /** + * Create a debounced version of a method, that's asynchronously deferred + * but called in the minimum time possible. + * + * @method + * @memberof Popper.Utils + * @argument {Function} fn + * @returns {Function} + */ + var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; + + /** + * Check if the given variable is a function + * @method + * @memberof Popper.Utils + * @argument {Any} functionToCheck - variable to check + * @returns {Boolean} answer to: is a function? + */ + function isFunction(functionToCheck) { + var getType = {}; + return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; + } + + /** + * Get CSS computed property of the given element + * @method + * @memberof Popper.Utils + * @argument {Eement} element + * @argument {String} property + */ + function getStyleComputedProperty(element, property) { + if (element.nodeType !== 1) { + return []; + } + // NOTE: 1 DOM access here + var css = getComputedStyle(element, null); + return property ? css[property] : css; + } + + /** + * Returns the parentNode or the host of the element + * @method + * @memberof Popper.Utils + * @argument {Element} element + * @returns {Element} parent + */ + function getParentNode(element) { + if (element.nodeName === 'HTML') { + return element; + } + return element.parentNode || element.host; + } + + /** + * Returns the scrolling parent of the given element + * @method + * @memberof Popper.Utils + * @argument {Element} element + * @returns {Element} scroll parent + */ + function getScrollParent(element) { + // Return body, `getScroll` will take care to get the correct `scrollTop` from it + if (!element) { + return document.body; + } + + switch (element.nodeName) { + case 'HTML': + case 'BODY': + return element.ownerDocument.body; + case '#document': + return element.body; + } + + // Firefox want us to check `-x` and `-y` variations as well + + var _getStyleComputedProp = getStyleComputedProperty(element), + overflow = _getStyleComputedProp.overflow, + overflowX = _getStyleComputedProp.overflowX, + overflowY = _getStyleComputedProp.overflowY; + + if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { + return element; + } + + return getScrollParent(getParentNode(element)); + } + + /** + * Tells if you are running Internet Explorer + * @method + * @memberof Popper.Utils + * @argument {number} version to check + * @returns {Boolean} isIE + */ + var cache = {}; + + var isIE = function () { + var version = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'all'; + + version = version.toString(); + if (cache.hasOwnProperty(version)) { + return cache[version]; + } + switch (version) { + case '11': + cache[version] = navigator.userAgent.indexOf('Trident') !== -1; + break; + case '10': + cache[version] = navigator.appVersion.indexOf('MSIE 10') !== -1; + break; + case 'all': + cache[version] = navigator.userAgent.indexOf('Trident') !== -1 || navigator.userAgent.indexOf('MSIE') !== -1; + break; + } + + //Set IE + cache.all = cache.all || Object.keys(cache).some(function (key) { + return cache[key]; + }); + return cache[version]; + }; + + /** + * Returns the offset parent of the given element + * @method + * @memberof Popper.Utils + * @argument {Element} element + * @returns {Element} offset parent + */ + function getOffsetParent(element) { + if (!element) { + return document.documentElement; + } + + var noOffsetParent = isIE(10) ? document.body : null; + + // NOTE: 1 DOM access here + var offsetParent = element.offsetParent; + // Skip hidden elements which don't have an offsetParent + while (offsetParent === noOffsetParent && element.nextElementSibling) { + offsetParent = (element = element.nextElementSibling).offsetParent; + } + + var nodeName = offsetParent && offsetParent.nodeName; + + if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { + return element ? element.ownerDocument.documentElement : document.documentElement; + } + + // .offsetParent will return the closest TD or TABLE in case + // no offsetParent is present, I hate this job... + if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { + return getOffsetParent(offsetParent); + } + + return offsetParent; + } + + function isOffsetContainer(element) { + var nodeName = element.nodeName; + + if (nodeName === 'BODY') { + return false; + } + return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; + } + + /** + * Finds the root node (document, shadowDOM root) of the given element + * @method + * @memberof Popper.Utils + * @argument {Element} node + * @returns {Element} root node + */ + function getRoot(node) { + if (node.parentNode !== null) { + return getRoot(node.parentNode); + } + + return node; + } + + /** + * Finds the offset parent common to the two provided nodes + * @method + * @memberof Popper.Utils + * @argument {Element} element1 + * @argument {Element} element2 + * @returns {Element} common offset parent + */ + function findCommonOffsetParent(element1, element2) { + // This check is needed to avoid errors in case one of the elements isn't defined for any reason + if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { + return document.documentElement; + } + + // Here we make sure to give as "start" the element that comes first in the DOM + var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; + var start = order ? element1 : element2; + var end = order ? element2 : element1; + + // Get common ancestor container + var range = document.createRange(); + range.setStart(start, 0); + range.setEnd(end, 0); + var commonAncestorContainer = range.commonAncestorContainer; + + // Both nodes are inside #document + + if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { + if (isOffsetContainer(commonAncestorContainer)) { + return commonAncestorContainer; + } + + return getOffsetParent(commonAncestorContainer); + } + + // one of the nodes is inside shadowDOM, find which one + var element1root = getRoot(element1); + if (element1root.host) { + return findCommonOffsetParent(element1root.host, element2); + } else { + return findCommonOffsetParent(element1, getRoot(element2).host); + } + } + + /** + * Gets the scroll value of the given element in the given side (top and left) + * @method + * @memberof Popper.Utils + * @argument {Element} element + * @argument {String} side `top` or `left` + * @returns {number} amount of scrolled pixels + */ + function getScroll(element) { + var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; + + var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; + var nodeName = element.nodeName; + + if (nodeName === 'BODY' || nodeName === 'HTML') { + var html = element.ownerDocument.documentElement; + var scrollingElement = element.ownerDocument.scrollingElement || html; + return scrollingElement[upperSide]; + } + + return element[upperSide]; + } + + /* + * Sum or subtract the element scroll values (left and top) from a given rect object + * @method + * @memberof Popper.Utils + * @param {Object} rect - Rect object you want to change + * @param {HTMLElement} element - The element from the function reads the scroll values + * @param {Boolean} subtract - set to true if you want to subtract the scroll values + * @return {Object} rect - The modifier rect object + */ + function includeScroll(rect, element) { + var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + var scrollTop = getScroll(element, 'top'); + var scrollLeft = getScroll(element, 'left'); + var modifier = subtract ? -1 : 1; + rect.top += scrollTop * modifier; + rect.bottom += scrollTop * modifier; + rect.left += scrollLeft * modifier; + rect.right += scrollLeft * modifier; + return rect; + } + + /* + * Helper to detect borders of a given element + * @method + * @memberof Popper.Utils + * @param {CSSStyleDeclaration} styles + * Result of `getStyleComputedProperty` on the given element + * @param {String} axis - `x` or `y` + * @return {number} borders - The borders size of the given axis + */ + + function getBordersSize(styles, axis) { + var sideA = axis === 'x' ? 'Left' : 'Top'; + var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; + + return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); + } + + function getSize(axis, body, html, computedStyle) { + return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0); + } + + function getWindowSizes() { + var body = document.body; + var html = document.documentElement; + var computedStyle = isIE(10) && getComputedStyle(html); + + return { + height: getSize('Height', body, html, computedStyle), + width: getSize('Width', body, html, computedStyle) + }; + } + + var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + }; + + var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }(); + + + + + + var defineProperty = function (obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + }; + + var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + /** + * Given element offsets, generate an output similar to getBoundingClientRect + * @method + * @memberof Popper.Utils + * @argument {Object} offsets + * @returns {Object} ClientRect like output + */ + function getClientRect(offsets) { + return _extends({}, offsets, { + right: offsets.left + offsets.width, + bottom: offsets.top + offsets.height + }); + } + + /** + * Get bounding client rect of given element + * @method + * @memberof Popper.Utils + * @param {HTMLElement} element + * @return {Object} client rect + */ + function getBoundingClientRect(element) { + var rect = {}; + + // IE10 10 FIX: Please, don't ask, the element isn't + // considered in DOM in some circumstances... + // This isn't reproducible in IE10 compatibility mode of IE11 + try { + if (isIE(10)) { + rect = element.getBoundingClientRect(); + var scrollTop = getScroll(element, 'top'); + var scrollLeft = getScroll(element, 'left'); + rect.top += scrollTop; + rect.left += scrollLeft; + rect.bottom += scrollTop; + rect.right += scrollLeft; + } else { + rect = element.getBoundingClientRect(); + } + } catch (e) {} + + var result = { + left: rect.left, + top: rect.top, + width: rect.right - rect.left, + height: rect.bottom - rect.top + }; + + // subtract scrollbar size from sizes + var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {}; + var width = sizes.width || element.clientWidth || result.right - result.left; + var height = sizes.height || element.clientHeight || result.bottom - result.top; + + var horizScrollbar = element.offsetWidth - width; + var vertScrollbar = element.offsetHeight - height; + + // if an hypothetical scrollbar is detected, we must be sure it's not a `border` + // we make this check conditional for performance reasons + if (horizScrollbar || vertScrollbar) { + var styles = getStyleComputedProperty(element); + horizScrollbar -= getBordersSize(styles, 'x'); + vertScrollbar -= getBordersSize(styles, 'y'); + + result.width -= horizScrollbar; + result.height -= vertScrollbar; + } + + return getClientRect(result); + } + + function getOffsetRectRelativeToArbitraryNode(children, parent) { + var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + var isIE10 = isIE(10); + var isHTML = parent.nodeName === 'HTML'; + var childrenRect = getBoundingClientRect(children); + var parentRect = getBoundingClientRect(parent); + var scrollParent = getScrollParent(children); + + var styles = getStyleComputedProperty(parent); + var borderTopWidth = parseFloat(styles.borderTopWidth, 10); + var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); + + // In cases where the parent is fixed, we must ignore negative scroll in offset calc + if (fixedPosition && parent.nodeName === 'HTML') { + parentRect.top = Math.max(parentRect.top, 0); + parentRect.left = Math.max(parentRect.left, 0); + } + var offsets = getClientRect({ + top: childrenRect.top - parentRect.top - borderTopWidth, + left: childrenRect.left - parentRect.left - borderLeftWidth, + width: childrenRect.width, + height: childrenRect.height + }); + offsets.marginTop = 0; + offsets.marginLeft = 0; + + // Subtract margins of documentElement in case it's being used as parent + // we do this only on HTML because it's the only element that behaves + // differently when margins are applied to it. The margins are included in + // the box of the documentElement, in the other cases not. + if (!isIE10 && isHTML) { + var marginTop = parseFloat(styles.marginTop, 10); + var marginLeft = parseFloat(styles.marginLeft, 10); + + offsets.top -= borderTopWidth - marginTop; + offsets.bottom -= borderTopWidth - marginTop; + offsets.left -= borderLeftWidth - marginLeft; + offsets.right -= borderLeftWidth - marginLeft; + + // Attach marginTop and marginLeft because in some circumstances we may need them + offsets.marginTop = marginTop; + offsets.marginLeft = marginLeft; + } + + if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { + offsets = includeScroll(offsets, parent); + } + + return offsets; + } + + function getViewportOffsetRectRelativeToArtbitraryNode(element) { + var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var html = element.ownerDocument.documentElement; + var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); + var width = Math.max(html.clientWidth, window.innerWidth || 0); + var height = Math.max(html.clientHeight, window.innerHeight || 0); + + var scrollTop = !excludeScroll ? getScroll(html) : 0; + var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; + + var offset = { + top: scrollTop - relativeOffset.top + relativeOffset.marginTop, + left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, + width: width, + height: height + }; + + return getClientRect(offset); + } + + /** + * Check if the given element is fixed or is inside a fixed parent + * @method + * @memberof Popper.Utils + * @argument {Element} element + * @argument {Element} customContainer + * @returns {Boolean} answer to "isFixed?" + */ + function isFixed(element) { + var nodeName = element.nodeName; + if (nodeName === 'BODY' || nodeName === 'HTML') { + return false; + } + if (getStyleComputedProperty(element, 'position') === 'fixed') { + return true; + } + return isFixed(getParentNode(element)); + } + + /** + * Finds the first parent of an element that has a transformed property defined + * @method + * @memberof Popper.Utils + * @argument {Element} element + * @returns {Element} first transformed parent or documentElement + */ + + function getFixedPositionOffsetParent(element) { + // This check is needed to avoid errors in case one of the elements isn't defined for any reason + if (!element || !element.parentElement || isIE()) { + return document.documentElement; + } + var el = element.parentElement; + while (el && getStyleComputedProperty(el, 'transform') === 'none') { + el = el.parentElement; + } + return el || document.documentElement; + } + + /** + * Computed the boundaries limits and return them + * @method + * @memberof Popper.Utils + * @param {HTMLElement} popper + * @param {HTMLElement} reference + * @param {number} padding + * @param {HTMLElement} boundariesElement - Element used to define the boundaries + * @param {Boolean} fixedPosition - Is in fixed position mode + * @returns {Object} Coordinates of the boundaries + */ + function getBoundaries(popper, reference, padding, boundariesElement) { + var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; + + // NOTE: 1 DOM access here + + var boundaries = { top: 0, left: 0 }; + var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); + + // Handle viewport case + if (boundariesElement === 'viewport') { + boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); + } else { + // Handle other cases based on DOM element used as boundaries + var boundariesNode = void 0; + if (boundariesElement === 'scrollParent') { + boundariesNode = getScrollParent(getParentNode(reference)); + if (boundariesNode.nodeName === 'BODY') { + boundariesNode = popper.ownerDocument.documentElement; + } + } else if (boundariesElement === 'window') { + boundariesNode = popper.ownerDocument.documentElement; + } else { + boundariesNode = boundariesElement; + } + + var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); + + // In case of HTML, we need a different computation + if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { + var _getWindowSizes = getWindowSizes(), + height = _getWindowSizes.height, + width = _getWindowSizes.width; + + boundaries.top += offsets.top - offsets.marginTop; + boundaries.bottom = height + offsets.top; + boundaries.left += offsets.left - offsets.marginLeft; + boundaries.right = width + offsets.left; + } else { + // for all the other DOM elements, this one is good + boundaries = offsets; + } + } + + // Add paddings + boundaries.left += padding; + boundaries.top += padding; + boundaries.right -= padding; + boundaries.bottom -= padding; + + return boundaries; + } + + function getArea(_ref) { + var width = _ref.width, + height = _ref.height; + + return width * height; + } + + /** + * Utility used to transform the `auto` placement to the placement with more + * available space. + * @method + * @memberof Popper.Utils + * @argument {Object} data - The data object generated by update method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { + var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; + + if (placement.indexOf('auto') === -1) { + return placement; + } + + var boundaries = getBoundaries(popper, reference, padding, boundariesElement); + + var rects = { + top: { + width: boundaries.width, + height: refRect.top - boundaries.top + }, + right: { + width: boundaries.right - refRect.right, + height: boundaries.height + }, + bottom: { + width: boundaries.width, + height: boundaries.bottom - refRect.bottom + }, + left: { + width: refRect.left - boundaries.left, + height: boundaries.height + } + }; + + var sortedAreas = Object.keys(rects).map(function (key) { + return _extends({ + key: key + }, rects[key], { + area: getArea(rects[key]) + }); + }).sort(function (a, b) { + return b.area - a.area; + }); + + var filteredAreas = sortedAreas.filter(function (_ref2) { + var width = _ref2.width, + height = _ref2.height; + return width >= popper.clientWidth && height >= popper.clientHeight; + }); + + var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; + + var variation = placement.split('-')[1]; + + return computedPlacement + (variation ? '-' + variation : ''); + } + + /** + * Get offsets to the reference element + * @method + * @memberof Popper.Utils + * @param {Object} state + * @param {Element} popper - the popper element + * @param {Element} reference - the reference element (the popper will be relative to this) + * @param {Element} fixedPosition - is in fixed position mode + * @returns {Object} An object containing the offsets which will be applied to the popper + */ + function getReferenceOffsets(state, popper, reference) { + var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + + var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); + return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); + } + + /** + * Get the outer sizes of the given element (offset size + margins) + * @method + * @memberof Popper.Utils + * @argument {Element} element + * @returns {Object} object containing width and height properties + */ + function getOuterSizes(element) { + var styles = getComputedStyle(element); + var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom); + var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight); + var result = { + width: element.offsetWidth + y, + height: element.offsetHeight + x + }; + return result; + } + + /** + * Get the opposite placement of the given one + * @method + * @memberof Popper.Utils + * @argument {String} placement + * @returns {String} flipped placement + */ + function getOppositePlacement(placement) { + var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; + return placement.replace(/left|right|bottom|top/g, function (matched) { + return hash[matched]; + }); + } + + /** + * Get offsets to the popper + * @method + * @memberof Popper.Utils + * @param {Object} position - CSS position the Popper will get applied + * @param {HTMLElement} popper - the popper element + * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) + * @param {String} placement - one of the valid placement options + * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper + */ + function getPopperOffsets(popper, referenceOffsets, placement) { + placement = placement.split('-')[0]; + + // Get popper node sizes + var popperRect = getOuterSizes(popper); + + // Add position, width and height to our offsets object + var popperOffsets = { + width: popperRect.width, + height: popperRect.height + }; + + // depending by the popper placement we have to compute its offsets slightly differently + var isHoriz = ['right', 'left'].indexOf(placement) !== -1; + var mainSide = isHoriz ? 'top' : 'left'; + var secondarySide = isHoriz ? 'left' : 'top'; + var measurement = isHoriz ? 'height' : 'width'; + var secondaryMeasurement = !isHoriz ? 'height' : 'width'; + + popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; + if (placement === secondarySide) { + popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; + } else { + popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; + } + + return popperOffsets; + } + + /** + * Mimics the `find` method of Array + * @method + * @memberof Popper.Utils + * @argument {Array} arr + * @argument prop + * @argument value + * @returns index or -1 + */ + function find(arr, check) { + // use native find if supported + if (Array.prototype.find) { + return arr.find(check); + } + + // use `filter` to obtain the same behavior of `find` + return arr.filter(check)[0]; + } + + /** + * Return the index of the matching object + * @method + * @memberof Popper.Utils + * @argument {Array} arr + * @argument prop + * @argument value + * @returns index or -1 + */ + function findIndex(arr, prop, value) { + // use native findIndex if supported + if (Array.prototype.findIndex) { + return arr.findIndex(function (cur) { + return cur[prop] === value; + }); + } + + // use `find` + `indexOf` if `findIndex` isn't supported + var match = find(arr, function (obj) { + return obj[prop] === value; + }); + return arr.indexOf(match); + } + + /** + * Loop trough the list of modifiers and run them in order, + * each of them will then edit the data object. + * @method + * @memberof Popper.Utils + * @param {dataObject} data + * @param {Array} modifiers + * @param {String} ends - Optional modifier name used as stopper + * @returns {dataObject} + */ + function runModifiers(modifiers, data, ends) { + var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); + + modifiersToRun.forEach(function (modifier) { + if (modifier['function']) { + // eslint-disable-line dot-notation + console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); + } + var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation + if (modifier.enabled && isFunction(fn)) { + // Add properties to offsets to make them a complete clientRect object + // we do this before each modifier to make sure the previous one doesn't + // mess with these values + data.offsets.popper = getClientRect(data.offsets.popper); + data.offsets.reference = getClientRect(data.offsets.reference); + + data = fn(data, modifier); + } + }); + + return data; + } + + /** + * Updates the position of the popper, computing the new offsets and applying + * the new style.
+ * Prefer `scheduleUpdate` over `update` because of performance reasons. + * @method + * @memberof Popper + */ + function update() { + // if popper is destroyed, don't perform any further update + if (this.state.isDestroyed) { + return; + } + + var data = { + instance: this, + styles: {}, + arrowStyles: {}, + attributes: {}, + flipped: false, + offsets: {} + }; + + // compute reference element offsets + data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); + + // compute auto placement, store placement inside the data object, + // modifiers will be able to edit `placement` if needed + // and refer to originalPlacement to know the original value + data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); + + // store the computed placement inside `originalPlacement` + data.originalPlacement = data.placement; + + data.positionFixed = this.options.positionFixed; + + // compute the popper offsets + data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); + data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; + + // run the modifiers + data = runModifiers(this.modifiers, data); + + // the first `update` will call `onCreate` callback + // the other ones will call `onUpdate` callback + if (!this.state.isCreated) { + this.state.isCreated = true; + this.options.onCreate(data); + } else { + this.options.onUpdate(data); + } + } + + /** + * Helper used to know if the given modifier is enabled. + * @method + * @memberof Popper.Utils + * @returns {Boolean} + */ + function isModifierEnabled(modifiers, modifierName) { + return modifiers.some(function (_ref) { + var name = _ref.name, + enabled = _ref.enabled; + return enabled && name === modifierName; + }); + } + + /** + * Get the prefixed supported property name + * @method + * @memberof Popper.Utils + * @argument {String} property (camelCase) + * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) + */ + function getSupportedPropertyName(property) { + var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; + var upperProp = property.charAt(0).toUpperCase() + property.slice(1); + + for (var i = 0; i < prefixes.length; i++) { + var prefix = prefixes[i]; + var toCheck = prefix ? '' + prefix + upperProp : property; + if (typeof document.body.style[toCheck] !== 'undefined') { + return toCheck; + } + } + return null; + } + + /** + * Destroy the popper + * @method + * @memberof Popper + */ + function destroy() { + this.state.isDestroyed = true; + + // touch DOM only if `applyStyle` modifier is enabled + if (isModifierEnabled(this.modifiers, 'applyStyle')) { + this.popper.removeAttribute('x-placement'); + this.popper.style.position = ''; + this.popper.style.top = ''; + this.popper.style.left = ''; + this.popper.style.right = ''; + this.popper.style.bottom = ''; + this.popper.style.willChange = ''; + this.popper.style[getSupportedPropertyName('transform')] = ''; + } + + this.disableEventListeners(); + + // remove the popper if user explicity asked for the deletion on destroy + // do not use `remove` because IE11 doesn't support it + if (this.options.removeOnDestroy) { + this.popper.parentNode.removeChild(this.popper); + } + return this; + } + + /** + * Get the window associated with the element + * @argument {Element} element + * @returns {Window} + */ + function getWindow(element) { + var ownerDocument = element.ownerDocument; + return ownerDocument ? ownerDocument.defaultView : window; + } + + function attachToScrollParents(scrollParent, event, callback, scrollParents) { + var isBody = scrollParent.nodeName === 'BODY'; + var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; + target.addEventListener(event, callback, { passive: true }); + + if (!isBody) { + attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); + } + scrollParents.push(target); + } + + /** + * Setup needed event listeners used to update the popper position + * @method + * @memberof Popper.Utils + * @private + */ + function setupEventListeners(reference, options, state, updateBound) { + // Resize event listener on window + state.updateBound = updateBound; + getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); + + // Scroll event listener on scroll parents + var scrollElement = getScrollParent(reference); + attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); + state.scrollElement = scrollElement; + state.eventsEnabled = true; + + return state; + } + + /** + * It will add resize/scroll events and start recalculating + * position of the popper element when they are triggered. + * @method + * @memberof Popper + */ + function enableEventListeners() { + if (!this.state.eventsEnabled) { + this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); + } + } + + /** + * Remove event listeners used to update the popper position + * @method + * @memberof Popper.Utils + * @private + */ + function removeEventListeners(reference, state) { + // Remove resize event listener on window + getWindow(reference).removeEventListener('resize', state.updateBound); + + // Remove scroll event listener on scroll parents + state.scrollParents.forEach(function (target) { + target.removeEventListener('scroll', state.updateBound); + }); + + // Reset state + state.updateBound = null; + state.scrollParents = []; + state.scrollElement = null; + state.eventsEnabled = false; + return state; + } + + /** + * It will remove resize/scroll events and won't recalculate popper position + * when they are triggered. It also won't trigger onUpdate callback anymore, + * unless you call `update` method manually. + * @method + * @memberof Popper + */ + function disableEventListeners() { + if (this.state.eventsEnabled) { + cancelAnimationFrame(this.scheduleUpdate); + this.state = removeEventListeners(this.reference, this.state); + } + } + + /** + * Tells if a given input is a number + * @method + * @memberof Popper.Utils + * @param {*} input to check + * @return {Boolean} + */ + function isNumeric(n) { + return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); + } + + /** + * Set the style to the given popper + * @method + * @memberof Popper.Utils + * @argument {Element} element - Element to apply the style to + * @argument {Object} styles + * Object with a list of properties and values which will be applied to the element + */ + function setStyles(element, styles) { + Object.keys(styles).forEach(function (prop) { + var unit = ''; + // add unit if the value is numeric and is one of the following + if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { + unit = 'px'; + } + element.style[prop] = styles[prop] + unit; + }); + } + + /** + * Set the attributes to the given popper + * @method + * @memberof Popper.Utils + * @argument {Element} element - Element to apply the attributes to + * @argument {Object} styles + * Object with a list of properties and values which will be applied to the element + */ + function setAttributes(element, attributes) { + Object.keys(attributes).forEach(function (prop) { + var value = attributes[prop]; + if (value !== false) { + element.setAttribute(prop, attributes[prop]); + } else { + element.removeAttribute(prop); + } + }); + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by `update` method + * @argument {Object} data.styles - List of style properties - values to apply to popper element + * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The same data object + */ + function applyStyle(data) { + // any property present in `data.styles` will be applied to the popper, + // in this way we can make the 3rd party modifiers add custom styles to it + // Be aware, modifiers could override the properties defined in the previous + // lines of this modifier! + setStyles(data.instance.popper, data.styles); + + // any property present in `data.attributes` will be applied to the popper, + // they will be set as HTML attributes of the element + setAttributes(data.instance.popper, data.attributes); + + // if arrowElement is defined and arrowStyles has some properties + if (data.arrowElement && Object.keys(data.arrowStyles).length) { + setStyles(data.arrowElement, data.arrowStyles); + } + + return data; + } + + /** + * Set the x-placement attribute before everything else because it could be used + * to add margins to the popper margins needs to be calculated to get the + * correct popper offsets. + * @method + * @memberof Popper.modifiers + * @param {HTMLElement} reference - The reference element used to position the popper + * @param {HTMLElement} popper - The HTML element used as popper + * @param {Object} options - Popper.js options + */ + function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { + // compute reference element offsets + var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); + + // compute auto placement, store placement inside the data object, + // modifiers will be able to edit `placement` if needed + // and refer to originalPlacement to know the original value + var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); + + popper.setAttribute('x-placement', placement); + + // Apply `position` to popper before anything else because + // without the position applied we can't guarantee correct computations + setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); + + return options; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by `update` method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function computeStyle(data, options) { + var x = options.x, + y = options.y; + var popper = data.offsets.popper; + + // Remove this legacy support in Popper.js v2 + + var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { + return modifier.name === 'applyStyle'; + }).gpuAcceleration; + if (legacyGpuAccelerationOption !== undefined) { + console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); + } + var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; + + var offsetParent = getOffsetParent(data.instance.popper); + var offsetParentRect = getBoundingClientRect(offsetParent); + + // Styles + var styles = { + position: popper.position + }; + + // floor sides to avoid blurry text + var offsets = { + left: Math.floor(popper.left), + top: Math.floor(popper.top), + bottom: Math.floor(popper.bottom), + right: Math.floor(popper.right) + }; + + var sideA = x === 'bottom' ? 'top' : 'bottom'; + var sideB = y === 'right' ? 'left' : 'right'; + + // if gpuAcceleration is set to `true` and transform is supported, + // we use `translate3d` to apply the position to the popper we + // automatically use the supported prefixed version if needed + var prefixedProperty = getSupportedPropertyName('transform'); + + // now, let's make a step back and look at this code closely (wtf?) + // If the content of the popper grows once it's been positioned, it + // may happen that the popper gets misplaced because of the new content + // overflowing its reference element + // To avoid this problem, we provide two options (x and y), which allow + // the consumer to define the offset origin. + // If we position a popper on top of a reference element, we can set + // `x` to `top` to make the popper grow towards its top instead of + // its bottom. + var left = void 0, + top = void 0; + if (sideA === 'bottom') { + top = -offsetParentRect.height + offsets.bottom; + } else { + top = offsets.top; + } + if (sideB === 'right') { + left = -offsetParentRect.width + offsets.right; + } else { + left = offsets.left; + } + if (gpuAcceleration && prefixedProperty) { + styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; + styles[sideA] = 0; + styles[sideB] = 0; + styles.willChange = 'transform'; + } else { + // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties + var invertTop = sideA === 'bottom' ? -1 : 1; + var invertLeft = sideB === 'right' ? -1 : 1; + styles[sideA] = top * invertTop; + styles[sideB] = left * invertLeft; + styles.willChange = sideA + ', ' + sideB; + } + + // Attributes + var attributes = { + 'x-placement': data.placement + }; + + // Update `data` attributes, styles and arrowStyles + data.attributes = _extends({}, attributes, data.attributes); + data.styles = _extends({}, styles, data.styles); + data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); + + return data; + } + + /** + * Helper used to know if the given modifier depends from another one.
+ * It checks if the needed modifier is listed and enabled. + * @method + * @memberof Popper.Utils + * @param {Array} modifiers - list of modifiers + * @param {String} requestingName - name of requesting modifier + * @param {String} requestedName - name of requested modifier + * @returns {Boolean} + */ + function isModifierRequired(modifiers, requestingName, requestedName) { + var requesting = find(modifiers, function (_ref) { + var name = _ref.name; + return name === requestingName; + }); + + var isRequired = !!requesting && modifiers.some(function (modifier) { + return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; + }); + + if (!isRequired) { + var _requesting = '`' + requestingName + '`'; + var requested = '`' + requestedName + '`'; + console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); + } + return isRequired; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by update method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function arrow(data, options) { + var _data$offsets$arrow; + + // arrow depends on keepTogether in order to work + if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { + return data; + } + + var arrowElement = options.element; + + // if arrowElement is a string, suppose it's a CSS selector + if (typeof arrowElement === 'string') { + arrowElement = data.instance.popper.querySelector(arrowElement); + + // if arrowElement is not found, don't run the modifier + if (!arrowElement) { + return data; + } + } else { + // if the arrowElement isn't a query selector we must check that the + // provided DOM node is child of its popper node + if (!data.instance.popper.contains(arrowElement)) { + console.warn('WARNING: `arrow.element` must be child of its popper element!'); + return data; + } + } + + var placement = data.placement.split('-')[0]; + var _data$offsets = data.offsets, + popper = _data$offsets.popper, + reference = _data$offsets.reference; + + var isVertical = ['left', 'right'].indexOf(placement) !== -1; + + var len = isVertical ? 'height' : 'width'; + var sideCapitalized = isVertical ? 'Top' : 'Left'; + var side = sideCapitalized.toLowerCase(); + var altSide = isVertical ? 'left' : 'top'; + var opSide = isVertical ? 'bottom' : 'right'; + var arrowElementSize = getOuterSizes(arrowElement)[len]; + + // + // extends keepTogether behavior making sure the popper and its + // reference have enough pixels in conjuction + // + + // top/left side + if (reference[opSide] - arrowElementSize < popper[side]) { + data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); + } + // bottom/right side + if (reference[side] + arrowElementSize > popper[opSide]) { + data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; + } + data.offsets.popper = getClientRect(data.offsets.popper); + + // compute center of the popper + var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; + + // Compute the sideValue using the updated popper offsets + // take popper margin in account because we don't have this info available + var css = getStyleComputedProperty(data.instance.popper); + var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10); + var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10); + var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; + + // prevent arrowElement from being placed not contiguously to its popper + sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); + + data.arrowElement = arrowElement; + data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); + + return data; + } + + /** + * Get the opposite placement variation of the given one + * @method + * @memberof Popper.Utils + * @argument {String} placement variation + * @returns {String} flipped placement variation + */ + function getOppositeVariation(variation) { + if (variation === 'end') { + return 'start'; + } else if (variation === 'start') { + return 'end'; + } + return variation; + } + + /** + * List of accepted placements to use as values of the `placement` option.
+ * Valid placements are: + * - `auto` + * - `top` + * - `right` + * - `bottom` + * - `left` + * + * Each placement can have a variation from this list: + * - `-start` + * - `-end` + * + * Variations are interpreted easily if you think of them as the left to right + * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` + * is right.
+ * Vertically (`left` and `right`), `start` is top and `end` is bottom. + * + * Some valid examples are: + * - `top-end` (on top of reference, right aligned) + * - `right-start` (on right of reference, top aligned) + * - `bottom` (on bottom, centered) + * - `auto-right` (on the side with more space available, alignment depends by placement) + * + * @static + * @type {Array} + * @enum {String} + * @readonly + * @method placements + * @memberof Popper + */ + var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; + + // Get rid of `auto` `auto-start` and `auto-end` + var validPlacements = placements.slice(3); + + /** + * Given an initial placement, returns all the subsequent placements + * clockwise (or counter-clockwise). + * + * @method + * @memberof Popper.Utils + * @argument {String} placement - A valid placement (it accepts variations) + * @argument {Boolean} counter - Set to true to walk the placements counterclockwise + * @returns {Array} placements including their variations + */ + function clockwise(placement) { + var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + var index = validPlacements.indexOf(placement); + var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); + return counter ? arr.reverse() : arr; + } + + var BEHAVIORS = { + FLIP: 'flip', + CLOCKWISE: 'clockwise', + COUNTERCLOCKWISE: 'counterclockwise' + }; + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by update method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function flip(data, options) { + // if `inner` modifier is enabled, we can't use the `flip` modifier + if (isModifierEnabled(data.instance.modifiers, 'inner')) { + return data; + } + + if (data.flipped && data.placement === data.originalPlacement) { + // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides + return data; + } + + var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); + + var placement = data.placement.split('-')[0]; + var placementOpposite = getOppositePlacement(placement); + var variation = data.placement.split('-')[1] || ''; + + var flipOrder = []; + + switch (options.behavior) { + case BEHAVIORS.FLIP: + flipOrder = [placement, placementOpposite]; + break; + case BEHAVIORS.CLOCKWISE: + flipOrder = clockwise(placement); + break; + case BEHAVIORS.COUNTERCLOCKWISE: + flipOrder = clockwise(placement, true); + break; + default: + flipOrder = options.behavior; + } + + flipOrder.forEach(function (step, index) { + if (placement !== step || flipOrder.length === index + 1) { + return data; + } + + placement = data.placement.split('-')[0]; + placementOpposite = getOppositePlacement(placement); + + var popperOffsets = data.offsets.popper; + var refOffsets = data.offsets.reference; + + // using floor because the reference offsets may contain decimals we are not going to consider here + var floor = Math.floor; + var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); + + var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); + var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); + var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); + var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); + + var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; + + // flip the variation if required + var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; + var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); + + if (overlapsRef || overflowsBoundaries || flippedVariation) { + // this boolean to detect any flip loop + data.flipped = true; + + if (overlapsRef || overflowsBoundaries) { + placement = flipOrder[index + 1]; + } + + if (flippedVariation) { + variation = getOppositeVariation(variation); + } + + data.placement = placement + (variation ? '-' + variation : ''); + + // this object contains `position`, we want to preserve it along with + // any additional property we may add in the future + data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); + + data = runModifiers(data.instance.modifiers, data, 'flip'); + } + }); + return data; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by update method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function keepTogether(data) { + var _data$offsets = data.offsets, + popper = _data$offsets.popper, + reference = _data$offsets.reference; + + var placement = data.placement.split('-')[0]; + var floor = Math.floor; + var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; + var side = isVertical ? 'right' : 'bottom'; + var opSide = isVertical ? 'left' : 'top'; + var measurement = isVertical ? 'width' : 'height'; + + if (popper[side] < floor(reference[opSide])) { + data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; + } + if (popper[opSide] > floor(reference[side])) { + data.offsets.popper[opSide] = floor(reference[side]); + } + + return data; + } + + /** + * Converts a string containing value + unit into a px value number + * @function + * @memberof {modifiers~offset} + * @private + * @argument {String} str - Value + unit string + * @argument {String} measurement - `height` or `width` + * @argument {Object} popperOffsets + * @argument {Object} referenceOffsets + * @returns {Number|String} + * Value in pixels, or original string if no values were extracted + */ + function toValue(str, measurement, popperOffsets, referenceOffsets) { + // separate value from unit + var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); + var value = +split[1]; + var unit = split[2]; + + // If it's not a number it's an operator, I guess + if (!value) { + return str; + } + + if (unit.indexOf('%') === 0) { + var element = void 0; + switch (unit) { + case '%p': + element = popperOffsets; + break; + case '%': + case '%r': + default: + element = referenceOffsets; + } + + var rect = getClientRect(element); + return rect[measurement] / 100 * value; + } else if (unit === 'vh' || unit === 'vw') { + // if is a vh or vw, we calculate the size based on the viewport + var size = void 0; + if (unit === 'vh') { + size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); + } else { + size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); + } + return size / 100 * value; + } else { + // if is an explicit pixel unit, we get rid of the unit and keep the value + // if is an implicit unit, it's px, and we return just the value + return value; + } + } + + /** + * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. + * @function + * @memberof {modifiers~offset} + * @private + * @argument {String} offset + * @argument {Object} popperOffsets + * @argument {Object} referenceOffsets + * @argument {String} basePlacement + * @returns {Array} a two cells array with x and y offsets in numbers + */ + function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { + var offsets = [0, 0]; + + // Use height if placement is left or right and index is 0 otherwise use width + // in this way the first offset will use an axis and the second one + // will use the other one + var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; + + // Split the offset string to obtain a list of values and operands + // The regex addresses values with the plus or minus sign in front (+10, -20, etc) + var fragments = offset.split(/(\+|\-)/).map(function (frag) { + return frag.trim(); + }); + + // Detect if the offset string contains a pair of values or a single one + // they could be separated by comma or space + var divider = fragments.indexOf(find(fragments, function (frag) { + return frag.search(/,|\s/) !== -1; + })); + + if (fragments[divider] && fragments[divider].indexOf(',') === -1) { + console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); + } + + // If divider is found, we divide the list of values and operands to divide + // them by ofset X and Y. + var splitRegex = /\s*,\s*|\s+/; + var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; + + // Convert the values with units to absolute pixels to allow our computations + ops = ops.map(function (op, index) { + // Most of the units rely on the orientation of the popper + var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; + var mergeWithPrevious = false; + return op + // This aggregates any `+` or `-` sign that aren't considered operators + // e.g.: 10 + +5 => [10, +, +5] + .reduce(function (a, b) { + if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { + a[a.length - 1] = b; + mergeWithPrevious = true; + return a; + } else if (mergeWithPrevious) { + a[a.length - 1] += b; + mergeWithPrevious = false; + return a; + } else { + return a.concat(b); + } + }, []) + // Here we convert the string values into number values (in px) + .map(function (str) { + return toValue(str, measurement, popperOffsets, referenceOffsets); + }); + }); + + // Loop trough the offsets arrays and execute the operations + ops.forEach(function (op, index) { + op.forEach(function (frag, index2) { + if (isNumeric(frag)) { + offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); + } + }); + }); + return offsets; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by update method + * @argument {Object} options - Modifiers configuration and options + * @argument {Number|String} options.offset=0 + * The offset value as described in the modifier description + * @returns {Object} The data object, properly modified + */ + function offset(data, _ref) { + var offset = _ref.offset; + var placement = data.placement, + _data$offsets = data.offsets, + popper = _data$offsets.popper, + reference = _data$offsets.reference; + + var basePlacement = placement.split('-')[0]; + + var offsets = void 0; + if (isNumeric(+offset)) { + offsets = [+offset, 0]; + } else { + offsets = parseOffset(offset, popper, reference, basePlacement); + } + + if (basePlacement === 'left') { + popper.top += offsets[0]; + popper.left -= offsets[1]; + } else if (basePlacement === 'right') { + popper.top += offsets[0]; + popper.left += offsets[1]; + } else if (basePlacement === 'top') { + popper.left += offsets[0]; + popper.top -= offsets[1]; + } else if (basePlacement === 'bottom') { + popper.left += offsets[0]; + popper.top += offsets[1]; + } + + data.popper = popper; + return data; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by `update` method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function preventOverflow(data, options) { + var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); + + // If offsetParent is the reference element, we really want to + // go one step up and use the next offsetParent as reference to + // avoid to make this modifier completely useless and look like broken + if (data.instance.reference === boundariesElement) { + boundariesElement = getOffsetParent(boundariesElement); + } + + var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); + options.boundaries = boundaries; + + var order = options.priority; + var popper = data.offsets.popper; + + var check = { + primary: function primary(placement) { + var value = popper[placement]; + if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { + value = Math.max(popper[placement], boundaries[placement]); + } + return defineProperty({}, placement, value); + }, + secondary: function secondary(placement) { + var mainSide = placement === 'right' ? 'left' : 'top'; + var value = popper[mainSide]; + if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { + value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); + } + return defineProperty({}, mainSide, value); + } + }; + + order.forEach(function (placement) { + var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; + popper = _extends({}, popper, check[side](placement)); + }); + + data.offsets.popper = popper; + + return data; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by `update` method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function shift(data) { + var placement = data.placement; + var basePlacement = placement.split('-')[0]; + var shiftvariation = placement.split('-')[1]; + + // if shift shiftvariation is specified, run the modifier + if (shiftvariation) { + var _data$offsets = data.offsets, + reference = _data$offsets.reference, + popper = _data$offsets.popper; + + var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; + var side = isVertical ? 'left' : 'top'; + var measurement = isVertical ? 'width' : 'height'; + + var shiftOffsets = { + start: defineProperty({}, side, reference[side]), + end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) + }; + + data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); + } + + return data; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by update method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function hide(data) { + if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { + return data; + } + + var refRect = data.offsets.reference; + var bound = find(data.instance.modifiers, function (modifier) { + return modifier.name === 'preventOverflow'; + }).boundaries; + + if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { + // Avoid unnecessary DOM access if visibility hasn't changed + if (data.hide === true) { + return data; + } + + data.hide = true; + data.attributes['x-out-of-boundaries'] = ''; + } else { + // Avoid unnecessary DOM access if visibility hasn't changed + if (data.hide === false) { + return data; + } + + data.hide = false; + data.attributes['x-out-of-boundaries'] = false; + } + + return data; + } + + /** + * @function + * @memberof Modifiers + * @argument {Object} data - The data object generated by `update` method + * @argument {Object} options - Modifiers configuration and options + * @returns {Object} The data object, properly modified + */ + function inner(data) { + var placement = data.placement; + var basePlacement = placement.split('-')[0]; + var _data$offsets = data.offsets, + popper = _data$offsets.popper, + reference = _data$offsets.reference; + + var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; + + var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; + + popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); + + data.placement = getOppositePlacement(placement); + data.offsets.popper = getClientRect(popper); + + return data; + } + + /** + * Modifier function, each modifier can have a function of this type assigned + * to its `fn` property.
+ * These functions will be called on each update, this means that you must + * make sure they are performant enough to avoid performance bottlenecks. + * + * @function ModifierFn + * @argument {dataObject} data - The data object generated by `update` method + * @argument {Object} options - Modifiers configuration and options + * @returns {dataObject} The data object, properly modified + */ + + /** + * Modifiers are plugins used to alter the behavior of your poppers.
+ * Popper.js uses a set of 9 modifiers to provide all the basic functionalities + * needed by the library. + * + * Usually you don't want to override the `order`, `fn` and `onLoad` props. + * All the other properties are configurations that could be tweaked. + * @namespace modifiers + */ + var modifiers = { + /** + * Modifier used to shift the popper on the start or end of its reference + * element.
+ * It will read the variation of the `placement` property.
+ * It can be one either `-end` or `-start`. + * @memberof modifiers + * @inner + */ + shift: { + /** @prop {number} order=100 - Index used to define the order of execution */ + order: 100, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: shift + }, + + /** + * The `offset` modifier can shift your popper on both its axis. + * + * It accepts the following units: + * - `px` or unitless, interpreted as pixels + * - `%` or `%r`, percentage relative to the length of the reference element + * - `%p`, percentage relative to the length of the popper element + * - `vw`, CSS viewport width unit + * - `vh`, CSS viewport height unit + * + * For length is intended the main axis relative to the placement of the popper.
+ * This means that if the placement is `top` or `bottom`, the length will be the + * `width`. In case of `left` or `right`, it will be the height. + * + * You can provide a single value (as `Number` or `String`), or a pair of values + * as `String` divided by a comma or one (or more) white spaces.
+ * The latter is a deprecated method because it leads to confusion and will be + * removed in v2.
+ * Additionally, it accepts additions and subtractions between different units. + * Note that multiplications and divisions aren't supported. + * + * Valid examples are: + * ``` + * 10 + * '10%' + * '10, 10' + * '10%, 10' + * '10 + 10%' + * '10 - 5vh + 3%' + * '-10px + 5vh, 5px - 6%' + * ``` + * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap + * > with their reference element, unfortunately, you will have to disable the `flip` modifier. + * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373) + * + * @memberof modifiers + * @inner + */ + offset: { + /** @prop {number} order=200 - Index used to define the order of execution */ + order: 200, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: offset, + /** @prop {Number|String} offset=0 + * The offset value as described in the modifier description + */ + offset: 0 + }, + + /** + * Modifier used to prevent the popper from being positioned outside the boundary. + * + * An scenario exists where the reference itself is not within the boundaries.
+ * We can say it has "escaped the boundaries" — or just "escaped".
+ * In this case we need to decide whether the popper should either: + * + * - detach from the reference and remain "trapped" in the boundaries, or + * - if it should ignore the boundary and "escape with its reference" + * + * When `escapeWithReference` is set to`true` and reference is completely + * outside its boundaries, the popper will overflow (or completely leave) + * the boundaries in order to remain attached to the edge of the reference. + * + * @memberof modifiers + * @inner + */ + preventOverflow: { + /** @prop {number} order=300 - Index used to define the order of execution */ + order: 300, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: preventOverflow, + /** + * @prop {Array} [priority=['left','right','top','bottom']] + * Popper will try to prevent overflow following these priorities by default, + * then, it could overflow on the left and on top of the `boundariesElement` + */ + priority: ['left', 'right', 'top', 'bottom'], + /** + * @prop {number} padding=5 + * Amount of pixel used to define a minimum distance between the boundaries + * and the popper this makes sure the popper has always a little padding + * between the edges of its container + */ + padding: 5, + /** + * @prop {String|HTMLElement} boundariesElement='scrollParent' + * Boundaries used by the modifier, can be `scrollParent`, `window`, + * `viewport` or any DOM element. + */ + boundariesElement: 'scrollParent' + }, + + /** + * Modifier used to make sure the reference and its popper stay near eachothers + * without leaving any gap between the two. Expecially useful when the arrow is + * enabled and you want to assure it to point to its reference element. + * It cares only about the first axis, you can still have poppers with margin + * between the popper and its reference element. + * @memberof modifiers + * @inner + */ + keepTogether: { + /** @prop {number} order=400 - Index used to define the order of execution */ + order: 400, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: keepTogether + }, + + /** + * This modifier is used to move the `arrowElement` of the popper to make + * sure it is positioned between the reference element and its popper element. + * It will read the outer size of the `arrowElement` node to detect how many + * pixels of conjuction are needed. + * + * It has no effect if no `arrowElement` is provided. + * @memberof modifiers + * @inner + */ + arrow: { + /** @prop {number} order=500 - Index used to define the order of execution */ + order: 500, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: arrow, + /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ + element: '[x-arrow]' + }, + + /** + * Modifier used to flip the popper's placement when it starts to overlap its + * reference element. + * + * Requires the `preventOverflow` modifier before it in order to work. + * + * **NOTE:** this modifier will interrupt the current update cycle and will + * restart it if it detects the need to flip the placement. + * @memberof modifiers + * @inner + */ + flip: { + /** @prop {number} order=600 - Index used to define the order of execution */ + order: 600, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: flip, + /** + * @prop {String|Array} behavior='flip' + * The behavior used to change the popper's placement. It can be one of + * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid + * placements (with optional variations). + */ + behavior: 'flip', + /** + * @prop {number} padding=5 + * The popper will flip if it hits the edges of the `boundariesElement` + */ + padding: 5, + /** + * @prop {String|HTMLElement} boundariesElement='viewport' + * The element which will define the boundaries of the popper position, + * the popper will never be placed outside of the defined boundaries + * (except if keepTogether is enabled) + */ + boundariesElement: 'viewport' + }, + + /** + * Modifier used to make the popper flow toward the inner of the reference element. + * By default, when this modifier is disabled, the popper will be placed outside + * the reference element. + * @memberof modifiers + * @inner + */ + inner: { + /** @prop {number} order=700 - Index used to define the order of execution */ + order: 700, + /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ + enabled: false, + /** @prop {ModifierFn} */ + fn: inner + }, + + /** + * Modifier used to hide the popper when its reference element is outside of the + * popper boundaries. It will set a `x-out-of-boundaries` attribute which can + * be used to hide with a CSS selector the popper when its reference is + * out of boundaries. + * + * Requires the `preventOverflow` modifier before it in order to work. + * @memberof modifiers + * @inner + */ + hide: { + /** @prop {number} order=800 - Index used to define the order of execution */ + order: 800, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: hide + }, + + /** + * Computes the style that will be applied to the popper element to gets + * properly positioned. + * + * Note that this modifier will not touch the DOM, it just prepares the styles + * so that `applyStyle` modifier can apply it. This separation is useful + * in case you need to replace `applyStyle` with a custom implementation. + * + * This modifier has `850` as `order` value to maintain backward compatibility + * with previous versions of Popper.js. Expect the modifiers ordering method + * to change in future major versions of the library. + * + * @memberof modifiers + * @inner + */ + computeStyle: { + /** @prop {number} order=850 - Index used to define the order of execution */ + order: 850, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: computeStyle, + /** + * @prop {Boolean} gpuAcceleration=true + * If true, it uses the CSS 3d transformation to position the popper. + * Otherwise, it will use the `top` and `left` properties. + */ + gpuAcceleration: true, + /** + * @prop {string} [x='bottom'] + * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. + * Change this if your popper should grow in a direction different from `bottom` + */ + x: 'bottom', + /** + * @prop {string} [x='left'] + * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. + * Change this if your popper should grow in a direction different from `right` + */ + y: 'right' + }, + + /** + * Applies the computed styles to the popper element. + * + * All the DOM manipulations are limited to this modifier. This is useful in case + * you want to integrate Popper.js inside a framework or view library and you + * want to delegate all the DOM manipulations to it. + * + * Note that if you disable this modifier, you must make sure the popper element + * has its position set to `absolute` before Popper.js can do its work! + * + * Just disable this modifier and define you own to achieve the desired effect. + * + * @memberof modifiers + * @inner + */ + applyStyle: { + /** @prop {number} order=900 - Index used to define the order of execution */ + order: 900, + /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ + enabled: true, + /** @prop {ModifierFn} */ + fn: applyStyle, + /** @prop {Function} */ + onLoad: applyStyleOnLoad, + /** + * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier + * @prop {Boolean} gpuAcceleration=true + * If true, it uses the CSS 3d transformation to position the popper. + * Otherwise, it will use the `top` and `left` properties. + */ + gpuAcceleration: undefined + } + }; + + /** + * The `dataObject` is an object containing all the informations used by Popper.js + * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks. + * @name dataObject + * @property {Object} data.instance The Popper.js instance + * @property {String} data.placement Placement applied to popper + * @property {String} data.originalPlacement Placement originally defined on init + * @property {Boolean} data.flipped True if popper has been flipped by flip modifier + * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper. + * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier + * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`) + * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`) + * @property {Object} data.boundaries Offsets of the popper boundaries + * @property {Object} data.offsets The measurements of popper, reference and arrow elements. + * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values + * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values + * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 + */ + + /** + * Default options provided to Popper.js constructor.
+ * These can be overriden using the `options` argument of Popper.js.
+ * To override an option, simply pass as 3rd argument an object with the same + * structure of this object, example: + * ``` + * new Popper(ref, pop, { + * modifiers: { + * preventOverflow: { enabled: false } + * } + * }) + * ``` + * @type {Object} + * @static + * @memberof Popper + */ + var Defaults = { + /** + * Popper's placement + * @prop {Popper.placements} placement='bottom' + */ + placement: 'bottom', + + /** + * Set this to true if you want popper to position it self in 'fixed' mode + * @prop {Boolean} positionFixed=false + */ + positionFixed: false, + + /** + * Whether events (resize, scroll) are initially enabled + * @prop {Boolean} eventsEnabled=true + */ + eventsEnabled: true, + + /** + * Set to true if you want to automatically remove the popper when + * you call the `destroy` method. + * @prop {Boolean} removeOnDestroy=false + */ + removeOnDestroy: false, + + /** + * Callback called when the popper is created.
+ * By default, is set to no-op.
+ * Access Popper.js instance with `data.instance`. + * @prop {onCreate} + */ + onCreate: function onCreate() {}, + + /** + * Callback called when the popper is updated, this callback is not called + * on the initialization/creation of the popper, but only on subsequent + * updates.
+ * By default, is set to no-op.
+ * Access Popper.js instance with `data.instance`. + * @prop {onUpdate} + */ + onUpdate: function onUpdate() {}, + + /** + * List of modifiers used to modify the offsets before they are applied to the popper. + * They provide most of the functionalities of Popper.js + * @prop {modifiers} + */ + modifiers: modifiers + }; + + /** + * @callback onCreate + * @param {dataObject} data + */ + + /** + * @callback onUpdate + * @param {dataObject} data + */ + + // Utils + // Methods + var Popper = function () { + /** + * Create a new Popper.js instance + * @class Popper + * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper + * @param {HTMLElement} popper - The HTML element used as popper. + * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) + * @return {Object} instance - The generated Popper.js instance + */ + function Popper(reference, popper) { + var _this = this; + + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + classCallCheck(this, Popper); + + this.scheduleUpdate = function () { + return requestAnimationFrame(_this.update); + }; + + // make update() debounced, so that it only runs at most once-per-tick + this.update = debounce(this.update.bind(this)); + + // with {} we create a new object with the options inside it + this.options = _extends({}, Popper.Defaults, options); + + // init state + this.state = { + isDestroyed: false, + isCreated: false, + scrollParents: [] + }; + + // get reference and popper elements (allow jQuery wrappers) + this.reference = reference && reference.jquery ? reference[0] : reference; + this.popper = popper && popper.jquery ? popper[0] : popper; + + // Deep merge modifiers options + this.options.modifiers = {}; + Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { + _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); + }); + + // Refactoring modifiers' list (Object => Array) + this.modifiers = Object.keys(this.options.modifiers).map(function (name) { + return _extends({ + name: name + }, _this.options.modifiers[name]); + }) + // sort the modifiers by order + .sort(function (a, b) { + return a.order - b.order; + }); + + // modifiers have the ability to execute arbitrary code when Popper.js get inited + // such code is executed in the same order of its modifier + // they could add new properties to their options configuration + // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! + this.modifiers.forEach(function (modifierOptions) { + if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { + modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); + } + }); + + // fire the first update to position the popper in the right place + this.update(); + + var eventsEnabled = this.options.eventsEnabled; + if (eventsEnabled) { + // setup event listeners, they will take care of update the position in specific situations + this.enableEventListeners(); + } + + this.state.eventsEnabled = eventsEnabled; + } + + // We can't use class properties because they don't get listed in the + // class prototype and break stuff like Sinon stubs + + + createClass(Popper, [{ + key: 'update', + value: function update$$1() { + return update.call(this); + } + }, { + key: 'destroy', + value: function destroy$$1() { + return destroy.call(this); + } + }, { + key: 'enableEventListeners', + value: function enableEventListeners$$1() { + return enableEventListeners.call(this); + } + }, { + key: 'disableEventListeners', + value: function disableEventListeners$$1() { + return disableEventListeners.call(this); + } + + /** + * Schedule an update, it will run on the next UI update available + * @method scheduleUpdate + * @memberof Popper + */ + + + /** + * Collection of utilities useful when writing custom modifiers. + * Starting from version 1.7, this method is available only if you + * include `popper-utils.js` before `popper.js`. + * + * **DEPRECATION**: This way to access PopperUtils is deprecated + * and will be removed in v2! Use the PopperUtils module directly instead. + * Due to the high instability of the methods contained in Utils, we can't + * guarantee them to follow semver. Use them at your own risk! + * @static + * @private + * @type {Object} + * @deprecated since version 1.8 + * @member Utils + * @memberof Popper + */ + + }]); + return Popper; + }(); + + /** + * The `referenceObject` is an object that provides an interface compatible with Popper.js + * and lets you use it as replacement of a real DOM node.
+ * You can use this method to position a popper relatively to a set of coordinates + * in case you don't have a DOM node to use as reference. + * + * ``` + * new Popper(referenceObject, popperNode); + * ``` + * + * NB: This feature isn't supported in Internet Explorer 10 + * @name referenceObject + * @property {Function} data.getBoundingClientRect + * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. + * @property {number} data.clientWidth + * An ES6 getter that will return the width of the virtual reference element. + * @property {number} data.clientHeight + * An ES6 getter that will return the height of the virtual reference element. + */ + + + Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; + Popper.placements = placements; + Popper.Defaults = Defaults; + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): dropdown.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Dropdown = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'dropdown'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.dropdown'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + + var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key + + var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key + + var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key + + var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key + + var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) + + var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + CLICK: "click" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, + KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, + KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + DISABLED: 'disabled', + SHOW: 'show', + DROPUP: 'dropup', + DROPRIGHT: 'dropright', + DROPLEFT: 'dropleft', + MENURIGHT: 'dropdown-menu-right', + MENULEFT: 'dropdown-menu-left', + POSITION_STATIC: 'position-static' + }; + var Selector = { + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + MENU: '.dropdown-menu', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' + }; + var AttachmentMap = { + TOP: 'top-start', + TOPEND: 'top-end', + BOTTOM: 'bottom-start', + BOTTOMEND: 'bottom-end', + RIGHT: 'right-start', + RIGHTEND: 'right-end', + LEFT: 'left-start', + LEFTEND: 'left-end' + }; + var Default = { + offset: 0, + flip: true, + boundary: 'scrollParent', + reference: 'toggle', + display: 'dynamic' + }; + var DefaultType = { + offset: '(number|string|function)', + flip: 'boolean', + boundary: '(string|element)', + reference: '(string|element)', + display: 'string' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Dropdown = + /*#__PURE__*/ + function () { + function Dropdown(element, config) { + this._element = element; + this._popper = null; + this._config = this._getConfig(config); + this._menu = this._getMenuElement(); + this._inNavbar = this._detectNavbar(); + + this._addEventListeners(); + } // Getters + + + var _proto = Dropdown.prototype; + + // Public + _proto.toggle = function toggle() { + if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this._element); + + var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); + + Dropdown._clearMenus(); + + if (isActive) { + return; + } + + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = $$$1.Event(Event.SHOW, relatedTarget); + $$$1(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return; + } // Disable totally Popper.js for Dropdown in Navbar + + + if (!this._inNavbar) { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof Popper === 'undefined') { + throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); + } + + var referenceElement = this._element; + + if (this._config.reference === 'parent') { + referenceElement = parent; + } else if (Util.isElement(this._config.reference)) { + referenceElement = this._config.reference; // Check if it's jQuery element + + if (typeof this._config.reference.jquery !== 'undefined') { + referenceElement = this._config.reference[0]; + } + } // If boundary is not `scrollParent`, then set position to `static` + // to allow the menu to "escape" the scroll parent's boundaries + // https://github.com/twbs/bootstrap/issues/24251 + + + if (this._config.boundary !== 'scrollParent') { + $$$1(parent).addClass(ClassName.POSITION_STATIC); + } + + this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); + } // If this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + + + if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { + $$$1(document.body).children().on('mouseover', null, $$$1.noop); + } + + this._element.focus(); + + this._element.setAttribute('aria-expanded', true); + + $$$1(this._menu).toggleClass(ClassName.SHOW); + $$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); + }; + + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + $$$1(this._element).off(EVENT_KEY); + this._element = null; + this._menu = null; + + if (this._popper !== null) { + this._popper.destroy(); + + this._popper = null; + } + }; + + _proto.update = function update() { + this._inNavbar = this._detectNavbar(); + + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } + }; // Private + + + _proto._addEventListeners = function _addEventListeners() { + var _this = this; + + $$$1(this._element).on(Event.CLICK, function (event) { + event.preventDefault(); + event.stopPropagation(); + + _this.toggle(); + }); + }; + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config); + Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + return config; + }; + + _proto._getMenuElement = function _getMenuElement() { + if (!this._menu) { + var parent = Dropdown._getParentFromElement(this._element); + + this._menu = $$$1(parent).find(Selector.MENU)[0]; + } + + return this._menu; + }; + + _proto._getPlacement = function _getPlacement() { + var $parentDropdown = $$$1(this._element).parent(); + var placement = AttachmentMap.BOTTOM; // Handle dropup + + if ($parentDropdown.hasClass(ClassName.DROPUP)) { + placement = AttachmentMap.TOP; + + if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.TOPEND; + } + } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { + placement = AttachmentMap.RIGHT; + } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { + placement = AttachmentMap.LEFT; + } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { + placement = AttachmentMap.BOTTOMEND; + } + + return placement; + }; + + _proto._detectNavbar = function _detectNavbar() { + return $$$1(this._element).closest('.navbar').length > 0; + }; + + _proto._getPopperConfig = function _getPopperConfig() { + var _this2 = this; + + var offsetConf = {}; + + if (typeof this._config.offset === 'function') { + offsetConf.fn = function (data) { + data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); + return data; + }; + } else { + offsetConf.offset = this._config.offset; + } + + var popperConfig = { + placement: this._getPlacement(), + modifiers: { + offset: offsetConf, + flip: { + enabled: this._config.flip + }, + preventOverflow: { + boundariesElement: this._config.boundary + } + } // Disable Popper.js if we have a static display + + }; + + if (this._config.display === 'static') { + popperConfig.modifiers.applyStyle = { + enabled: false + }; + } + + return popperConfig; + }; // Static + + + Dropdown._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); + + var _config = typeof config === 'object' ? config : null; + + if (!data) { + data = new Dropdown(this, _config); + $$$1(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + Dropdown._clearMenus = function _clearMenus(event) { + if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { + return; + } + + var toggles = $$$1.makeArray($$$1(Selector.DATA_TOGGLE)); + + for (var i = 0; i < toggles.length; i++) { + var parent = Dropdown._getParentFromElement(toggles[i]); + + var context = $$$1(toggles[i]).data(DATA_KEY); + var relatedTarget = { + relatedTarget: toggles[i] + }; + + if (!context) { + continue; + } + + var dropdownMenu = context._menu; + + if (!$$$1(parent).hasClass(ClassName.SHOW)) { + continue; + } + + if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { + continue; + } + + var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); + $$$1(parent).trigger(hideEvent); + + if (hideEvent.isDefaultPrevented()) { + continue; + } // If this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support + + + if ('ontouchstart' in document.documentElement) { + $$$1(document.body).children().off('mouseover', null, $$$1.noop); + } + + toggles[i].setAttribute('aria-expanded', 'false'); + $$$1(dropdownMenu).removeClass(ClassName.SHOW); + $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); + } + }; + + Dropdown._getParentFromElement = function _getParentFromElement(element) { + var parent; + var selector = Util.getSelectorFromElement(element); + + if (selector) { + parent = $$$1(selector)[0]; + } + + return parent || element.parentNode; + }; // eslint-disable-next-line complexity + + + Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { + // If not input/textarea: + // - And not a key in REGEXP_KEYDOWN => not a dropdown command + // If input/textarea: + // - If space key => not a dropdown command + // - If key is other than escape + // - If key is not up or down => not a dropdown command + // - If trigger inside the menu => not a dropdown command + if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this); + + var isActive = $$$1(parent).hasClass(ClassName.SHOW); + + if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + if (event.which === ESCAPE_KEYCODE) { + var toggle = $$$1(parent).find(Selector.DATA_TOGGLE)[0]; + $$$1(toggle).trigger('focus'); + } + + $$$1(this).trigger('click'); + return; + } + + var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get(); + + if (items.length === 0) { + return; + } + + var index = items.indexOf(event.target); + + if (event.which === ARROW_UP_KEYCODE && index > 0) { + // Up + index--; + } + + if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { + // Down + index++; + } + + if (index < 0) { + index = 0; + } + + items[index].focus(); + }; + + _createClass(Dropdown, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }, { + key: "Default", + get: function get() { + return Default; + } + }, { + key: "DefaultType", + get: function get() { + return DefaultType; + } + }]); + + return Dropdown; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + event.stopPropagation(); + + Dropdown._jQueryInterface.call($$$1(this), 'toggle'); + }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + e.stopPropagation(); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $$$1.fn[NAME] = Dropdown._jQueryInterface; + $$$1.fn[NAME].Constructor = Dropdown; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Dropdown._jQueryInterface; + }; + + return Dropdown; + }($, Popper); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): modal.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Modal = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'modal'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.modal'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key + + var Default = { + backdrop: true, + keyboard: true, + focus: true, + show: true + }; + var DefaultType = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + show: 'boolean' + }; + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + FOCUSIN: "focusin" + EVENT_KEY, + RESIZE: "resize" + EVENT_KEY, + CLICK_DISMISS: "click.dismiss" + EVENT_KEY, + KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, + MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, + MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, + CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + SCROLLBAR_MEASURER: 'modal-scrollbar-measure', + BACKDROP: 'modal-backdrop', + OPEN: 'modal-open', + FADE: 'fade', + SHOW: 'show' + }; + var Selector = { + DIALOG: '.modal-dialog', + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', + STICKY_CONTENT: '.sticky-top', + NAVBAR_TOGGLER: '.navbar-toggler' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Modal = + /*#__PURE__*/ + function () { + function Modal(element, config) { + this._config = this._getConfig(config); + this._element = element; + this._dialog = $$$1(element).find(Selector.DIALOG)[0]; + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._scrollbarWidth = 0; + } // Getters + + + var _proto = Modal.prototype; + + // Public + _proto.toggle = function toggle(relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); + }; + + _proto.show = function show(relatedTarget) { + var _this = this; + + if (this._isTransitioning || this._isShown) { + return; + } + + if ($$$1(this._element).hasClass(ClassName.FADE)) { + this._isTransitioning = true; + } + + var showEvent = $$$1.Event(Event.SHOW, { + relatedTarget: relatedTarget + }); + $$$1(this._element).trigger(showEvent); + + if (this._isShown || showEvent.isDefaultPrevented()) { + return; + } + + this._isShown = true; + + this._checkScrollbar(); + + this._setScrollbar(); + + this._adjustDialog(); + + $$$1(document.body).addClass(ClassName.OPEN); + + this._setEscapeEvent(); + + this._setResizeEvent(); + + $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { + return _this.hide(event); + }); + $$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { + $$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { + if ($$$1(event.target).is(_this._element)) { + _this._ignoreBackdropClick = true; + } + }); + }); + + this._showBackdrop(function () { + return _this._showElement(relatedTarget); + }); + }; + + _proto.hide = function hide(event) { + var _this2 = this; + + if (event) { + event.preventDefault(); + } + + if (this._isTransitioning || !this._isShown) { + return; + } + + var hideEvent = $$$1.Event(Event.HIDE); + $$$1(this._element).trigger(hideEvent); + + if (!this._isShown || hideEvent.isDefaultPrevented()) { + return; + } + + this._isShown = false; + var transition = $$$1(this._element).hasClass(ClassName.FADE); + + if (transition) { + this._isTransitioning = true; + } + + this._setEscapeEvent(); + + this._setResizeEvent(); + + $$$1(document).off(Event.FOCUSIN); + $$$1(this._element).removeClass(ClassName.SHOW); + $$$1(this._element).off(Event.CLICK_DISMISS); + $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); + + if (transition) { + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._element).one(Util.TRANSITION_END, function (event) { + return _this2._hideModal(event); + }).emulateTransitionEnd(transitionDuration); + } else { + this._hideModal(); + } + }; + + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + $$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); + this._config = null; + this._element = null; + this._dialog = null; + this._backdrop = null; + this._isShown = null; + this._isBodyOverflowing = null; + this._ignoreBackdropClick = null; + this._scrollbarWidth = null; + }; + + _proto.handleUpdate = function handleUpdate() { + this._adjustDialog(); + }; // Private + + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + }; + + _proto._showElement = function _showElement(relatedTarget) { + var _this3 = this; + + var transition = $$$1(this._element).hasClass(ClassName.FADE); + + if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { + // Don't move modal's DOM position + document.body.appendChild(this._element); + } + + this._element.style.display = 'block'; + + this._element.removeAttribute('aria-hidden'); + + this._element.scrollTop = 0; + + if (transition) { + Util.reflow(this._element); + } + + $$$1(this._element).addClass(ClassName.SHOW); + + if (this._config.focus) { + this._enforceFocus(); + } + + var shownEvent = $$$1.Event(Event.SHOWN, { + relatedTarget: relatedTarget + }); + + var transitionComplete = function transitionComplete() { + if (_this3._config.focus) { + _this3._element.focus(); + } + + _this3._isTransitioning = false; + $$$1(_this3._element).trigger(shownEvent); + }; + + if (transition) { + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); + } else { + transitionComplete(); + } + }; + + _proto._enforceFocus = function _enforceFocus() { + var _this4 = this; + + $$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop + .on(Event.FOCUSIN, function (event) { + if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { + _this4._element.focus(); + } + }); + }; + + _proto._setEscapeEvent = function _setEscapeEvent() { + var _this5 = this; + + if (this._isShown && this._config.keyboard) { + $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { + if (event.which === ESCAPE_KEYCODE) { + event.preventDefault(); + + _this5.hide(); + } + }); + } else if (!this._isShown) { + $$$1(this._element).off(Event.KEYDOWN_DISMISS); + } + }; + + _proto._setResizeEvent = function _setResizeEvent() { + var _this6 = this; + + if (this._isShown) { + $$$1(window).on(Event.RESIZE, function (event) { + return _this6.handleUpdate(event); + }); + } else { + $$$1(window).off(Event.RESIZE); + } + }; + + _proto._hideModal = function _hideModal() { + var _this7 = this; + + this._element.style.display = 'none'; + + this._element.setAttribute('aria-hidden', true); + + this._isTransitioning = false; + + this._showBackdrop(function () { + $$$1(document.body).removeClass(ClassName.OPEN); + + _this7._resetAdjustments(); + + _this7._resetScrollbar(); + + $$$1(_this7._element).trigger(Event.HIDDEN); + }); + }; + + _proto._removeBackdrop = function _removeBackdrop() { + if (this._backdrop) { + $$$1(this._backdrop).remove(); + this._backdrop = null; + } + }; + + _proto._showBackdrop = function _showBackdrop(callback) { + var _this8 = this; + + var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; + + if (this._isShown && this._config.backdrop) { + this._backdrop = document.createElement('div'); + this._backdrop.className = ClassName.BACKDROP; + + if (animate) { + $$$1(this._backdrop).addClass(animate); + } + + $$$1(this._backdrop).appendTo(document.body); + $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { + if (_this8._ignoreBackdropClick) { + _this8._ignoreBackdropClick = false; + return; + } + + if (event.target !== event.currentTarget) { + return; + } + + if (_this8._config.backdrop === 'static') { + _this8._element.focus(); + } else { + _this8.hide(); + } + }); + + if (animate) { + Util.reflow(this._backdrop); + } + + $$$1(this._backdrop).addClass(ClassName.SHOW); + + if (!callback) { + return; + } + + if (!animate) { + callback(); + return; + } + + var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); + } else if (!this._isShown && this._backdrop) { + $$$1(this._backdrop).removeClass(ClassName.SHOW); + + var callbackRemove = function callbackRemove() { + _this8._removeBackdrop(); + + if (callback) { + callback(); + } + }; + + if ($$$1(this._element).hasClass(ClassName.FADE)) { + var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + + $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); + } else { + callbackRemove(); + } + } else if (callback) { + callback(); + } + }; // ---------------------------------------------------------------------- + // the following methods are used to handle overflowing modals + // todo (fat): these should probably be refactored out of modal.js + // ---------------------------------------------------------------------- + + + _proto._adjustDialog = function _adjustDialog() { + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!this._isBodyOverflowing && isModalOverflowing) { + this._element.style.paddingLeft = this._scrollbarWidth + "px"; + } + + if (this._isBodyOverflowing && !isModalOverflowing) { + this._element.style.paddingRight = this._scrollbarWidth + "px"; + } + }; + + _proto._resetAdjustments = function _resetAdjustments() { + this._element.style.paddingLeft = ''; + this._element.style.paddingRight = ''; + }; + + _proto._checkScrollbar = function _checkScrollbar() { + var rect = document.body.getBoundingClientRect(); + this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; + this._scrollbarWidth = this._getScrollbarWidth(); + }; + + _proto._setScrollbar = function _setScrollbar() { + var _this9 = this; + + if (this._isBodyOverflowing) { + // Note: DOMNode.style.paddingRight returns the actual value or '' if not set + // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set + // Adjust fixed content padding + $$$1(Selector.FIXED_CONTENT).each(function (index, element) { + var actualPadding = $$$1(element)[0].style.paddingRight; + var calculatedPadding = $$$1(element).css('padding-right'); + $$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); + }); // Adjust sticky content margin + + $$$1(Selector.STICKY_CONTENT).each(function (index, element) { + var actualMargin = $$$1(element)[0].style.marginRight; + var calculatedMargin = $$$1(element).css('margin-right'); + $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); + }); // Adjust navbar-toggler margin + + $$$1(Selector.NAVBAR_TOGGLER).each(function (index, element) { + var actualMargin = $$$1(element)[0].style.marginRight; + var calculatedMargin = $$$1(element).css('margin-right'); + $$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + "px"); + }); // Adjust body padding + + var actualPadding = document.body.style.paddingRight; + var calculatedPadding = $$$1(document.body).css('padding-right'); + $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); + } + }; + + _proto._resetScrollbar = function _resetScrollbar() { + // Restore fixed content padding + $$$1(Selector.FIXED_CONTENT).each(function (index, element) { + var padding = $$$1(element).data('padding-right'); + + if (typeof padding !== 'undefined') { + $$$1(element).css('padding-right', padding).removeData('padding-right'); + } + }); // Restore sticky content and navbar-toggler margin + + $$$1(Selector.STICKY_CONTENT + ", " + Selector.NAVBAR_TOGGLER).each(function (index, element) { + var margin = $$$1(element).data('margin-right'); + + if (typeof margin !== 'undefined') { + $$$1(element).css('margin-right', margin).removeData('margin-right'); + } + }); // Restore body padding + + var padding = $$$1(document.body).data('padding-right'); + + if (typeof padding !== 'undefined') { + $$$1(document.body).css('padding-right', padding).removeData('padding-right'); + } + }; + + _proto._getScrollbarWidth = function _getScrollbarWidth() { + // thx d.walsh + var scrollDiv = document.createElement('div'); + scrollDiv.className = ClassName.SCROLLBAR_MEASURER; + document.body.appendChild(scrollDiv); + var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + }; // Static + + + Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); + + var _config = _objectSpread({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); + + if (!data) { + data = new Modal(this, _config); + $$$1(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + + data[config](relatedTarget); + } else if (_config.show) { + data.show(relatedTarget); + } + }); + }; + + _createClass(Modal, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }, { + key: "Default", + get: function get() { + return Default; + } + }]); + + return Modal; + }(); + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + + $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + var _this10 = this; + + var target; + var selector = Util.getSelectorFromElement(this); + + if (selector) { + target = $$$1(selector)[0]; + } + + var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data()); + + if (this.tagName === 'A' || this.tagName === 'AREA') { + event.preventDefault(); + } + + var $target = $$$1(target).one(Event.SHOW, function (showEvent) { + if (showEvent.isDefaultPrevented()) { + // Only register focus restorer if modal will actually get shown + return; + } + + $target.one(Event.HIDDEN, function () { + if ($$$1(_this10).is(':visible')) { + _this10.focus(); + } + }); + }); + + Modal._jQueryInterface.call($$$1(target), config, this); + }); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $$$1.fn[NAME] = Modal._jQueryInterface; + $$$1.fn[NAME].Constructor = Modal; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Modal._jQueryInterface; + }; + + return Modal; + }($); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): tooltip.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Tooltip = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'tooltip'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.tooltip'; + var EVENT_KEY = "." + DATA_KEY; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var CLASS_PREFIX = 'bs-tooltip'; + var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); + var DefaultType = { + animation: 'boolean', + template: 'string', + title: '(string|element|function)', + trigger: 'string', + delay: '(number|object)', + html: 'boolean', + selector: '(string|boolean)', + placement: '(string|function)', + offset: '(number|string)', + container: '(string|element|boolean)', + fallbackPlacement: '(string|array)', + boundary: '(string|element)' + }; + var AttachmentMap = { + AUTO: 'auto', + TOP: 'top', + RIGHT: 'right', + BOTTOM: 'bottom', + LEFT: 'left' + }; + var Default = { + animation: true, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + selector: false, + placement: 'top', + offset: 0, + container: false, + fallbackPlacement: 'flip', + boundary: 'scrollParent' + }; + var HoverState = { + SHOW: 'show', + OUT: 'out' + }; + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + INSERTED: "inserted" + EVENT_KEY, + CLICK: "click" + EVENT_KEY, + FOCUSIN: "focusin" + EVENT_KEY, + FOCUSOUT: "focusout" + EVENT_KEY, + MOUSEENTER: "mouseenter" + EVENT_KEY, + MOUSELEAVE: "mouseleave" + EVENT_KEY + }; + var ClassName = { + FADE: 'fade', + SHOW: 'show' + }; + var Selector = { + TOOLTIP: '.tooltip', + TOOLTIP_INNER: '.tooltip-inner', + ARROW: '.arrow' + }; + var Trigger = { + HOVER: 'hover', + FOCUS: 'focus', + CLICK: 'click', + MANUAL: 'manual' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Tooltip = + /*#__PURE__*/ + function () { + function Tooltip(element, config) { + /** + * Check for Popper dependency + * Popper - https://popper.js.org + */ + if (typeof Popper === 'undefined') { + throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); + } // private + + + this._isEnabled = true; + this._timeout = 0; + this._hoverState = ''; + this._activeTrigger = {}; + this._popper = null; // Protected + + this.element = element; + this.config = this._getConfig(config); + this.tip = null; + + this._setListeners(); + } // Getters + + + var _proto = Tooltip.prototype; + + // Public + _proto.enable = function enable() { + this._isEnabled = true; + }; + + _proto.disable = function disable() { + this._isEnabled = false; + }; + + _proto.toggleEnabled = function toggleEnabled() { + this._isEnabled = !this._isEnabled; + }; + + _proto.toggle = function toggle(event) { + if (!this._isEnabled) { + return; + } + + if (event) { + var dataKey = this.constructor.DATA_KEY; + var context = $$$1(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $$$1(event.currentTarget).data(dataKey, context); + } + + context._activeTrigger.click = !context._activeTrigger.click; + + if (context._isWithActiveTrigger()) { + context._enter(null, context); + } else { + context._leave(null, context); + } + } else { + if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { + this._leave(null, this); + + return; + } + + this._enter(null, this); + } + }; + + _proto.dispose = function dispose() { + clearTimeout(this._timeout); + $$$1.removeData(this.element, this.constructor.DATA_KEY); + $$$1(this.element).off(this.constructor.EVENT_KEY); + $$$1(this.element).closest('.modal').off('hide.bs.modal'); + + if (this.tip) { + $$$1(this.tip).remove(); + } + + this._isEnabled = null; + this._timeout = null; + this._hoverState = null; + this._activeTrigger = null; + + if (this._popper !== null) { + this._popper.destroy(); + } + + this._popper = null; + this.element = null; + this.config = null; + this.tip = null; + }; + + _proto.show = function show() { + var _this = this; + + if ($$$1(this.element).css('display') === 'none') { + throw new Error('Please use show on visible elements'); + } + + var showEvent = $$$1.Event(this.constructor.Event.SHOW); + + if (this.isWithContent() && this._isEnabled) { + $$$1(this.element).trigger(showEvent); + var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element); + + if (showEvent.isDefaultPrevented() || !isInTheDom) { + return; + } + + var tip = this.getTipElement(); + var tipId = Util.getUID(this.constructor.NAME); + tip.setAttribute('id', tipId); + this.element.setAttribute('aria-describedby', tipId); + this.setContent(); + + if (this.config.animation) { + $$$1(tip).addClass(ClassName.FADE); + } + + var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; + + var attachment = this._getAttachment(placement); + + this.addAttachmentClass(attachment); + var container = this.config.container === false ? document.body : $$$1(this.config.container); + $$$1(tip).data(this.constructor.DATA_KEY, this); + + if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) { + $$$1(tip).appendTo(container); + } + + $$$1(this.element).trigger(this.constructor.Event.INSERTED); + this._popper = new Popper(this.element, tip, { + placement: attachment, + modifiers: { + offset: { + offset: this.config.offset + }, + flip: { + behavior: this.config.fallbackPlacement + }, + arrow: { + element: Selector.ARROW + }, + preventOverflow: { + boundariesElement: this.config.boundary + } + }, + onCreate: function onCreate(data) { + if (data.originalPlacement !== data.placement) { + _this._handlePopperPlacementChange(data); + } + }, + onUpdate: function onUpdate(data) { + _this._handlePopperPlacementChange(data); + } + }); + $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra + // empty mouseover listeners to the body's immediate children; + // only needed because of broken event delegation on iOS + // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html + + if ('ontouchstart' in document.documentElement) { + $$$1(document.body).children().on('mouseover', null, $$$1.noop); + } + + var complete = function complete() { + if (_this.config.animation) { + _this._fixTransition(); + } + + var prevHoverState = _this._hoverState; + _this._hoverState = null; + $$$1(_this.element).trigger(_this.constructor.Event.SHOWN); + + if (prevHoverState === HoverState.OUT) { + _this._leave(null, _this); + } + }; + + if ($$$1(this.tip).hasClass(ClassName.FADE)) { + var transitionDuration = Util.getTransitionDurationFromElement(this.tip); + $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + } else { + complete(); + } + } + }; + + _proto.hide = function hide(callback) { + var _this2 = this; + + var tip = this.getTipElement(); + var hideEvent = $$$1.Event(this.constructor.Event.HIDE); + + var complete = function complete() { + if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { + tip.parentNode.removeChild(tip); + } + + _this2._cleanTipClass(); + + _this2.element.removeAttribute('aria-describedby'); + + $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); + + if (_this2._popper !== null) { + _this2._popper.destroy(); + } + + if (callback) { + callback(); + } + }; + + $$$1(this.element).trigger(hideEvent); + + if (hideEvent.isDefaultPrevented()) { + return; + } + + $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support + + if ('ontouchstart' in document.documentElement) { + $$$1(document.body).children().off('mouseover', null, $$$1.noop); + } + + this._activeTrigger[Trigger.CLICK] = false; + this._activeTrigger[Trigger.FOCUS] = false; + this._activeTrigger[Trigger.HOVER] = false; + + if ($$$1(this.tip).hasClass(ClassName.FADE)) { + var transitionDuration = Util.getTransitionDurationFromElement(tip); + $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); + } else { + complete(); + } + + this._hoverState = ''; + }; + + _proto.update = function update() { + if (this._popper !== null) { + this._popper.scheduleUpdate(); + } + }; // Protected + + + _proto.isWithContent = function isWithContent() { + return Boolean(this.getTitle()); + }; + + _proto.addAttachmentClass = function addAttachmentClass(attachment) { + $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); + }; + + _proto.getTipElement = function getTipElement() { + this.tip = this.tip || $$$1(this.config.template)[0]; + return this.tip; + }; + + _proto.setContent = function setContent() { + var $tip = $$$1(this.getTipElement()); + this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle()); + $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); + }; + + _proto.setElementContent = function setElementContent($element, content) { + var html = this.config.html; + + if (typeof content === 'object' && (content.nodeType || content.jquery)) { + // Content is a DOM node or a jQuery + if (html) { + if (!$$$1(content).parent().is($element)) { + $element.empty().append(content); + } + } else { + $element.text($$$1(content).text()); + } + } else { + $element[html ? 'html' : 'text'](content); + } + }; + + _proto.getTitle = function getTitle() { + var title = this.element.getAttribute('data-original-title'); + + if (!title) { + title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; + } + + return title; + }; // Private + + + _proto._getAttachment = function _getAttachment(placement) { + return AttachmentMap[placement.toUpperCase()]; + }; + + _proto._setListeners = function _setListeners() { + var _this3 = this; + + var triggers = this.config.trigger.split(' '); + triggers.forEach(function (trigger) { + if (trigger === 'click') { + $$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { + return _this3.toggle(event); + }); + } else if (trigger !== Trigger.MANUAL) { + var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; + var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; + $$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) { + return _this3._enter(event); + }).on(eventOut, _this3.config.selector, function (event) { + return _this3._leave(event); + }); + } + + $$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () { + return _this3.hide(); + }); + }); + + if (this.config.selector) { + this.config = _objectSpread({}, this.config, { + trigger: 'manual', + selector: '' + }); + } else { + this._fixTitle(); + } + }; + + _proto._fixTitle = function _fixTitle() { + var titleType = typeof this.element.getAttribute('data-original-title'); + + if (this.element.getAttribute('title') || titleType !== 'string') { + this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); + this.element.setAttribute('title', ''); + } + }; + + _proto._enter = function _enter(event, context) { + var dataKey = this.constructor.DATA_KEY; + context = context || $$$1(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $$$1(event.currentTarget).data(dataKey, context); + } + + if (event) { + context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; + } + + if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { + context._hoverState = HoverState.SHOW; + return; + } + + clearTimeout(context._timeout); + context._hoverState = HoverState.SHOW; + + if (!context.config.delay || !context.config.delay.show) { + context.show(); + return; + } + + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.SHOW) { + context.show(); + } + }, context.config.delay.show); + }; + + _proto._leave = function _leave(event, context) { + var dataKey = this.constructor.DATA_KEY; + context = context || $$$1(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $$$1(event.currentTarget).data(dataKey, context); + } + + if (event) { + context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; + } + + if (context._isWithActiveTrigger()) { + return; + } + + clearTimeout(context._timeout); + context._hoverState = HoverState.OUT; + + if (!context.config.delay || !context.config.delay.hide) { + context.hide(); + return; + } + + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.OUT) { + context.hide(); + } + }, context.config.delay.hide); + }; + + _proto._isWithActiveTrigger = function _isWithActiveTrigger() { + for (var trigger in this._activeTrigger) { + if (this._activeTrigger[trigger]) { + return true; + } + } + + return false; + }; + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), config); + + if (typeof config.delay === 'number') { + config.delay = { + show: config.delay, + hide: config.delay + }; + } + + if (typeof config.title === 'number') { + config.title = config.title.toString(); + } + + if (typeof config.content === 'number') { + config.content = config.content.toString(); + } + + Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + return config; + }; + + _proto._getDelegateConfig = function _getDelegateConfig() { + var config = {}; + + if (this.config) { + for (var key in this.config) { + if (this.constructor.Default[key] !== this.config[key]) { + config[key] = this.config[key]; + } + } + } + + return config; + }; + + _proto._cleanTipClass = function _cleanTipClass() { + var $tip = $$$1(this.getTipElement()); + var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); + + if (tabClass !== null && tabClass.length > 0) { + $tip.removeClass(tabClass.join('')); + } + }; + + _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) { + this._cleanTipClass(); + + this.addAttachmentClass(this._getAttachment(data.placement)); + }; + + _proto._fixTransition = function _fixTransition() { + var tip = this.getTipElement(); + var initConfigAnimation = this.config.animation; + + if (tip.getAttribute('x-placement') !== null) { + return; + } + + $$$1(tip).removeClass(ClassName.FADE); + this.config.animation = false; + this.hide(); + this.show(); + this.config.animation = initConfigAnimation; + }; // Static + + + Tooltip._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); + + var _config = typeof config === 'object' && config; + + if (!data && /dispose|hide/.test(config)) { + return; + } + + if (!data) { + data = new Tooltip(this, _config); + $$$1(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + _createClass(Tooltip, null, [{ + key: "VERSION", + get: function get() { + return VERSION; + } + }, { + key: "Default", + get: function get() { + return Default; + } + }, { + key: "NAME", + get: function get() { + return NAME; + } + }, { + key: "DATA_KEY", + get: function get() { + return DATA_KEY; + } + }, { + key: "Event", + get: function get() { + return Event; + } + }, { + key: "EVENT_KEY", + get: function get() { + return EVENT_KEY; + } + }, { + key: "DefaultType", + get: function get() { + return DefaultType; + } + }]); + + return Tooltip; + }(); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + + $$$1.fn[NAME] = Tooltip._jQueryInterface; + $$$1.fn[NAME].Constructor = Tooltip; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Tooltip._jQueryInterface; + }; + + return Tooltip; + }($, Popper); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): popover.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Popover = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'popover'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.popover'; + var EVENT_KEY = "." + DATA_KEY; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var CLASS_PREFIX = 'bs-popover'; + var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); + + var Default = _objectSpread({}, Tooltip.Default, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }); + + var DefaultType = _objectSpread({}, Tooltip.DefaultType, { + content: '(string|element|function)' + }); + + var ClassName = { + FADE: 'fade', + SHOW: 'show' + }; + var Selector = { + TITLE: '.popover-header', + CONTENT: '.popover-body' + }; + var Event = { + HIDE: "hide" + EVENT_KEY, + HIDDEN: "hidden" + EVENT_KEY, + SHOW: "show" + EVENT_KEY, + SHOWN: "shown" + EVENT_KEY, + INSERTED: "inserted" + EVENT_KEY, + CLICK: "click" + EVENT_KEY, + FOCUSIN: "focusin" + EVENT_KEY, + FOCUSOUT: "focusout" + EVENT_KEY, + MOUSEENTER: "mouseenter" + EVENT_KEY, + MOUSELEAVE: "mouseleave" + EVENT_KEY + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var Popover = + /*#__PURE__*/ + function (_Tooltip) { + _inheritsLoose(Popover, _Tooltip); + + function Popover() { + return _Tooltip.apply(this, arguments) || this; + } + + var _proto = Popover.prototype; + + // Overrides + _proto.isWithContent = function isWithContent() { + return this.getTitle() || this._getContent(); + }; + + _proto.addAttachmentClass = function addAttachmentClass(attachment) { + $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); + }; + + _proto.getTipElement = function getTipElement() { + this.tip = this.tip || $$$1(this.config.template)[0]; + return this.tip; + }; + + _proto.setContent = function setContent() { + var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events + + this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); + + var content = this._getContent(); + + if (typeof content === 'function') { + content = content.call(this.element); + } + + this.setElementContent($tip.find(Selector.CONTENT), content); + $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); + }; // Private + + + _proto._getContent = function _getContent() { + return this.element.getAttribute('data-content') || this.config.content; + }; + + _proto._cleanTipClass = function _cleanTipClass() { + var $tip = $$$1(this.getTipElement()); + var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); + + if (tabClass !== null && tabClass.length > 0) { + $tip.removeClass(tabClass.join('')); + } + }; // Static + + + Popover._jQueryInterface = function _jQueryInterface(config) { + return this.each(function () { + var data = $$$1(this).data(DATA_KEY); + + var _config = typeof config === 'object' ? config : null; + + if (!data && /destroy|hide/.test(config)) { + return; + } + + if (!data) { + data = new Popover(this, _config); + $$$1(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + if (typeof data[config] === 'undefined') { + throw new TypeError("No method named \"" + config + "\""); + } + + data[config](); + } + }); + }; + + _createClass(Popover, null, [{ + key: "VERSION", + // Getters + get: function get() { + return VERSION; + } + }, { + key: "Default", + get: function get() { + return Default; + } + }, { + key: "NAME", + get: function get() { + return NAME; + } + }, { + key: "DATA_KEY", + get: function get() { + return DATA_KEY; + } + }, { + key: "Event", + get: function get() { + return Event; + } + }, { + key: "EVENT_KEY", + get: function get() { + return EVENT_KEY; + } + }, { + key: "DefaultType", + get: function get() { + return DefaultType; + } + }]); + + return Popover; + }(Tooltip); + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + + $$$1.fn[NAME] = Popover._jQueryInterface; + $$$1.fn[NAME].Constructor = Popover; + + $$$1.fn[NAME].noConflict = function () { + $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + return Popover._jQueryInterface; + }; + + return Popover; + }($); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.1.0): scrollspy.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var ScrollSpy = function ($$$1) { + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + var NAME = 'scrollspy'; + var VERSION = '4.1.0'; + var DATA_KEY = 'bs.scrollspy'; + var EVENT_KEY = "." + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; + var Default = { + offset: 10, + method: 'auto', + target: '' + }; + var DefaultType = { + offset: 'number', + method: 'string', + target: '(string|element)' + }; + var Event = { + ACTIVATE: "activate" + EVENT_KEY, + SCROLL: "scroll" + EVENT_KEY, + LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY + }; + var ClassName = { + DROPDOWN_ITEM: 'dropdown-item', + DROPDOWN_MENU: 'dropdown-menu', + ACTIVE: 'active' + }; + var Selector = { + DATA_SPY: '[data-spy="scroll"]', + ACTIVE: '.active', + NAV_LIST_GROUP: '.nav, .list-group', + NAV_LINKS: '.nav-link', + NAV_ITEMS: '.nav-item', + LIST_ITEMS: '.list-group-item', + DROPDOWN: '.dropdown', + DROPDOWN_ITEMS: '.dropdown-item', + DROPDOWN_TOGGLE: '.dropdown-toggle' + }; + var OffsetMethod = { + OFFSET: 'offset', + POSITION: 'position' + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + }; + + var ScrollSpy = + /*#__PURE__*/ + function () { + function ScrollSpy(element, config) { + var _this = this; + + this._element = element; + this._scrollElement = element.tagName === 'BODY' ? window : element; + this._config = this._getConfig(config); + this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); + this._offsets = []; + this._targets = []; + this._activeTarget = null; + this._scrollHeight = 0; + $$$1(this._scrollElement).on(Event.SCROLL, function (event) { + return _this._process(event); + }); + this.refresh(); + + this._process(); + } // Getters + + + var _proto = ScrollSpy.prototype; + + // Public + _proto.refresh = function refresh() { + var _this2 = this; + + var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; + var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; + var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; + this._offsets = []; + this._targets = []; + this._scrollHeight = this._getScrollHeight(); + var targets = $$$1.makeArray($$$1(this._selector)); + targets.map(function (element) { + var target; + var targetSelector = Util.getSelectorFromElement(element); + + if (targetSelector) { + target = $$$1(targetSelector)[0]; + } + + if (target) { + var targetBCR = target.getBoundingClientRect(); + + if (targetBCR.width || targetBCR.height) { + // TODO (fat): remove sketch reliance on jQuery position/offset + return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; + } + } + + return null; + }).filter(function (item) { + return item; + }).sort(function (a, b) { + return a[0] - b[0]; + }).forEach(function (item) { + _this2._offsets.push(item[0]); + + _this2._targets.push(item[1]); + }); + }; + + _proto.dispose = function dispose() { + $$$1.removeData(this._element, DATA_KEY); + $$$1(this._scrollElement).off(EVENT_KEY); + this._element = null; + this._scrollElement = null; + this._config = null; + this._selector = null; + this._offsets = null; + this._targets = null; + this._activeTarget = null; + this._scrollHeight = null; + }; // Private + + + _proto._getConfig = function _getConfig(config) { + config = _objectSpread({}, Default, config); + + if (typeof config.target !== 'string') { + var id = $$$1(config.target).attr('id'); + + if (!id) { + id = Util.getUID(NAME); + $$$1(config.target).attr('id', id); + } + + config.target = "#" + id; + } + + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + }; + + _proto._getScrollTop = function _getScrollTop() { + return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; + }; + + _proto._getScrollHeight = function _getScrollHeight() { + return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); + }; + + _proto._getOffsetHeight = function _getOffsetHeight() { + return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; + }; + + _proto._process = function _process() { + var scrollTop = this._getScrollTop() + this._config.offset; + + var scrollHeight = this._getScrollHeight(); + + var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); + + if (this._scrollHeight !== scrollHeight) { + this.refresh(); + } + + if (scrollTop >= maxScroll) { + var target = this._targets[this._targets.length - 1]; + + if (this._activeTarget !== target) { + this._activate(target); + } + + return; + } + + if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { + this._activeTarget = null; + + this._clear(); + + return; + } + + for (var i = this._offsets.length; i--;) { + var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); + + if (isActiveTarget) { + this._activate(this._targets[i]); + } + } + }; + + _proto._activate = function _activate(target) { + this._activeTarget = target; + + this._clear(); + + var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style + + + queries = queries.map(function (selector) { + return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]"); + }); + var $link = $$$1(queries.join(',')); + + if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { + $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); + $link.addClass(ClassName.ACTIVE); + } else { + // Set triggered link as active + $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active + // With both