From 7a9229628a0548940f581339a4d6b74208114902 Mon Sep 17 00:00:00 2001 From: rockstardev Date: Tue, 18 Dec 2018 11:56:12 -0600 Subject: [PATCH 01/26] InvoiceDue field in export --- BTCPayServer.Tests/UnitTest1.cs | 37 ++++++++++++++++--- .../Services/Invoices/Export/InvoiceExport.cs | 17 ++++++++- .../Services/Invoices/InvoiceEntity.cs | 2 +- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index d8f9b24d1..dfac9dd86 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -1598,7 +1598,7 @@ donation: var invoice = user.BitPay.CreateInvoice(new Invoice() { - Price = 500, + Price = 10, Currency = "USD", PosData = "posData", OrderId = "orderId", @@ -1606,6 +1606,8 @@ donation: FullNotifications = true }, Facade.Merchant); + var networkFee = Money.Satoshis(10000); + // ensure 0 invoices exported because there are no payments yet var jsonResult = user.GetController().Export("json").GetAwaiter().GetResult(); var result = Assert.IsType(jsonResult); @@ -1614,18 +1616,41 @@ donation: var cashCow = tester.ExplorerNode; var invoiceAddress = BitcoinAddress.Create(invoice.CryptoInfo[0].Address, cashCow.Network); - var firstPayment = invoice.CryptoInfo[0].TotalDue - Money.Satoshis(10); + // + var firstPayment = invoice.CryptoInfo[0].TotalDue - 3*networkFee; cashCow.SendToAddress(invoiceAddress, firstPayment); + Thread.Sleep(1000); // prevent race conditions, ordering payments + // look if you can reduce thread sleep, this was min value for me + + // should reduce invoice due by 0 USD because payment = network fee + cashCow.SendToAddress(invoiceAddress, networkFee); + Thread.Sleep(1000); + + // pay remaining amount + cashCow.SendToAddress(invoiceAddress, 4*networkFee); + Thread.Sleep(1000); Eventually(() => { var jsonResultPaid = user.GetController().Export("json").GetAwaiter().GetResult(); var paidresult = Assert.IsType(jsonResultPaid); Assert.Equal("application/json", paidresult.ContentType); - Assert.Contains("\"InvoiceItemDesc\": \"Some \\\", description\"", paidresult.Content); - Assert.Contains("\"InvoicePrice\": 500.0", paidresult.Content); - Assert.Contains("\"ConversionRate\": 5000.0", paidresult.Content); - Assert.Contains($"\"InvoiceId\": \"{invoice.Id}\",", paidresult.Content); + + var parsedJson = JsonConvert.DeserializeObject(paidresult.Content); + Assert.Equal(3, parsedJson.Length); + + var pay1str = parsedJson[0].ToString(); + Assert.Contains("\"InvoiceItemDesc\": \"Some \\\", description\"", pay1str); + Assert.Contains("\"InvoiceDue\": 1.5", pay1str); + Assert.Contains("\"InvoicePrice\": 10.0", pay1str); + Assert.Contains("\"ConversionRate\": 5000.0", pay1str); + Assert.Contains($"\"InvoiceId\": \"{invoice.Id}\",", pay1str); + + var pay2str = parsedJson[1].ToString(); + Assert.Contains("\"InvoiceDue\": 1.5", pay2str); + + var pay3str = parsedJson[2].ToString(); + Assert.Contains("\"InvoiceDue\": 0", pay3str); }); /* diff --git a/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs b/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs index 543759ee3..f5b2c2bae 100644 --- a/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs +++ b/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs @@ -52,6 +52,8 @@ namespace BTCPayServer.Services.Invoices.Export private IEnumerable convertFromDb(InvoiceEntity invoice) { var exportList = new List(); + + var invoiceDue = invoice.ProductInformation.Price; // in this first version we are only exporting invoices that were paid foreach (var payment in invoice.GetPayments()) { @@ -64,6 +66,9 @@ namespace BTCPayServer.Services.Invoices.Export var pmethod = invoice.GetPaymentMethod(payment.GetPaymentMethodId(), Networks); + var paidAfterNetworkFees = pdata.GetValue() - pmethod.TxFee.ToDecimal(NBitcoin.MoneyUnit.BTC); + invoiceDue -= paidAfterNetworkFees * pmethod.Rate; + var target = new ExportInvoiceHolder { ReceivedDate = payment.ReceivedTime.UtcDateTime, @@ -73,6 +78,12 @@ namespace BTCPayServer.Services.Invoices.Export PaymentType = payment.GetPaymentMethodId().PaymentType == Payments.PaymentTypes.BTCLike ? "OnChain" : "OffChain", Destination = payment.GetCryptoPaymentData().GetDestination(Networks.GetNetwork(cryptoCode)), Paid = pdata.GetValue().ToString(CultureInfo.InvariantCulture), + // Adding NetworkFee because Paid doesn't take into account network fees + // so if fee is 10000 satoshis, customer can essentially send infinite number of tx + // and merchant effectivelly would receive 0 BTC, invoice won't be paid + // while looking just at export you could sum Paid and assume merchant "received payments" + NetworkFee = pmethod.TxFee.ToDecimal(NBitcoin.MoneyUnit.BTC).ToString(CultureInfo.InvariantCulture), + InvoiceDue = invoiceDue, OrderId = invoice.OrderId, StoreId = invoice.StoreId, InvoiceId = invoice.Id, @@ -112,12 +123,14 @@ namespace BTCPayServer.Services.Invoices.Export public string PaymentId { get; set; } public string Destination { get; set; } public string PaymentType { get; set; } - public string Paid { get; set; } public string CryptoCode { get; set; } public decimal ConversionRate { get; set; } + public string Paid { get; set; } + public string NetworkFee { get; set; } - public decimal InvoicePrice { get; set; } public string InvoiceCurrency { get; set; } + public decimal InvoiceDue { get; set; } + public decimal InvoicePrice { get; set; } public string InvoiceItemCode { get; set; } public string InvoiceItemDesc { get; set; } public string InvoiceFullStatus { get; set; } diff --git a/BTCPayServer/Services/Invoices/InvoiceEntity.cs b/BTCPayServer/Services/Invoices/InvoiceEntity.cs index d586d27b3..9c958d9e0 100644 --- a/BTCPayServer/Services/Invoices/InvoiceEntity.cs +++ b/BTCPayServer/Services/Invoices/InvoiceEntity.cs @@ -681,7 +681,7 @@ namespace BTCPayServer.Services.Invoices /// public Money NetworkFee { get; set; } /// - /// Minimum required to be paid in order to accept invocie as paid + /// Minimum required to be paid in order to accept invoice as paid /// public Money MinimumTotalDue { get; set; } } From ec23eae21dc3ecbd2c97195eff7dd7bca2eada76 Mon Sep 17 00:00:00 2001 From: rockstardev Date: Tue, 18 Dec 2018 11:56:51 -0600 Subject: [PATCH 02/26] Ensuding that payments are always ordered by time for consistency --- BTCPayServer/Services/Invoices/InvoiceRepository.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BTCPayServer/Services/Invoices/InvoiceRepository.cs b/BTCPayServer/Services/Invoices/InvoiceRepository.cs index 5bbaccb6e..47d4210ff 100644 --- a/BTCPayServer/Services/Invoices/InvoiceRepository.cs +++ b/BTCPayServer/Services/Invoices/InvoiceRepository.cs @@ -41,7 +41,7 @@ namespace BTCPayServer.Services.Invoices public InvoiceRepository(ApplicationDbContextFactory contextFactory, string dbreezePath) { int retryCount = 0; - retry: +retry: try { _Engine = new DBreezeEngine(dbreezePath); @@ -385,7 +385,8 @@ namespace BTCPayServer.Services.Invoices var paymentEntity = ToObject(p.Blob, null); paymentEntity.Accounted = p.Accounted; return paymentEntity; - }).ToList(); + }) + .OrderBy(a => a.ReceivedTime).ToList(); #pragma warning restore CS0618 var state = invoice.GetInvoiceState(); entity.ExceptionStatus = state.ExceptionStatus; From 365ee4cf0ba95aefbbc9b464b7b1c32dcfb1abae Mon Sep 17 00:00:00 2001 From: rockstardev Date: Tue, 18 Dec 2018 12:35:59 -0600 Subject: [PATCH 03/26] Fixing CSV test now that we have new field / reorders --- BTCPayServer.Tests/UnitTest1.cs | 31 ++----------------- .../Services/Invoices/Export/InvoiceExport.cs | 2 +- 2 files changed, 3 insertions(+), 30 deletions(-) diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index dfac9dd86..66043cf71 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -1652,33 +1652,6 @@ donation: var pay3str = parsedJson[2].ToString(); Assert.Contains("\"InvoiceDue\": 0", pay3str); }); - - /* -[ - { - "ReceivedDate": "2018-11-30T10:27:13Z", - "StoreId": "FKaSZrXLJ2tcLfCyeiYYfmZp1UM5nZ1LDecQqbwBRuHi", - "OrderId": "orderId", - "InvoiceId": "4XUkgPMaTBzwJGV9P84kPC", - "CreatedDate": "2018-11-30T10:27:06Z", - "ExpirationDate": "2018-11-30T10:42:06Z", - "MonitoringDate": "2018-11-30T11:42:06Z", - "PaymentId": "6e5755c3357b20fd66f5fc478778d81371eab341e7112ab66ed6122c0ec0d9e5-1", - "CryptoCode": "BTC", - "Destination": "mhhSEQuoM993o6vwnBeufJ4TaWov2ZUsPQ", - "PaymentType": "OnChain", - "PaymentDue": "0.10020000 BTC", - "PaymentPaid": "0.10009990 BTC", - "PaymentOverpaid": "0.00000000 BTC", - "ConversionRate": 5000.0, - "FiatPrice": 500.0, - "FiatCurrency": "USD", - "ItemCode": null, - "ItemDesc": "Some \", description", - "Status": "new" - } -] - */ } } @@ -1714,8 +1687,8 @@ donation: var paidresult = Assert.IsType(exportResultPaid); Assert.Equal("application/csv", paidresult.ContentType); Assert.Contains($",\"orderId\",\"{invoice.Id}\",", paidresult.Content); - Assert.Contains($",\"OnChain\",\"0.1000999\",\"BTC\",\"5000.0\",\"500.0\"", paidresult.Content); - Assert.Contains($",\"USD\",\"\",\"Some ``, description\",\"new (paidPartial)\"", paidresult.Content); + Assert.Contains($",\"OnChain\",\"BTC\",\"0.1000999\",\"0.0001\",\"5000.0\"", paidresult.Content); + Assert.Contains($",\"USD\",\"0.00050000\",\"500.0\",\"\",\"Some ``, description\",\"new (paidPartial)\"", paidresult.Content); }); } } diff --git a/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs b/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs index f5b2c2bae..f5afc686f 100644 --- a/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs +++ b/BTCPayServer/Services/Invoices/Export/InvoiceExport.cs @@ -124,9 +124,9 @@ namespace BTCPayServer.Services.Invoices.Export public string Destination { get; set; } public string PaymentType { get; set; } public string CryptoCode { get; set; } - public decimal ConversionRate { get; set; } public string Paid { get; set; } public string NetworkFee { get; set; } + public decimal ConversionRate { get; set; } public string InvoiceCurrency { get; set; } public decimal InvoiceDue { get; set; } From d4bdd5fd9c0507f07a45066fb9944fea08c54f62 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Fri, 21 Dec 2018 13:24:01 +0900 Subject: [PATCH 04/26] Do not use absolute link to link theme files on layout.cshtml --- BTCPayServer/Views/Shared/_Layout.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BTCPayServer/Views/Shared/_Layout.cshtml b/BTCPayServer/Views/Shared/_Layout.cshtml index dd9243376..43739a365 100644 --- a/BTCPayServer/Views/Shared/_Layout.cshtml +++ b/BTCPayServer/Views/Shared/_Layout.cshtml @@ -19,8 +19,8 @@ BTCPay Server @* CSS *@ - - + + From ed4de612dd4e695396e96363680547862c82bc95 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Fri, 21 Dec 2018 13:31:02 +0900 Subject: [PATCH 05/26] Fix layout if customized to an absolute uri --- BTCPayServer/Extensions.cs | 17 +++++++++++++++++ BTCPayServer/Views/Shared/_Layout.cshtml | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/BTCPayServer/Extensions.cs b/BTCPayServer/Extensions.cs index b9f50431b..e6a3eb648 100644 --- a/BTCPayServer/Extensions.cs +++ b/BTCPayServer/Extensions.cs @@ -177,6 +177,23 @@ namespace BTCPayServer path); } + /// + /// Returns path if path is absolute, or the relative path to this website root + /// + /// + /// + /// + public static string GetRelativePathOrAbsolute(this HttpRequest request, string path) + { + if (Uri.TryCreate(path, UriKind.Absolute, out var unused)) + return path; + if (path.Length > 0 && path[0] != '/') + path = $"/{path}"; + return string.Concat( + request.PathBase.ToUriComponent(), + path); + } + public static string GetAbsoluteUri(this HttpRequest request, string redirectUrl) { bool isRelative = diff --git a/BTCPayServer/Views/Shared/_Layout.cshtml b/BTCPayServer/Views/Shared/_Layout.cshtml index 43739a365..adc41457e 100644 --- a/BTCPayServer/Views/Shared/_Layout.cshtml +++ b/BTCPayServer/Views/Shared/_Layout.cshtml @@ -19,8 +19,8 @@ BTCPay Server @* CSS *@ - - + + From 3061b4dfd2b155d799e17437db4b251abdec4613 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Fri, 21 Dec 2018 13:33:26 +0900 Subject: [PATCH 06/26] Add comments --- BTCPayServer/Extensions.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/BTCPayServer/Extensions.cs b/BTCPayServer/Extensions.cs index e6a3eb648..f008ec059 100644 --- a/BTCPayServer/Extensions.cs +++ b/BTCPayServer/Extensions.cs @@ -168,6 +168,13 @@ namespace BTCPayServer request.Path.ToUriComponent()); } + /// + /// If 'toto' and RootPath is 'rootpath' returns '/rootpath/toto' + /// If 'toto' and RootPath is empty returns '/toto' + /// + /// + /// + /// public static string GetRelativePath(this HttpRequest request, string path) { if (path.Length > 0 && path[0] != '/') @@ -178,7 +185,9 @@ namespace BTCPayServer } /// - /// Returns path if path is absolute, or the relative path to this website root + /// If 'https://example.com/toto' returns 'https://example.com/toto' + /// If 'toto' and RootPath is 'rootpath' returns '/rootpath/toto' + /// If 'toto' and RootPath is empty returns '/toto' /// /// /// From 968c82070200d6c20321c14a2c0d04ab4f6f58f9 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Fri, 21 Dec 2018 14:15:05 +0900 Subject: [PATCH 07/26] Add turkish translation --- BTCPayServer/wwwroot/locales/tr.json | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 BTCPayServer/wwwroot/locales/tr.json diff --git a/BTCPayServer/wwwroot/locales/tr.json b/BTCPayServer/wwwroot/locales/tr.json new file mode 100644 index 000000000..6e0476aa9 --- /dev/null +++ b/BTCPayServer/wwwroot/locales/tr.json @@ -0,0 +1,47 @@ +{ + "NOTICE_WARN": "THIS CODE HAS BEEN AUTOMATICALLY GENERATED FROM TRANSIFEX, IF YOU WISH TO HELP TRANSLATION COME ON THE SLACK http://slack.btcpayserver.org TO REQUEST PERMISSION TO https://www.transifex.com/btcpayserver/btcpayserver/", + "code": "tr", + "currentLanguage": "Türkçe", + "lang": "Dil", + "Awaiting Payment...": "Ödeme Bekleniyor...", + "Pay with": "Aracılığıyla Öde", + "Contact and Refund Email": "İletişim ve Geri Ödeme Email", + "Contact_Body": "Lütfen aşağıda bir email belirtin. Ödemede sorun olması halinde bu adresten sizinle iletişime geçeceğiz.", + "Your email": "Email Adresiniz", + "Continue": "Devam Et", + "Please enter a valid email address": "Lütfen geçerli bir email adresi giriniz", + "Order Amount": "Ödeme Tutarı", + "Network Cost": "Ağ Ücreti", + "Already Paid": "Zaten Ödendi", + "Due": "Bitiş Tarihi", + "Scan": "Tara", + "Copy": "Kopyala", + "Conversion": "Dönüştürme", + "Open in wallet": "Cüzdanda Aç", + "CompletePay_Body": "Ödemenizi tamamlamak için, lütfen {{btcDue}} {{cryptoCode}} bilgilerini aşağıdaki adrese gönderin.", + "Amount": "Tutar", + "Address": "Adres", + "Copied": "Kopyalandı", + "ConversionTab_BodyTop": "{{btcDue}} {{cryptoCode}} ödemenizi satıcının desteklemediği altcoinler ile de yapabilirsiniz.", + "ConversionTab_BodyDesc": "Bu servis 3. kişiler tarafından sağlanmaktadır. Ödemelerinizin iletildiği sağlayıcılar üzerinde bizim herhangi bir yetkimiz bulunmamaktadır. Faturanın ödendi olarak işaretlenmesi için ödemenin {{cryptoCode}} Blockchain ağından gelmesi gerekmektedir.", + "ConversionTab_CalculateAmount_Error": "Tekar dene", + "ConversionTab_LoadCurrencies_Error": "Tekrar dene", + "ConversionTab_Lightning": "Lightning Network ödemesi için dönüşüm sağlayıcı mevcut değil.", + "ConversionTab_CurrencyList_Select_Option": "Lütfen çevrim için bir para birimi seçin", + "Invoice expiring soon...": "Fatura son kullanım tarihi yakın...", + "Invoice expired": "Fatura son kullanım tarihi geçti", + "What happened?": "Ne oldu?", + "InvoiceExpired_Body_1": "Bu Fatura'nın son kullanım tarihi doldu. Bir Fatura sadece {{maxTimeMinutes}}  dakika geçerlidir.\nÖdemenizi tekrar göndermek istiyorsanız {{storeName}} mağazasına dönebilirsiniz.", + "InvoiceExpired_Body_2": "Ödemenizi göndermeyi denediyseniz, ağ tarafından henüz onaylanmadı. Ödemeniz bize ulaşmadı.", + "InvoiceExpired_Body_3": "Eğer daha sonra bize ulaşırsa, ya siparişinizi onaylarız ya da iade için sizinle iletişime geçeriz.", + "Invoice ID": "Fatura ID", + "Order ID": "Sipariş ID", + "Return to StoreName": "{{storeName}} dön", + "This invoice has been paid": "Bu Fatura ödendi", + "This invoice has been archived": "Bu Fatura arşivlendi", + "Archived_Body": "Bilgi ve yardım için lütfen mağaza ile iletişime geçin", + "BOLT 11 Invoice": "BOLT 11 Faturası", + "Node Info": "Düğüm Bilgisi", + "txCount": "{{count}} işlem", + "txCount_plural": "{{count}} işlem" +} \ No newline at end of file From a63ed4d3b4e5f9aab8cca54f99849b150cf9617f Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Fri, 21 Dec 2018 16:45:05 +0900 Subject: [PATCH 08/26] bump --- BTCPayServer.Tests/docker-compose.yml | 2 +- BTCPayServer/BTCPayServer.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BTCPayServer.Tests/docker-compose.yml b/BTCPayServer.Tests/docker-compose.yml index e7089172d..f76d5e023 100644 --- a/BTCPayServer.Tests/docker-compose.yml +++ b/BTCPayServer.Tests/docker-compose.yml @@ -145,7 +145,7 @@ services: - bitcoind lightning-charged: - image: shesek/lightning-charge:0.4.3 + image: shesek/lightning-charge:0.4.6-standalone restart: unless-stopped environment: NETWORK: regtest diff --git a/BTCPayServer/BTCPayServer.csproj b/BTCPayServer/BTCPayServer.csproj index 73239a3ec..fd5d78792 100644 --- a/BTCPayServer/BTCPayServer.csproj +++ b/BTCPayServer/BTCPayServer.csproj @@ -2,7 +2,7 @@ Exe netcoreapp2.1 - 1.0.3.33 + 1.0.3.34 NU1701,CA1816,CA1308,CA1810,CA2208 From 6f896cb09684aac28a8bdc26f3a65dc54caf8fa7 Mon Sep 17 00:00:00 2001 From: Kukks Date: Sat, 22 Dec 2018 16:55:24 +0100 Subject: [PATCH 09/26] update bootstrap to 4.2.1 --- .../vendor/bootstrap4/css/bootstrap.css | 9454 ++++++++++++----- .../vendor/bootstrap4/js/bootstrap.bundle.js | 7064 ++++++------ .../wwwroot/vendor/bootstrap4/js/bootstrap.js | 2207 ++-- 3 files changed, 11708 insertions(+), 7017 deletions(-) diff --git a/BTCPayServer/wwwroot/vendor/bootstrap4/css/bootstrap.css b/BTCPayServer/wwwroot/vendor/bootstrap4/css/bootstrap.css index 7f0ad29bb..ec3650d57 100644 --- a/BTCPayServer/wwwroot/vendor/bootstrap4/css/bootstrap.css +++ b/BTCPayServer/wwwroot/vendor/bootstrap4/css/bootstrap.css @@ -1,5 +1,5 @@ /*! - * Bootstrap v4.0.0 (https://getbootstrap.com) + * Bootstrap v4.2.1 (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) @@ -17,7 +17,7 @@ --cyan: #17a2b8; --white: #fff; --gray: #6c757d; - --gray-dark: #0f3b21; + --gray-dark: #343a40; --primary: #329f80; --secondary: #2284A6; --success: #28a745; @@ -31,175 +31,208 @@ --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; } + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} *, *::before, *::after { - box-sizing: border-box; } + 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; } + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} -@-ms-viewport { - width: device-width; } - -article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { - display: block; } +article, aside, 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-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.9rem; font-weight: 400; line-height: 1.5; color: #212529; text-align: left; - background-color: #fff; } + background-color: #fff; +} [tabindex="-1"]:focus { - outline: 0 !important; } + outline: 0 !important; +} hr { box-sizing: content-box; height: 0; - overflow: visible; } + overflow: visible; +} h1, h2, h3, h4, h5, h6 { margin-top: 0; - margin-bottom: 0.5rem; } + margin-bottom: 0.5rem; +} p { margin-top: 0; - margin-bottom: 1rem; } + 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; } + border-bottom: 0; + text-decoration-skip-ink: none; +} address { margin-bottom: 1rem; font-style: normal; - line-height: inherit; } + line-height: inherit; +} ol, ul, dl { margin-top: 0; - margin-bottom: 1rem; } + margin-bottom: 1rem; +} ol ol, ul ul, ol ul, ul ol { - margin-bottom: 0; } + margin-bottom: 0; +} dt { - font-weight: 700; } + font-weight: 700; +} dd { margin-bottom: .5rem; - margin-left: 0; } + margin-left: 0; +} blockquote { - margin: 0 0 1rem; } - -dfn { - font-style: italic; } + margin: 0 0 1rem; +} b, strong { - font-weight: bolder; } + font-weight: bolder; +} small { - font-size: 80%; } + font-size: 80%; +} sub, sup { position: relative; font-size: 75%; line-height: 0; - vertical-align: baseline; } + vertical-align: baseline; +} sub { - bottom: -.25em; } + bottom: -.25em; +} sup { - top: -.5em; } + top: -.5em; +} a { color: #329f80; text-decoration: none; background-color: transparent; - -webkit-text-decoration-skip: objects; } - a:hover { - color: #11382d; - text-decoration: underline; } +} + +a:hover { + color: #206551; + 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; } + 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; } + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} pre { margin-top: 0; margin-bottom: 1rem; overflow: auto; - -ms-overflow-style: scrollbar; } +} figure { - margin: 0 0 1rem; } + margin: 0 0 1rem; +} img { vertical-align: middle; - border-style: none; } + border-style: none; +} -svg:not(:root) { - overflow: hidden; } +svg { + overflow: hidden; + vertical-align: middle; +} table { - border-collapse: collapse; } + border-collapse: collapse; +} caption { padding-top: 0.75rem; padding-bottom: 0.75rem; color: #6c757d; text-align: left; - caption-side: bottom; } + caption-side: bottom; +} th { - text-align: inherit; } + text-align: inherit; +} label { display: inline-block; - margin-bottom: .5rem; } + margin-bottom: 0.5rem; +} button { - border-radius: 0; } + border-radius: 0; +} button:focus { outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; } + outline: 5px auto -webkit-focus-ring-color; +} input, button, @@ -209,49 +242,58 @@ textarea { margin: 0; font-family: inherit; font-size: inherit; - line-height: inherit; } + line-height: inherit; +} button, input { - overflow: visible; } + overflow: visible; +} button, select { - text-transform: none; } + text-transform: none; +} button, -html [type="button"], +[type="button"], [type="reset"], [type="submit"] { - -webkit-appearance: button; } + -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; } + border-style: none; +} input[type="radio"], input[type="checkbox"] { box-sizing: border-box; - padding: 0; } + padding: 0; +} input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { - -webkit-appearance: listbox; } + -webkit-appearance: listbox; +} textarea { overflow: auto; - resize: vertical; } + resize: vertical; +} fieldset { min-width: 0; padding: 0; margin: 0; - border: 0; } + border: 0; +} legend { display: block; @@ -262,39 +304,48 @@ legend { font-size: 1.5rem; line-height: inherit; color: inherit; - white-space: normal; } + white-space: normal; +} progress { - vertical-align: baseline; } + vertical-align: baseline; +} [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { - height: auto; } + height: auto; +} [type="search"] { outline-offset: -2px; - -webkit-appearance: none; } + -webkit-appearance: none; +} -[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } + -webkit-appearance: none; +} ::-webkit-file-upload-button { font: inherit; - -webkit-appearance: button; } + -webkit-appearance: button; +} output { - display: inline-block; } + display: inline-block; +} summary { display: list-item; - cursor: pointer; } + cursor: pointer; +} template { - display: none; } + display: none; +} [hidden] { - display: none !important; } + display: none !important; +} h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { @@ -302,97 +353,123 @@ h1, h2, h3, h4, h5, h6, font-family: inherit; font-weight: 500; line-height: 1.2; - color: inherit; } + color: inherit; +} h1, .h1 { - font-size: 2.25rem; } + font-size: 2.25rem; +} h2, .h2 { - font-size: 1.8rem; } + font-size: 1.8rem; +} h3, .h3 { - font-size: 1.575rem; } + font-size: 1.575rem; +} h4, .h4 { - font-size: 1.35rem; } + font-size: 1.35rem; +} h5, .h5 { - font-size: 1.125rem; } + font-size: 1.125rem; +} h6, .h6 { - font-size: 0.9rem; } + font-size: 0.9rem; +} .lead { font-size: 1.125rem; - font-weight: 300; } + font-weight: 300; +} .display-1 { font-size: 6rem; font-weight: 300; - line-height: 1.2; } + line-height: 1.2; +} .display-2 { font-size: 5.5rem; font-weight: 300; - line-height: 1.2; } + line-height: 1.2; +} .display-3 { font-size: 4.5rem; font-weight: 300; - line-height: 1.2; } + line-height: 1.2; +} .display-4 { font-size: 3.5rem; font-weight: 300; - line-height: 1.2; } + line-height: 1.2; +} hr { margin-top: 1rem; margin-bottom: 1rem; border: 0; - border-top: 1px solid rgba(0, 0, 0, 0.1); } + border-top: 1px solid rgba(0, 0, 0, 0.1); +} small, .small { font-size: 80%; - font-weight: 400; } + font-weight: 400; +} mark, .mark { padding: 0.2em; - background-color: #fcf8e3; } + background-color: #fcf8e3; +} .list-unstyled { padding-left: 0; - list-style: none; } + list-style: none; +} .list-inline { padding-left: 0; - list-style: none; } + list-style: none; +} .list-inline-item { - display: inline-block; } - .list-inline-item:not(:last-child) { - margin-right: 0.5rem; } + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} .initialism { font-size: 90%; - text-transform: uppercase; } + text-transform: uppercase; +} .blockquote { margin-bottom: 1rem; - font-size: 1.125rem; } + font-size: 1.125rem; +} .blockquote-footer { display: block; font-size: 80%; - color: #6c757d; } - .blockquote-footer::before { - content: "\2014 \00A0"; } + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014\00A0"; +} .img-fluid { max-width: 100%; - height: auto; } + height: auto; +} .img-thumbnail { padding: 0.25rem; @@ -400,95 +477,123 @@ mark, border: 1px solid #dee2e6; border-radius: 0.25rem; max-width: 100%; - height: auto; } + height: auto; +} .figure { - display: inline-block; } + display: inline-block; +} .figure-img { margin-bottom: 0.5rem; - line-height: 1; } + 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; } + color: #6c757d; +} code { font-size: 87.5%; color: #e83e8c; - word-break: break-word; } - a > code { - color: inherit; } + 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; } + 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; } + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} .pre-scrollable { max-height: 340px; - overflow-y: scroll; } + 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; } } + 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; } + margin-left: auto; +} .row { + display: -ms-flexbox; display: flex; + -ms-flex-wrap: wrap; flex-wrap: wrap; margin-right: -15px; - margin-left: -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; } + 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, @@ -498,707 +603,1189 @@ pre { .col-xl-auto { position: relative; width: 100%; - min-height: 1px; padding-right: 15px; - padding-left: 15px; } + padding-left: 15px; +} .col { + -ms-flex-preferred-size: 0; flex-basis: 0; + -ms-flex-positive: 1; flex-grow: 1; - max-width: 100%; } + max-width: 100%; +} .col-auto { + -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; +} .col-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; } + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} .col-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; } + -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%; } + max-width: 25%; +} .col-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; } + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} .col-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; } + -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%; } + max-width: 50%; +} .col-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; } + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} .col-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; } + -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%; } + max-width: 75%; +} .col-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; } + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} .col-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; } + -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%; } + max-width: 100%; +} .order-first { - order: -1; } + -ms-flex-order: -1; + order: -1; +} .order-last { - order: 13; } + -ms-flex-order: 13; + order: 13; +} .order-0 { - order: 0; } + -ms-flex-order: 0; + order: 0; +} .order-1 { - order: 1; } + -ms-flex-order: 1; + order: 1; +} .order-2 { - order: 2; } + -ms-flex-order: 2; + order: 2; +} .order-3 { - order: 3; } + -ms-flex-order: 3; + order: 3; +} .order-4 { - order: 4; } + -ms-flex-order: 4; + order: 4; +} .order-5 { - order: 5; } + -ms-flex-order: 5; + order: 5; +} .order-6 { - order: 6; } + -ms-flex-order: 6; + order: 6; +} .order-7 { - order: 7; } + -ms-flex-order: 7; + order: 7; +} .order-8 { - order: 8; } + -ms-flex-order: 8; + order: 8; +} .order-9 { - order: 9; } + -ms-flex-order: 9; + order: 9; +} .order-10 { - order: 10; } + -ms-flex-order: 10; + order: 10; +} .order-11 { - order: 11; } + -ms-flex-order: 11; + order: 11; +} .order-12 { - order: 12; } + -ms-flex-order: 12; + order: 12; +} .offset-1 { - margin-left: 8.33333%; } + margin-left: 8.333333%; +} .offset-2 { - margin-left: 16.66667%; } + margin-left: 16.666667%; +} .offset-3 { - margin-left: 25%; } + margin-left: 25%; +} .offset-4 { - margin-left: 33.33333%; } + margin-left: 33.333333%; +} .offset-5 { - margin-left: 41.66667%; } + margin-left: 41.666667%; +} .offset-6 { - margin-left: 50%; } + margin-left: 50%; +} .offset-7 { - margin-left: 58.33333%; } + margin-left: 58.333333%; +} .offset-8 { - margin-left: 66.66667%; } + margin-left: 66.666667%; +} .offset-9 { - margin-left: 75%; } + margin-left: 75%; +} .offset-10 { - margin-left: 83.33333%; } + margin-left: 83.333333%; +} .offset-11 { - margin-left: 91.66667%; } + 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%; } + max-width: 100%; + } .col-sm-auto { + -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; + } .col-sm-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; } + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } .col-sm-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; } + -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%; } + max-width: 25%; + } .col-sm-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; } + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } .col-sm-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; } + -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%; } + max-width: 50%; + } .col-sm-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; } + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } .col-sm-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; } + -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%; } + max-width: 75%; + } .col-sm-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; } + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } .col-sm-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; } + -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%; } + max-width: 100%; + } .order-sm-first { - order: -1; } + -ms-flex-order: -1; + order: -1; + } .order-sm-last { - order: 13; } + -ms-flex-order: 13; + order: 13; + } .order-sm-0 { - order: 0; } + -ms-flex-order: 0; + order: 0; + } .order-sm-1 { - order: 1; } + -ms-flex-order: 1; + order: 1; + } .order-sm-2 { - order: 2; } + -ms-flex-order: 2; + order: 2; + } .order-sm-3 { - order: 3; } + -ms-flex-order: 3; + order: 3; + } .order-sm-4 { - order: 4; } + -ms-flex-order: 4; + order: 4; + } .order-sm-5 { - order: 5; } + -ms-flex-order: 5; + order: 5; + } .order-sm-6 { - order: 6; } + -ms-flex-order: 6; + order: 6; + } .order-sm-7 { - order: 7; } + -ms-flex-order: 7; + order: 7; + } .order-sm-8 { - order: 8; } + -ms-flex-order: 8; + order: 8; + } .order-sm-9 { - order: 9; } + -ms-flex-order: 9; + order: 9; + } .order-sm-10 { - order: 10; } + -ms-flex-order: 10; + order: 10; + } .order-sm-11 { - order: 11; } + -ms-flex-order: 11; + order: 11; + } .order-sm-12 { - order: 12; } + -ms-flex-order: 12; + order: 12; + } .offset-sm-0 { - margin-left: 0; } + margin-left: 0; + } .offset-sm-1 { - margin-left: 8.33333%; } + margin-left: 8.333333%; + } .offset-sm-2 { - margin-left: 16.66667%; } + margin-left: 16.666667%; + } .offset-sm-3 { - margin-left: 25%; } + margin-left: 25%; + } .offset-sm-4 { - margin-left: 33.33333%; } + margin-left: 33.333333%; + } .offset-sm-5 { - margin-left: 41.66667%; } + margin-left: 41.666667%; + } .offset-sm-6 { - margin-left: 50%; } + margin-left: 50%; + } .offset-sm-7 { - margin-left: 58.33333%; } + margin-left: 58.333333%; + } .offset-sm-8 { - margin-left: 66.66667%; } + margin-left: 66.666667%; + } .offset-sm-9 { - margin-left: 75%; } + margin-left: 75%; + } .offset-sm-10 { - margin-left: 83.33333%; } + margin-left: 83.333333%; + } .offset-sm-11 { - margin-left: 91.66667%; } } + 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%; } + max-width: 100%; + } .col-md-auto { + -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; + } .col-md-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; } + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } .col-md-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; } + -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%; } + max-width: 25%; + } .col-md-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; } + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } .col-md-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; } + -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%; } + max-width: 50%; + } .col-md-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; } + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } .col-md-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; } + -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%; } + max-width: 75%; + } .col-md-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; } + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } .col-md-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; } + -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%; } + max-width: 100%; + } .order-md-first { - order: -1; } + -ms-flex-order: -1; + order: -1; + } .order-md-last { - order: 13; } + -ms-flex-order: 13; + order: 13; + } .order-md-0 { - order: 0; } + -ms-flex-order: 0; + order: 0; + } .order-md-1 { - order: 1; } + -ms-flex-order: 1; + order: 1; + } .order-md-2 { - order: 2; } + -ms-flex-order: 2; + order: 2; + } .order-md-3 { - order: 3; } + -ms-flex-order: 3; + order: 3; + } .order-md-4 { - order: 4; } + -ms-flex-order: 4; + order: 4; + } .order-md-5 { - order: 5; } + -ms-flex-order: 5; + order: 5; + } .order-md-6 { - order: 6; } + -ms-flex-order: 6; + order: 6; + } .order-md-7 { - order: 7; } + -ms-flex-order: 7; + order: 7; + } .order-md-8 { - order: 8; } + -ms-flex-order: 8; + order: 8; + } .order-md-9 { - order: 9; } + -ms-flex-order: 9; + order: 9; + } .order-md-10 { - order: 10; } + -ms-flex-order: 10; + order: 10; + } .order-md-11 { - order: 11; } + -ms-flex-order: 11; + order: 11; + } .order-md-12 { - order: 12; } + -ms-flex-order: 12; + order: 12; + } .offset-md-0 { - margin-left: 0; } + margin-left: 0; + } .offset-md-1 { - margin-left: 8.33333%; } + margin-left: 8.333333%; + } .offset-md-2 { - margin-left: 16.66667%; } + margin-left: 16.666667%; + } .offset-md-3 { - margin-left: 25%; } + margin-left: 25%; + } .offset-md-4 { - margin-left: 33.33333%; } + margin-left: 33.333333%; + } .offset-md-5 { - margin-left: 41.66667%; } + margin-left: 41.666667%; + } .offset-md-6 { - margin-left: 50%; } + margin-left: 50%; + } .offset-md-7 { - margin-left: 58.33333%; } + margin-left: 58.333333%; + } .offset-md-8 { - margin-left: 66.66667%; } + margin-left: 66.666667%; + } .offset-md-9 { - margin-left: 75%; } + margin-left: 75%; + } .offset-md-10 { - margin-left: 83.33333%; } + margin-left: 83.333333%; + } .offset-md-11 { - margin-left: 91.66667%; } } + 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%; } + max-width: 100%; + } .col-lg-auto { + -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; + } .col-lg-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; } + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } .col-lg-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; } + -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%; } + max-width: 25%; + } .col-lg-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; } + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } .col-lg-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; } + -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%; } + max-width: 50%; + } .col-lg-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; } + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } .col-lg-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; } + -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%; } + max-width: 75%; + } .col-lg-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; } + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } .col-lg-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; } + -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%; } + max-width: 100%; + } .order-lg-first { - order: -1; } + -ms-flex-order: -1; + order: -1; + } .order-lg-last { - order: 13; } + -ms-flex-order: 13; + order: 13; + } .order-lg-0 { - order: 0; } + -ms-flex-order: 0; + order: 0; + } .order-lg-1 { - order: 1; } + -ms-flex-order: 1; + order: 1; + } .order-lg-2 { - order: 2; } + -ms-flex-order: 2; + order: 2; + } .order-lg-3 { - order: 3; } + -ms-flex-order: 3; + order: 3; + } .order-lg-4 { - order: 4; } + -ms-flex-order: 4; + order: 4; + } .order-lg-5 { - order: 5; } + -ms-flex-order: 5; + order: 5; + } .order-lg-6 { - order: 6; } + -ms-flex-order: 6; + order: 6; + } .order-lg-7 { - order: 7; } + -ms-flex-order: 7; + order: 7; + } .order-lg-8 { - order: 8; } + -ms-flex-order: 8; + order: 8; + } .order-lg-9 { - order: 9; } + -ms-flex-order: 9; + order: 9; + } .order-lg-10 { - order: 10; } + -ms-flex-order: 10; + order: 10; + } .order-lg-11 { - order: 11; } + -ms-flex-order: 11; + order: 11; + } .order-lg-12 { - order: 12; } + -ms-flex-order: 12; + order: 12; + } .offset-lg-0 { - margin-left: 0; } + margin-left: 0; + } .offset-lg-1 { - margin-left: 8.33333%; } + margin-left: 8.333333%; + } .offset-lg-2 { - margin-left: 16.66667%; } + margin-left: 16.666667%; + } .offset-lg-3 { - margin-left: 25%; } + margin-left: 25%; + } .offset-lg-4 { - margin-left: 33.33333%; } + margin-left: 33.333333%; + } .offset-lg-5 { - margin-left: 41.66667%; } + margin-left: 41.666667%; + } .offset-lg-6 { - margin-left: 50%; } + margin-left: 50%; + } .offset-lg-7 { - margin-left: 58.33333%; } + margin-left: 58.333333%; + } .offset-lg-8 { - margin-left: 66.66667%; } + margin-left: 66.666667%; + } .offset-lg-9 { - margin-left: 75%; } + margin-left: 75%; + } .offset-lg-10 { - margin-left: 83.33333%; } + margin-left: 83.333333%; + } .offset-lg-11 { - margin-left: 91.66667%; } } + 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%; } + max-width: 100%; + } .col-xl-auto { + -ms-flex: 0 0 auto; flex: 0 0 auto; width: auto; - max-width: none; } + max-width: 100%; + } .col-xl-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; } + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } .col-xl-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; } + -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%; } + max-width: 25%; + } .col-xl-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; } + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } .col-xl-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; } + -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%; } + max-width: 50%; + } .col-xl-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; } + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } .col-xl-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; } + -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%; } + max-width: 75%; + } .col-xl-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; } + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } .col-xl-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; } + -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%; } + max-width: 100%; + } .order-xl-first { - order: -1; } + -ms-flex-order: -1; + order: -1; + } .order-xl-last { - order: 13; } + -ms-flex-order: 13; + order: 13; + } .order-xl-0 { - order: 0; } + -ms-flex-order: 0; + order: 0; + } .order-xl-1 { - order: 1; } + -ms-flex-order: 1; + order: 1; + } .order-xl-2 { - order: 2; } + -ms-flex-order: 2; + order: 2; + } .order-xl-3 { - order: 3; } + -ms-flex-order: 3; + order: 3; + } .order-xl-4 { - order: 4; } + -ms-flex-order: 4; + order: 4; + } .order-xl-5 { - order: 5; } + -ms-flex-order: 5; + order: 5; + } .order-xl-6 { - order: 6; } + -ms-flex-order: 6; + order: 6; + } .order-xl-7 { - order: 7; } + -ms-flex-order: 7; + order: 7; + } .order-xl-8 { - order: 8; } + -ms-flex-order: 8; + order: 8; + } .order-xl-9 { - order: 9; } + -ms-flex-order: 9; + order: 9; + } .order-xl-10 { - order: 10; } + -ms-flex-order: 10; + order: 10; + } .order-xl-11 { - order: 11; } + -ms-flex-order: 11; + order: 11; + } .order-xl-12 { - order: 12; } + -ms-flex-order: 12; + order: 12; + } .offset-xl-0 { - margin-left: 0; } + margin-left: 0; + } .offset-xl-1 { - margin-left: 8.33333%; } + margin-left: 8.333333%; + } .offset-xl-2 { - margin-left: 16.66667%; } + margin-left: 16.666667%; + } .offset-xl-3 { - margin-left: 25%; } + margin-left: 25%; + } .offset-xl-4 { - margin-left: 33.33333%; } + margin-left: 33.333333%; + } .offset-xl-5 { - margin-left: 41.66667%; } + margin-left: 41.666667%; + } .offset-xl-6 { - margin-left: 50%; } + margin-left: 50%; + } .offset-xl-7 { - margin-left: 58.33333%; } + margin-left: 58.333333%; + } .offset-xl-8 { - margin-left: 66.66667%; } + margin-left: 66.666667%; + } .offset-xl-9 { - margin-left: 75%; } + margin-left: 75%; + } .offset-xl-10 { - margin-left: 83.33333%; } + margin-left: 83.333333%; + } .offset-xl-11 { - margin-left: 91.66667%; } } + 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: 0px solid #dee2e6; - border-bottom: 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; } + 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; } + 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; } + 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); } + background-color: rgba(0, 0, 0, 0.05); +} .table-hover tbody tr:hover { - background-color: rgba(0, 0, 0, 0.075); } + background-color: rgba(0, 0, 0, 0.075); +} .table-primary, .table-primary > th, .table-primary > td { - background-color: #c1d8d1; } + background-color: #c6e4db; +} + +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #94cdbd; +} .table-hover .table-primary:hover { - background-color: #b1cec5; } - .table-hover .table-primary:hover > td, - .table-hover .table-primary:hover > th { - background-color: #b1cec5; } + background-color: #b5dcd0; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #b5dcd0; +} .table-secondary, .table-secondary > th, .table-secondary > td { - background-color: #c1dde6; } + background-color: #c1dde6; +} + +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #8cbfd1; +} .table-hover .table-secondary:hover { - background-color: #afd3df; } - .table-hover .table-secondary:hover > td, - .table-hover .table-secondary:hover > th { - background-color: #afd3df; } + background-color: #afd3df; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #afd3df; +} .table-success, .table-success > th, .table-success > td { - background-color: #c3e6cb; } + background-color: #c3e6cb; +} + +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8fd19e; +} .table-hover .table-success:hover { - background-color: #b1dfbb; } - .table-hover .table-success:hover > td, - .table-hover .table-success:hover > th { - background-color: #b1dfbb; } + 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; } + background-color: #bee5eb; +} + +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #86cfda; +} .table-hover .table-info:hover { - background-color: #abdde5; } - .table-hover .table-info:hover > td, - .table-hover .table-info:hover > th { - background-color: #abdde5; } + 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; } + background-color: #ffeeba; +} + +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdf7e; +} .table-hover .table-warning:hover { - background-color: #ffe8a1; } - .table-hover .table-warning:hover > td, - .table-hover .table-warning:hover > th { - background-color: #ffe8a1; } + 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; } + background-color: #f5c6cb; +} + +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #ed969e; +} .table-hover .table-danger:hover { - background-color: #f1b0b7; } - .table-hover .table-danger:hover > td, - .table-hover .table-danger:hover > th { - background-color: #f1b0b7; } + 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; } + background-color: #fdfdfe; +} + +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; +} .table-hover .table-light:hover { - background-color: #ececf6; } - .table-hover .table-light:hover > td, - .table-hover .table-light:hover > th { - background-color: #ececf6; } + 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; } + background-color: #bcc8c1; +} + +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #82998c; +} .table-hover .table-dark:hover { - background-color: #b9bbbe; } - .table-hover .table-dark:hover > td, - .table-hover .table-dark:hover > th { - background-color: #b9bbbe; } + background-color: #aebdb4; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #aebdb4; +} .table-active, .table-active > th, .table-active > td { - background-color: rgba(0, 0, 0, 0.075); } + 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); } + 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; } + border-color: #32383e; +} .table .thead-light th { color: #495057; background-color: #e9ecef; - border-color: #dee2e6; } + 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); } + 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 { @@ -1206,9 +1793,12 @@ pre { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } - .table-responsive-sm > .table-bordered { - border: 0; } } + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} @media (max-width: 767.98px) { .table-responsive-md { @@ -1216,9 +1806,12 @@ pre { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } - .table-responsive-md > .table-bordered { - border: 0; } } + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} @media (max-width: 991.98px) { .table-responsive-lg { @@ -1226,9 +1819,12 @@ pre { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } - .table-responsive-lg > .table-bordered { - border: 0; } } + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} @media (max-width: 1199.98px) { .table-responsive-xl { @@ -1236,77 +1832,122 @@ pre { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar; } - .table-responsive-xl > .table-bordered { - border: 0; } } + -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; } + -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.table-responsive > .table-bordered { + border: 0; +} .form-control { display: block; width: 100%; + height: calc(2.1rem + 2px); padding: 0.375rem 0.75rem; font-size: 0.9rem; + font-weight: 400; 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; } - .form-control::-ms-expand { - background-color: transparent; - border: 0; } - .form-control:focus { - color: #495057; - background-color: #fff; - border-color: #4dc9a5; - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(35, 115, 92, 0.25); } - .form-control::placeholder { - color: #6c757d; - opacity: 1; } - .form-control:disabled, .form-control[readonly] { - background-color: #e9ecef; - opacity: 1; } + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} -select.form-control:not([size]):not([multiple]) { - height: calc(2.1rem + 2px); } +@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: #7bd5bc; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(50, 159, 128, 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:focus::-ms-value { color: #495057; - background-color: #fff; } + background-color: #fff; +} .form-control-file, .form-control-range { display: block; - width: 100%; } + 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; } + line-height: 1.5; +} .col-form-label-lg { padding-top: calc(0.5rem + 1px); padding-bottom: calc(0.5rem + 1px); font-size: 1.125rem; - line-height: 1.5; } + line-height: 1.5; +} .col-form-label-sm { padding-top: calc(0.25rem + 1px); padding-bottom: calc(0.25rem + 1px); font-size: 0.7875rem; - line-height: 1.5; } + line-height: 1.5; +} .form-control-plaintext { display: block; @@ -1315,104 +1956,108 @@ select.form-control:focus::-ms-value { 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; } + border-width: 1px 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 { +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + height: calc(1.68125rem + 2px); padding: 0.25rem 0.5rem; font-size: 0.7875rem; line-height: 1.5; - border-radius: 0.2rem; } + 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.68125rem + 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 { +.form-control-lg { + height: calc(2.6875rem + 2px); padding: 0.5rem 1rem; font-size: 1.125rem; line-height: 1.5; - border-radius: 0.3rem; } + 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.6875rem + 2px); } +select.form-control[size], select.form-control[multiple] { + height: auto; +} + +textarea.form-control { + height: auto; +} .form-group { - margin-bottom: 1rem; } + margin-bottom: 1rem; +} .form-text { display: block; - margin-top: 0.25rem; } + 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; } + 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; } + 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; } + margin-left: -1.25rem; +} + +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} .form-check-label { - margin-bottom: 0; } + 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; } + 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; } + color: #28a745; +} .valid-tooltip { position: absolute; @@ -1420,76 +2065,122 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for z-index: 5; display: none; max-width: 100%; - padding: .5rem; + padding: 0.25rem 0.5rem; margin-top: .1rem; - font-size: .875rem; - line-height: 1; + font-size: 0.7875rem; + line-height: 1.5; color: #fff; - background-color: rgba(40, 167, 69, 0.8); - border-radius: .2rem; } + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0.25rem; +} -.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-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: 2.1rem; + background-repeat: no-repeat; + background-position: center right calc(2.1rem / 4); + background-size: calc(2.1rem / 2) calc(2.1rem / 2); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); +} + +.was-validated .form-control:valid:focus, .form-control.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 { + display: block; +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: 2.1rem; + background-position: top calc(2.1rem / 4) right calc(2.1rem / 4); +} + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: 3.325rem; + background: url("data:image/svg+xml,%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/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") no-repeat center right 1.75rem/1.05rem 1.05rem; +} + +.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 .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-control-file:valid ~ .valid-feedback, +.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, +.form-control-file.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; } + 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; } + 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; } + color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #28a745; +} .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; } + 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; } + border-color: #34ce57; + 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); } + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; +} .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; } + border-color: #28a745; +} .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; } + 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); } + border-color: #28a745; + 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; } + color: #dc3545; +} .invalid-tooltip { position: absolute; @@ -1497,590 +2188,865 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for z-index: 5; display: none; max-width: 100%; - padding: .5rem; + padding: 0.25rem 0.5rem; margin-top: .1rem; - font-size: .875rem; - line-height: 1; + font-size: 0.7875rem; + line-height: 1.5; color: #fff; - background-color: rgba(220, 53, 69, 0.8); - border-radius: .2rem; } + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} -.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-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: 2.1rem; + background-repeat: no-repeat; + background-position: center right calc(2.1rem / 4); + background-size: calc(2.1rem / 2) calc(2.1rem / 2); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); +} + +.was-validated .form-control:invalid:focus, .form-control.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 { + display: block; +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: 2.1rem; + background-position: top calc(2.1rem / 4) right calc(2.1rem / 4); +} + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: 3.325rem; + background: url("data:image/svg+xml,%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/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") no-repeat center right 1.75rem/1.05rem 1.05rem; +} + +.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 .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-control-file:invalid ~ .invalid-feedback, +.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, +.form-control-file.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; } + 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; } + 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; } + color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #dc3545; +} .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; } + 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; } + border-color: #e4606d; + 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); } + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; +} .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; } + border-color: #dc3545; +} .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; } + 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); } + border-color: #dc3545; + 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; - align-items: center; } + -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 { - width: 100%; } - @media (min-width: 576px) { - .form-inline label { - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 0; } - .form-inline .form-group { - display: flex; - flex: 0 0 auto; - flex-flow: row wrap; - 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 { - width: auto; } - .form-inline .form-check { - display: flex; - align-items: 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 { - align-items: center; - justify-content: center; } - .form-inline .custom-control-label { - margin-bottom: 0; } } + 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; + color: #212529; text-align: center; - white-space: nowrap; vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; user-select: none; + background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 0.9rem; 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; } - .btn:hover, .btn:focus { - text-decoration: none; } - .btn:focus, .btn.focus { - outline: 0; - box-shadow: 0 0 0 0.2rem rgba(35, 115, 92, 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; } + 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 { + color: #212529; + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(50, 159, 128, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer; +} a.btn.disabled, fieldset:disabled a.btn { - pointer-events: none; } + pointer-events: none; +} .btn-primary { color: #fff; background-color: #329f80; - border-color: #329f80; } - .btn-primary:hover { - color: #fff; - background-color: #1a5645; - border-color: #174c3d; } - .btn-primary:focus, .btn-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(35, 115, 92, 0.5); } - .btn-primary.disabled, .btn-primary:disabled { - color: #fff; - background-color: #329f80; - border-color: #329f80; } - .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, - .show > .btn-primary.dropdown-toggle { - color: #fff; - background-color: #174c3d; - border-color: #144235; } - .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(35, 115, 92, 0.5); } + border-color: #329f80; +} + +.btn-primary:hover { + color: #fff; + background-color: #298269; + border-color: #267861; +} + +.btn-primary:focus, .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(81, 173, 147, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #329f80; + border-color: #329f80; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #267861; + border-color: #236f59; +} + +.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(81, 173, 147, 0.5); +} .btn-secondary { color: #fff; background-color: #2284A6; - border-color: #2284A6; } - .btn-secondary:hover { - color: #fff; - background-color: #1b6b86; - border-color: #19627c; } - .btn-secondary:focus, .btn-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(34, 132, 166, 0.5); } - .btn-secondary.disabled, .btn-secondary:disabled { - color: #fff; - background-color: #2284A6; - border-color: #2284A6; } - .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, - .show > .btn-secondary.dropdown-toggle { - color: #fff; - background-color: #19627c; - border-color: #175a71; } - .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(34, 132, 166, 0.5); } + border-color: #2284A6; +} + +.btn-secondary:hover { + color: #fff; + background-color: #1b6b86; + border-color: #19627c; +} + +.btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(67, 150, 179, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #2284A6; + border-color: #2284A6; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #19627c; + border-color: #175a71; +} + +.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(67, 150, 179, 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); } + 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(72, 180, 97, 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(72, 180, 97, 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); } + 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(58, 176, 195, 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(58, 176, 195, 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); } + 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(222, 170, 12, 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(222, 170, 12, 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); } + 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(225, 83, 97, 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(225, 83, 97, 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); } + 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(216, 217, 219, 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(216, 217, 219, 0.5); +} .btn-dark { color: #fff; background-color: #0f3b21; - border-color: #0f3b21; } - .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: #0f3b21; - border-color: #0f3b21; } - .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); } + border-color: #0f3b21; +} + +.btn-dark:hover { + color: #fff; + background-color: #071d10; + border-color: #05120a; +} + +.btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(51, 88, 66, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #0f3b21; + border-color: #0f3b21; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #05120a; + border-color: #020805; +} + +.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(51, 88, 66, 0.5); +} .btn-outline-primary { + color: #329f80; + border-color: #329f80; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #329f80; + border-color: #329f80; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(50, 159, 128, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { color: #329f80; background-color: transparent; - background-image: none; - border-color: #329f80; } - .btn-outline-primary:hover { - color: #fff; - background-color: #329f80; - border-color: #329f80; } - .btn-outline-primary:focus, .btn-outline-primary.focus { - box-shadow: 0 0 0 0.2rem rgba(35, 115, 92, 0.5); } - .btn-outline-primary.disabled, .btn-outline-primary:disabled { - color: #329f80; - 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: #329f80; - border-color: #329f80; } - .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(35, 115, 92, 0.5); } +} + +.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: #329f80; + border-color: #329f80; +} + +.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(50, 159, 128, 0.5); +} .btn-outline-secondary { + color: #2284A6; + border-color: #2284A6; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #2284A6; + border-color: #2284A6; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(34, 132, 166, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { color: #2284A6; background-color: transparent; - background-image: none; - border-color: #2284A6; } - .btn-outline-secondary:hover { - color: #fff; - background-color: #2284A6; - border-color: #2284A6; } - .btn-outline-secondary:focus, .btn-outline-secondary.focus { - box-shadow: 0 0 0 0.2rem rgba(34, 132, 166, 0.5); } - .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { - color: #2284A6; - 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: #2284A6; - border-color: #2284A6; } - .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(34, 132, 166, 0.5); } +} + +.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: #2284A6; + border-color: #2284A6; +} + +.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(34, 132, 166, 0.5); +} .btn-outline-success { + color: #28a745; + 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; - 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-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; + 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; - 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-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; + 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; - 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-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; + 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; - 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-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; + 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; - 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-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: #0f3b21; + border-color: #0f3b21; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #0f3b21; + border-color: #0f3b21; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(15, 59, 33, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { color: #0f3b21; background-color: transparent; - background-image: none; - border-color: #0f3b21; } - .btn-outline-dark:hover { - color: #fff; - background-color: #0f3b21; - border-color: #0f3b21; } - .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: #0f3b21; - 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: #0f3b21; - border-color: #0f3b21; } - .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-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: #0f3b21; + border-color: #0f3b21; +} + +.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(15, 59, 33, 0.5); +} .btn-link { font-weight: 400; color: #329f80; - background-color: transparent; } - .btn-link:hover { - color: #11382d; - 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; } +} + +.btn-link:hover { + color: #206551; + text-decoration: underline; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; + 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.125rem; line-height: 1.5; - border-radius: 0.3rem; } + border-radius: 0.3rem; +} .btn-sm, .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.7875rem; line-height: 1.5; - border-radius: 0.2rem; } + border-radius: 0.2rem; +} .btn-block { display: block; - width: 100%; } - .btn-block + .btn-block { - margin-top: 0.5rem; } + 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%; } + width: 100%; +} .fade { + transition: opacity 0.15s linear; +} + +@media screen and (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { opacity: 0; - transition: opacity 0.15s linear; } - .fade.show { - opacity: 1; } +} -.collapse { - display: none; } - .collapse.show { - display: block; } - -tr.collapse.show { - display: table-row; } - -tbody.collapse.show { - display: table-row-group; } +.collapse:not(.show) { + display: none; +} .collapsing { position: relative; height: 0; overflow: hidden; - transition: height 0.35s ease; } + transition: height 0.35s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} .dropup, -.dropdown { - position: relative; } +.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; } + border-left: 0.3em solid transparent; +} .dropdown-toggle:empty::after { - margin-left: 0; } + margin-left: 0; +} .dropdown-menu { position: absolute; @@ -2099,85 +3065,172 @@ tbody.collapse.show { background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 0.25rem; } + border-radius: 0.25rem; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-right { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .dropdown-menu-md-right { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .dropdown-menu-lg-right { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .dropdown-menu-xl-right { + right: 0; + left: auto; + } +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; + } +} + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; + } +} + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; + } +} + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; + } +} .dropup .dropdown-menu { + top: auto; + bottom: 100%; margin-top: 0; - margin-bottom: 0.125rem; } + 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; } + border-left: 0.3em solid transparent; +} .dropup .dropdown-toggle:empty::after { - margin-left: 0; } + margin-left: 0; +} .dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; margin-top: 0; - margin-left: 0.125rem; } + 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; } + border-left: 0.3em solid; +} .dropright .dropdown-toggle:empty::after { - margin-left: 0; } + margin-left: 0; +} .dropright .dropdown-toggle::after { - vertical-align: 0; } + vertical-align: 0; +} .dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; margin-top: 0; - margin-right: 0.125rem; } + margin-right: 0.125rem; +} .dropleft .dropdown-toggle::after { display: inline-block; - width: 0; - height: 0; margin-left: 0.255em; vertical-align: 0.255em; - content: ""; } + content: ""; +} .dropleft .dropdown-toggle::after { - display: none; } + 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; } + border-bottom: 0.3em solid transparent; +} .dropleft .dropdown-toggle:empty::after { - margin-left: 0; } + margin-left: 0; +} .dropleft .dropdown-toggle::before { - vertical-align: 0; } + 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; } + border-top: 1px solid #e9ecef; +} .dropdown-item { display: block; @@ -2189,21 +3242,40 @@ tbody.collapse.show { 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: #329f80; } - .dropdown-item.disabled, .dropdown-item:disabled { - color: #6c757d; - background-color: transparent; } + border: 0; +} + +.dropdown-item:first-child { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.dropdown-item:last-child { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.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: #329f80; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; +} .dropdown-menu.show { - display: block; } + display: block; +} .dropdown-header { display: block; @@ -2211,174 +3283,259 @@ tbody.collapse.show { margin-bottom: 0; font-size: 0.7875rem; color: #6c757d; - white-space: nowrap; } + 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; - 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; } + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 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-toolbar { + display: -ms-flexbox; display: flex; + -ms-flex-wrap: wrap; flex-wrap: wrap; - justify-content: flex-start; } - .btn-toolbar .input-group { - width: auto; } + -ms-flex-pack: start; + justify-content: flex-start; +} -.btn-group > .btn:first-child { - margin-left: 0; } +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} .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; } + 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; } + border-bottom-left-radius: 0; +} .dropdown-toggle-split { padding-right: 0.5625rem; - padding-left: 0.5625rem; } - .dropdown-toggle-split::after { - margin-left: 0; } + 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; } + padding-left: 0.375rem; +} .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { padding-right: 0.75rem; - padding-left: 0.75rem; } + padding-left: 0.75rem; +} .btn-group-vertical { + -ms-flex-direction: column; flex-direction: column; + -ms-flex-align: start; align-items: flex-start; - 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; } + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.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; } + 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; - 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: flex; - align-items: center; } - .input-group > .custom-file:not(:last-child) .custom-file-label, - .input-group > .custom-file:not(:last-child) .custom-file-label::before { - 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::before { - border-top-left-radius: 0; - border-bottom-left-radius: 0; } + width: 100%; +} + +.input-group > .form-control, +.input-group > .form-control-plaintext, +.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 + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .form-control-plaintext + .form-control, +.input-group > .form-control-plaintext + .custom-select, +.input-group > .form-control-plaintext + .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:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; +} + +.input-group > .custom-file .custom-file-input:focus { + z-index: 4; +} + +.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 { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} .input-group-prepend, .input-group-append { - 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; } + display: -ms-flexbox; + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn:focus, +.input-group-append .btn:focus { + z-index: 3; +} + +.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; } + margin-right: -1px; +} .input-group-append { - margin-left: -1px; } + 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; @@ -2390,10 +3547,52 @@ tbody.collapse.show { 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; } + border-radius: 0.25rem; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(2.6875rem + 2px); +} + +.input-group-lg > .form-control, +.input-group-lg > .custom-select, +.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.125rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.68125rem + 2px); +} + +.input-group-sm > .form-control, +.input-group-sm > .custom-select, +.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.7875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; +} .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, @@ -2402,7 +3601,8 @@ tbody.collapse.show { .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; } + border-bottom-right-radius: 0; +} .input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text, @@ -2411,141 +3611,231 @@ tbody.collapse.show { .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; } + border-bottom-left-radius: 0; +} .custom-control { position: relative; display: block; - min-height: 1.5rem; - padding-left: 1.5rem; } + min-height: 1.35rem; + padding-left: 1.5rem; +} .custom-control-inline { + display: -ms-inline-flexbox; display: inline-flex; - margin-right: 1rem; } + 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: #329f80; } - .custom-control-input:focus ~ .custom-control-label::before { - box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(35, 115, 92, 0.25); } - .custom-control-input:active ~ .custom-control-label::before { - color: #fff; - background-color: #74d5b9; } - .custom-control-input:disabled ~ .custom-control-label { - color: #6c757d; } - .custom-control-input:disabled ~ .custom-control-label::before { - background-color: #e9ecef; } + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #329f80; + background-color: #329f80; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(50, 159, 128, 0.25); +} + +.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #7bd5bc; +} + +.custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #a2e2d0; + border-color: #a2e2d0; +} + +.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: ""; - 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%; } + position: relative; + margin-bottom: 0; + vertical-align: top; +} + +.custom-control-label::before { + position: absolute; + top: 0.175rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #fff; + border: #adb5bd solid 1px; +} + +.custom-control-label::after { + position: absolute; + top: 0.175rem; + left: -1.5rem; + 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: #329f80; } + border-radius: 0.25rem; +} .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"); } + background-image: url("data:image/svg+xml,%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: #329f80; } + border-color: #329f80; + background-color: #329f80; +} .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"); } + background-image: url("data:image/svg+xml,%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(35, 115, 92, 0.5); } + background-color: rgba(50, 159, 128, 0.5); +} .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { - background-color: rgba(35, 115, 92, 0.5); } + background-color: rgba(50, 159, 128, 0.5); +} .custom-radio .custom-control-label::before { - border-radius: 50%; } - -.custom-radio .custom-control-input:checked ~ .custom-control-label::before { - background-color: #329f80; } + border-radius: 50%; +} .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"); } + background-image: url("data:image/svg+xml,%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(35, 115, 92, 0.5); } + background-color: rgba(50, 159, 128, 0.5); +} + +.custom-switch { + padding-left: 2.25rem; +} + +.custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; +} + +.custom-switch .custom-control-label::after { + top: calc(0.175rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; + transition: transform 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; + transition: transform 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, -webkit-transform 0.15s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; + } +} + +.custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + -webkit-transform: translateX(0.75rem); + transform: translateX(0.75rem); +} + +.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(50, 159, 128, 0.5); +} .custom-select { display: inline-block; width: 100%; height: calc(2.1rem + 2px); padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-weight: 400; 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; + background: url("data:image/svg+xml,%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/8px 10px; + background-color: #fff; border: 1px solid #ced4da; border-radius: 0.25rem; - appearance: none; } - .custom-select:focus { - border-color: #4dc9a5; - outline: 0; - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(77, 201, 165, 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; } + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #7bd5bc; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(123, 213, 188, 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.68125rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 75%; } + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.7875rem; +} .custom-select-lg { height: calc(2.6875rem + 2px); - padding-top: 0.375rem; - padding-bottom: 0.375rem; - font-size: 125%; } + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.125rem; +} .custom-file { position: relative; display: inline-block; width: 100%; height: calc(2.1rem + 2px); - margin-bottom: 0; } + margin-bottom: 0; +} .custom-file-input { position: relative; @@ -2553,14 +3843,25 @@ tbody.collapse.show { width: 100%; height: calc(2.1rem + 2px); margin: 0; - opacity: 0; } - .custom-file-input:focus ~ .custom-file-control { - border-color: #4dc9a5; - box-shadow: 0 0 0 0.2rem rgba(35, 115, 92, 0.25); } - .custom-file-input:focus ~ .custom-file-control::before { - border-color: #4dc9a5; } - .custom-file-input:lang(en) ~ .custom-file-label::after { - content: "Browse"; } + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #7bd5bc; + box-shadow: 0 0 0 0.2rem rgba(50, 159, 128, 0.25); +} + +.custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); +} .custom-file-label { position: absolute; @@ -2570,102 +3871,320 @@ tbody.collapse.show { z-index: 1; height: calc(2.1rem + 2px); padding: 0.375rem 0.75rem; + font-weight: 400; 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.1rem + 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; } + border-radius: 0.25rem; +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: 2.1rem; + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-range { + width: 100%; + height: calc(1rem + 0.4rem); + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(50, 159, 128, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(50, 159, 128, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(50, 159, 128, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #329f80; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #a2e2d0; +} + +.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: #329f80; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #a2e2d0; +} + +.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; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #329f80; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media screen and (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background-color: #a2e2d0; +} + +.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; +} + +.custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; +} + +.custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-moz-range-track { + cursor: default; +} + +.custom-range:disabled::-ms-thumb { + background-color: #adb5bd; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: 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) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} .nav { + display: -ms-flexbox; display: flex; + -ms-flex-wrap: wrap; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; - list-style: none; } + 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; } + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} .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; } + 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; } + border-radius: 0.25rem; +} .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; - background-color: #329f80; } + background-color: #329f80; +} .nav-fill .nav-item { + -ms-flex: 1 1 auto; flex: 1 1 auto; - text-align: center; } + 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; } + text-align: center; +} .tab-content > .tab-pane { - display: none; } + display: none; +} .tab-content > .active { - display: block; } + 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: flex; - flex-wrap: wrap; - align-items: center; - 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; @@ -2674,32 +4193,47 @@ tbody.collapse.show { margin-right: 1rem; font-size: 1.125rem; line-height: inherit; - white-space: nowrap; } - .navbar-brand:hover, .navbar-brand:focus { - text-decoration: none; } + 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; } + 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; } + padding-bottom: 0.5rem; +} .navbar-collapse { + -ms-flex-preferred-size: 100%; flex-basis: 100%; + -ms-flex-positive: 1; flex-grow: 1; - align-items: center; } + -ms-flex-align: center; + align-items: center; +} .navbar-toggler { padding: 0.25rem 0.75rem; @@ -2707,11 +4241,16 @@ tbody.collapse.show { 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; } + 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; @@ -2720,295 +4259,410 @@ tbody.collapse.show { vertical-align: middle; content: ""; background: no-repeat center center; - background-size: 100% 100%; } + background-size: 100% 100%; +} @media (max-width: 575.98px) { .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid { padding-right: 0; - padding-left: 0; } } + padding-left: 0; + } +} @media (min-width: 576px) { .navbar-expand-sm { + -ms-flex-flow: row nowrap; flex-flow: row nowrap; - justify-content: flex-start; } - .navbar-expand-sm .navbar-nav { - flex-direction: row; } - .navbar-expand-sm .navbar-nav .dropdown-menu { - position: absolute; } - .navbar-expand-sm .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; } - .navbar-expand-sm .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; } - .navbar-expand-sm > .container, - .navbar-expand-sm > .container-fluid { - flex-wrap: nowrap; } - .navbar-expand-sm .navbar-collapse { - display: flex !important; - flex-basis: auto; } - .navbar-expand-sm .navbar-toggler { - display: none; } - .navbar-expand-sm .dropup .dropdown-menu { - top: auto; - bottom: 100%; } } + -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; } } + padding-left: 0; + } +} @media (min-width: 768px) { .navbar-expand-md { + -ms-flex-flow: row nowrap; flex-flow: row nowrap; - justify-content: flex-start; } - .navbar-expand-md .navbar-nav { - flex-direction: row; } - .navbar-expand-md .navbar-nav .dropdown-menu { - position: absolute; } - .navbar-expand-md .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; } - .navbar-expand-md .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; } - .navbar-expand-md > .container, - .navbar-expand-md > .container-fluid { - flex-wrap: nowrap; } - .navbar-expand-md .navbar-collapse { - display: flex !important; - flex-basis: auto; } - .navbar-expand-md .navbar-toggler { - display: none; } - .navbar-expand-md .dropup .dropdown-menu { - top: auto; - bottom: 100%; } } + -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; } } + padding-left: 0; + } +} @media (min-width: 992px) { .navbar-expand-lg { + -ms-flex-flow: row nowrap; flex-flow: row nowrap; - justify-content: flex-start; } - .navbar-expand-lg .navbar-nav { - flex-direction: row; } - .navbar-expand-lg .navbar-nav .dropdown-menu { - position: absolute; } - .navbar-expand-lg .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; } - .navbar-expand-lg .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; } - .navbar-expand-lg > .container, - .navbar-expand-lg > .container-fluid { - flex-wrap: nowrap; } - .navbar-expand-lg .navbar-collapse { - display: flex !important; - flex-basis: auto; } - .navbar-expand-lg .navbar-toggler { - display: none; } - .navbar-expand-lg .dropup .dropdown-menu { - top: auto; - bottom: 100%; } } + -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; } } + padding-left: 0; + } +} @media (min-width: 1200px) { .navbar-expand-xl { + -ms-flex-flow: row nowrap; flex-flow: row nowrap; - justify-content: flex-start; } - .navbar-expand-xl .navbar-nav { - flex-direction: row; } - .navbar-expand-xl .navbar-nav .dropdown-menu { - position: absolute; } - .navbar-expand-xl .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; } - .navbar-expand-xl .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; } - .navbar-expand-xl > .container, - .navbar-expand-xl > .container-fluid { - flex-wrap: nowrap; } - .navbar-expand-xl .navbar-collapse { - display: flex !important; - flex-basis: auto; } - .navbar-expand-xl .navbar-toggler { - display: none; } - .navbar-expand-xl .dropup .dropdown-menu { - top: auto; - bottom: 100%; } } + -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; - justify-content: flex-start; } - .navbar-expand > .container, - .navbar-expand > .container-fluid { - padding-right: 0; - padding-left: 0; } - .navbar-expand .navbar-nav { - flex-direction: row; } - .navbar-expand .navbar-nav .dropdown-menu { - position: absolute; } - .navbar-expand .navbar-nav .dropdown-menu-right { - right: 0; - left: auto; } - .navbar-expand .navbar-nav .nav-link { - padding-right: 0.5rem; - padding-left: 0.5rem; } - .navbar-expand > .container, - .navbar-expand > .container-fluid { - flex-wrap: nowrap; } - .navbar-expand .navbar-collapse { - display: flex !important; - flex-basis: auto; } - .navbar-expand .navbar-toggler { - display: none; } - .navbar-expand .dropup .dropdown-menu { - top: auto; - bottom: 100%; } + -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); } + 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); } + 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); } + 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); } + 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(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); } + background-image: url("data:image/svg+xml,%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); } + 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; } + 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); } + 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; } + color: #fff; +} .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.5); - border-color: rgba(255, 255, 255, 0.1); } + 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"); } + background-image: url("data:image/svg+xml,%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; } + 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; } + 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; } + padding: 1.25rem; +} .card-title { - margin-bottom: 0.75rem; } + margin-bottom: 0.75rem; +} .card-subtitle { margin-top: -0.375rem; - margin-bottom: 0; } + margin-bottom: 0; +} .card-text:last-child { - margin-bottom: 0; } + margin-bottom: 0; +} .card-link:hover { - text-decoration: none; } + text-decoration: none; +} .card-link + .card-link { - margin-left: 1.25rem; } + margin-left: 1.25rem; +} .card-header { padding: 0.75rem 1.25rem; margin-bottom: 0; + color: inherit; 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; } + 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); } + 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; } + border-bottom: 0; +} .card-header-pills { margin-right: -0.625rem; - margin-left: -0.625rem; } + margin-left: -0.625rem; +} .card-img-overlay { position: absolute; @@ -3016,131 +4670,221 @@ tbody.collapse.show { right: 0; bottom: 0; left: 0; - padding: 1.25rem; } + padding: 1.25rem; +} .card-img { width: 100%; - border-radius: calc(0.25rem - 1px); } + 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); } + 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); } + border-bottom-left-radius: calc(0.25rem - 1px); +} .card-deck { + display: -ms-flexbox; display: flex; - flex-direction: column; } + -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 { - margin-bottom: 15px; } - @media (min-width: 576px) { - .card-deck { - flex-flow: row wrap; - margin-right: -15px; - margin-left: -15px; } - .card-deck .card { - display: flex; - flex: 1 0 0%; - flex-direction: column; - margin-right: 15px; - margin-bottom: 0; - margin-left: 15px; } } + 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; - flex-direction: column; } + -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 { - margin-bottom: 15px; } - @media (min-width: 576px) { - .card-group { - flex-flow: row wrap; } - .card-group > .card { - 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; } } + -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; } + margin-bottom: 0.75rem; +} @media (min-width: 576px) { .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; column-count: 3; - column-gap: 1.25rem; } - .card-columns .card { - display: inline-block; - width: 100%; } } + -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 { + overflow: hidden; +} + +.accordion .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; +} + +.accordion .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + 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; +} + +.accordion .card .card-header { + margin-bottom: -1px; +} .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; } + border-radius: 0.25rem; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} .breadcrumb-item + .breadcrumb-item::before { display: inline-block; padding-right: 0.5rem; - padding-left: 0.5rem; color: #6c757d; - content: "/"; } + content: "/"; +} .breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: underline; } + text-decoration: underline; +} .breadcrumb-item + .breadcrumb-item:hover::before { - text-decoration: none; } + text-decoration: none; +} .breadcrumb-item.active { - color: #6c757d; } + color: #6c757d; +} .pagination { + display: -ms-flexbox; display: flex; padding-left: 0; list-style: none; - border-radius: 0.25rem; } + border-radius: 0.25rem; +} .page-link { position: relative; @@ -3150,66 +4894,84 @@ tbody.collapse.show { line-height: 1.25; color: #329f80; background-color: #fff; - border: 1px solid #dee2e6; } - .page-link:hover { - color: #11382d; - 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(35, 115, 92, 0.25); } - .page-link:not(:disabled):not(.disabled) { - cursor: pointer; } + border: 1px solid #dee2e6; +} + +.page-link:hover { + z-index: 2; + color: #206551; + 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(50, 159, 128, 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; } + border-bottom-left-radius: 0.25rem; +} .page-item:last-child .page-link { border-top-right-radius: 0.25rem; - border-bottom-right-radius: 0.25rem; } + border-bottom-right-radius: 0.25rem; +} .page-item.active .page-link { z-index: 1; color: #fff; background-color: #329f80; - border-color: #329f80; } + border-color: #329f80; +} .page-item.disabled .page-link { color: #6c757d; pointer-events: none; cursor: auto; background-color: #fff; - border-color: #dee2e6; } + border-color: #dee2e6; +} .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.125rem; - line-height: 1.5; } + line-height: 1.5; +} .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.3rem; - border-bottom-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; } + border-bottom-right-radius: 0.3rem; +} .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.7875rem; - line-height: 1.5; } + line-height: 1.5; +} .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; - border-bottom-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; } + border-bottom-right-radius: 0.2rem; +} .badge { display: inline-block; @@ -3220,245 +4982,362 @@ tbody.collapse.show { text-align: center; white-space: nowrap; vertical-align: baseline; - border-radius: 0.25rem; } - .badge:empty { - display: none; } + border-radius: 0.25rem; +} + +a.badge:hover, a.badge:focus { + text-decoration: none; +} + +.badge:empty { + display: none; +} .btn .badge { position: relative; - top: -1px; } + top: -1px; +} .badge-pill { padding-right: 0.6em; padding-left: 0.6em; - border-radius: 10rem; } + border-radius: 10rem; +} .badge-primary { color: #fff; - background-color: #329f80; } - .badge-primary[href]:hover, .badge-primary[href]:focus { - color: #fff; - text-decoration: none; - background-color: #174c3d; } + background-color: #329f80; +} + +a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #267861; +} .badge-secondary { color: #fff; - background-color: #2284A6; } - .badge-secondary[href]:hover, .badge-secondary[href]:focus { - color: #fff; - text-decoration: none; - background-color: #19627c; } + background-color: #2284A6; +} + +a.badge-secondary:hover, a.badge-secondary:focus { + color: #fff; + background-color: #19627c; +} .badge-success { color: #fff; - background-color: #28a745; } - .badge-success[href]:hover, .badge-success[href]:focus { - color: #fff; - text-decoration: none; - background-color: #1e7e34; } + background-color: #28a745; +} + +a.badge-success:hover, a.badge-success:focus { + color: #fff; + 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; } + background-color: #17a2b8; +} + +a.badge-info:hover, a.badge-info:focus { + color: #fff; + 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; } + background-color: #ffc107; +} + +a.badge-warning:hover, a.badge-warning:focus { + color: #212529; + 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; } + background-color: #dc3545; +} + +a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + 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; } + background-color: #f8f9fa; +} + +a.badge-light:hover, a.badge-light:focus { + color: #212529; + background-color: #dae0e5; +} .badge-dark { color: #fff; - background-color: #0f3b21; } - .badge-dark[href]:hover, .badge-dark[href]:focus { - color: #fff; - text-decoration: none; - background-color: #1d2124; } + background-color: #0f3b21; +} + +a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #05120a; +} .jumbotron { padding: 2rem 1rem; margin-bottom: 2rem; background-color: #e9ecef; - border-radius: 0.3rem; } - @media (min-width: 576px) { - .jumbotron { - padding: 4rem 2rem; } } + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} .jumbotron-fluid { padding-right: 0; padding-left: 0; - border-radius: 0; } + border-radius: 0; +} .alert { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 1px solid transparent; - border-radius: 0.25rem; } + border-radius: 0.25rem; +} .alert-heading { - color: inherit; } + color: inherit; +} .alert-link { - font-weight: 700; } + font-weight: 700; +} .alert-dismissible { - padding-right: 3.85rem; } - .alert-dismissible .close { - position: absolute; - top: 0; - right: 0; - padding: 0.75rem 1.25rem; - color: inherit; } + padding-right: 3.85rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} .alert-primary { - color: #123c30; - background-color: #d3e3de; - border-color: #c1d8d1; } - .alert-primary hr { - border-top-color: #b1cec5; } - .alert-primary .alert-link { - color: #061511; } + color: #1a5343; + background-color: #d6ece6; + border-color: #c6e4db; +} + +.alert-primary hr { + border-top-color: #b5dcd0; +} + +.alert-primary .alert-link { + color: #0e2c24; +} .alert-secondary { color: #124556; background-color: #d3e6ed; - border-color: #c1dde6; } - .alert-secondary hr { - border-top-color: #afd3df; } - .alert-secondary .alert-link { - color: #09232c; } + border-color: #c1dde6; +} + +.alert-secondary hr { + border-top-color: #afd3df; +} + +.alert-secondary .alert-link { + color: #09232c; +} .alert-success { color: #155724; background-color: #d4edda; - border-color: #c3e6cb; } - .alert-success hr { - border-top-color: #b1dfbb; } - .alert-success .alert-link { - color: #0b2e13; } + 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; } + 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; } + 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; } + 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; } + 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; } + color: #081f11; + background-color: #cfd8d3; + border-color: #bcc8c1; +} + +.alert-dark hr { + border-top-color: #aebdb4; +} + +.alert-dark .alert-link { + color: black; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} @keyframes progress-bar-stripes { from { - background-position: 1rem 0; } + background-position: 1rem 0; + } to { - background-position: 0 0; } } + background-position: 0 0; + } +} .progress { + display: -ms-flexbox; display: flex; height: 1rem; overflow: hidden; font-size: 0.675rem; background-color: #e9ecef; - border-radius: 0.25rem; } + 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: #329f80; - transition: width 0.6s ease; } + 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; } + background-size: 1rem 1rem; +} .progress-bar-animated { - animation: progress-bar-stripes 1s linear infinite; } + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} .media { + display: -ms-flexbox; display: flex; - align-items: flex-start; } + -ms-flex-align: start; + align-items: flex-start; +} .media-body { - flex: 1; } + -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; } + 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; } + 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; @@ -3466,124 +5345,184 @@ tbody.collapse.show { 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: #329f80; - border-color: #329f80; } + 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; + pointer-events: none; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #329f80; + border-color: #329f80; +} .list-group-flush .list-group-item { border-right: 0; border-left: 0; - border-radius: 0; } + border-radius: 0; +} + +.list-group-flush .list-group-item:last-child { + margin-bottom: -1px; +} .list-group-flush:first-child .list-group-item:first-child { - border-top: 0; } + border-top: 0; +} .list-group-flush:last-child .list-group-item:last-child { - border-bottom: 0; } + margin-bottom: 0; + border-bottom: 0; +} .list-group-item-primary { - color: #123c30; - background-color: #c1d8d1; } - .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { - color: #123c30; - background-color: #b1cec5; } - .list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #123c30; - border-color: #123c30; } + color: #1a5343; + background-color: #c6e4db; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #1a5343; + background-color: #b5dcd0; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #1a5343; + border-color: #1a5343; +} .list-group-item-secondary { color: #124556; - background-color: #c1dde6; } - .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { - color: #124556; - background-color: #afd3df; } - .list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #124556; - border-color: #124556; } + background-color: #c1dde6; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #124556; + background-color: #afd3df; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #124556; + border-color: #124556; +} .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; } + 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; } + 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; } + 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; } + 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; } + 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; } + color: #081f11; + background-color: #bcc8c1; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #081f11; + background-color: #aebdb4; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #081f11; + border-color: #081f11; +} .close { float: right; @@ -3592,56 +5531,148 @@ tbody.collapse.show { 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; } + opacity: .5; +} + +.close:hover { + color: #000; + text-decoration: none; +} + +.close:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; +} button.close { padding: 0; background-color: transparent; border: 0; - -webkit-appearance: none; } + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +a.close.disabled { + pointer-events: none; +} + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 0.25rem; + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + opacity: 0; +} + +.toast:not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast.showing { + opacity: 1; +} + +.toast.show { + display: block; + opacity: 1; +} + +.toast.hide { + display: none; +} + +.toast-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.toast-body { + padding: 0.75rem; +} .modal-open { - overflow: hidden; } + overflow: hidden; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} .modal { position: fixed; top: 0; - right: 0; - bottom: 0; left: 0; z-index: 1050; display: none; + width: 100%; + height: 100%; overflow: hidden; - outline: 0; } - .modal-open .modal { - overflow-x: hidden; - overflow-y: auto; } + outline: 0; +} .modal-dialog { position: relative; width: auto; margin: 0.5rem; - pointer-events: none; } + 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, -50px); + transform: translate(0, -50px); +} + +@media screen and (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { - transition: transform 0.3s ease-out; - transform: translate(0, -25%); } - .modal.show .modal-dialog { - transform: translate(0, 0); } + transition: none; + } +} + +.modal.show .modal-dialog { + -webkit-transform: none; + transform: none; +} .modal-dialog-centered { + display: -ms-flexbox; display: flex; + -ms-flex-align: center; align-items: center; - min-height: calc(100% - (0.5rem * 2)); } + min-height: calc(100% - (0.5rem * 2)); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - (0.5rem * 2)); + content: ""; +} .modal-content { position: relative; + display: -ms-flexbox; display: flex; + -ms-flex-direction: column; flex-direction: column; width: 100%; pointer-events: auto; @@ -3649,79 +5680,121 @@ button.close { background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; - outline: 0; } + 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; } + width: 100vw; + height: 100vh; + 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; + padding: 1rem 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; } + border-top-right-radius: 0.3rem; +} + +.modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; +} .modal-title { margin-bottom: 0; - line-height: 1.5; } + line-height: 1.5; +} .modal-body { position: relative; + -ms-flex: 1 1 auto; flex: 1 1 auto; - padding: 1rem; } + 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; } + border-top: 1px solid #e9ecef; + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.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; } + overflow: scroll; +} @media (min-width: 576px) { .modal-dialog { max-width: 500px; - margin: 1.75rem auto; } + margin: 1.75rem auto; + } .modal-dialog-centered { - min-height: calc(100% - (1.75rem * 2)); } + min-height: calc(100% - (1.75rem * 2)); + } + .modal-dialog-centered::before { + height: calc(100vh - (1.75rem * 2)); + } .modal-sm { - max-width: 300px; } } + max-width: 300px; + } +} @media (min-width: 992px) { - .modal-lg { - max-width: 800px; } } + .modal-lg, + .modal-xl { + max-width: 800px; + } +} + +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} .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-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -3737,59 +5810,86 @@ button.close { line-break: auto; font-size: 0.7875rem; 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; } + 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; } + 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; } + 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; } + 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; } + 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; @@ -3797,7 +5897,8 @@ button.close { color: #fff; text-align: center; background-color: #000; - border-radius: 0.25rem; } + border-radius: 0.25rem; +} .popover { position: absolute; @@ -3806,7 +5907,7 @@ button.close { 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-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-style: normal; font-weight: 400; line-height: 1.5; @@ -3825,102 +5926,145 @@ button.close { 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; } + 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; } + 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; } + 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; } + 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; } + 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; @@ -3930,90 +6074,146 @@ button.close { 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; } + border-top-right-radius: calc(0.3rem - 1px); +} + +.popover-header:empty { + display: none; +} .popover-body { padding: 0.5rem 0.75rem; - color: #212529; } + color: #212529; +} .carousel { - position: relative; } + position: relative; +} + +.carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; +} .carousel-inner { position: relative; width: 100%; - overflow: hidden; } + overflow: hidden; +} + +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} .carousel-item { position: relative; display: none; - align-items: center; + float: left; width: 100%; - transition: transform 0.6s ease; + margin-right: -100%; + -webkit-backface-visibility: hidden; backface-visibility: hidden; - perspective: 1000px; } + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; +} + +@media screen and (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} .carousel-item.active, .carousel-item-next, .carousel-item-prev { - display: block; } + display: block; +} -.carousel-item-next, -.carousel-item-prev { - position: absolute; - top: 0; } - -.carousel-item-next.carousel-item-left, -.carousel-item-prev.carousel-item-right { - transform: translateX(0); } - @supports (transform-style: preserve-3d) { - .carousel-item-next.carousel-item-left, - .carousel-item-prev.carousel-item-right { - transform: translate3d(0, 0, 0); } } - -.carousel-item-next, +.carousel-item-next:not(.carousel-item-left), .active.carousel-item-right { - transform: translateX(100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-next, - .active.carousel-item-right { - transform: translate3d(100%, 0, 0); } } + -webkit-transform: translateX(100%); + transform: translateX(100%); +} -.carousel-item-prev, +.carousel-item-prev:not(.carousel-item-right), .active.carousel-item-left { - transform: translateX(-100%); } - @supports (transform-style: preserve-3d) { - .carousel-item-prev, - .active.carousel-item-left { - transform: translate3d(-100%, 0, 0); } } + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + -webkit-transform: none; + transform: none; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + transition: 0s 0.6s opacity; +} + +@media screen and (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + transition: none; + } +} .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; + z-index: 1; + 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; } + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} .carousel-control-prev { - left: 0; } + left: 0; +} .carousel-control-next { - right: 0; } + right: 0; +} .carousel-control-prev-icon, .carousel-control-next-icon { @@ -4021,53 +6221,60 @@ button.close { width: 20px; height: 20px; background: transparent no-repeat center center; - background-size: 100% 100%; } + 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"); } + background-image: url("data:image/svg+xml,%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"); } + background-image: url("data:image/svg+xml,%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; + bottom: 0; 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; } + list-style: none; +} + +.carousel-indicators li { + box-sizing: content-box; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; +} + +@media screen and (prefers-reduced-motion: reduce) { .carousel-indicators li { - position: relative; - 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; } + transition: none; + } +} + +.carousel-indicators .active { + opacity: 1; +} .carousel-caption { position: absolute; @@ -4078,746 +6285,1388 @@ button.close { padding-top: 20px; padding-bottom: 20px; color: #fff; - text-align: center; } + text-align: center; +} + +@-webkit-keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: spinner-border .75s linear infinite; + animation: spinner-border .75s linear infinite; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +@keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: spinner-grow .75s linear infinite; + animation: spinner-grow .75s linear infinite; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} .align-baseline { - vertical-align: baseline !important; } + vertical-align: baseline !important; +} .align-top { - vertical-align: top !important; } + vertical-align: top !important; +} .align-middle { - vertical-align: middle !important; } + vertical-align: middle !important; +} .align-bottom { - vertical-align: bottom !important; } + vertical-align: bottom !important; +} .align-text-bottom { - vertical-align: text-bottom !important; } + vertical-align: text-bottom !important; +} .align-text-top { - vertical-align: text-top !important; } + vertical-align: text-top !important; +} .bg-primary { - background-color: #329f80 !important; } + background-color: #329f80 !important; +} a.bg-primary:hover, a.bg-primary:focus, button.bg-primary:hover, button.bg-primary:focus { - background-color: #174c3d !important; } + background-color: #267861 !important; +} .bg-secondary { - background-color: #2284A6 !important; } + background-color: #2284A6 !important; +} a.bg-secondary:hover, a.bg-secondary:focus, button.bg-secondary:hover, button.bg-secondary:focus { - background-color: #19627c !important; } + background-color: #19627c !important; +} .bg-success { - background-color: #28a745 !important; } + background-color: #28a745 !important; +} a.bg-success:hover, a.bg-success:focus, button.bg-success:hover, button.bg-success:focus { - background-color: #1e7e34 !important; } + background-color: #1e7e34 !important; +} .bg-info { - background-color: #17a2b8 !important; } + background-color: #17a2b8 !important; +} a.bg-info:hover, a.bg-info:focus, button.bg-info:hover, button.bg-info:focus { - background-color: #117a8b !important; } + background-color: #117a8b !important; +} .bg-warning { - background-color: #ffc107 !important; } + background-color: #ffc107 !important; +} a.bg-warning:hover, a.bg-warning:focus, button.bg-warning:hover, button.bg-warning:focus { - background-color: #d39e00 !important; } + background-color: #d39e00 !important; +} .bg-danger { - background-color: #dc3545 !important; } + background-color: #dc3545 !important; +} a.bg-danger:hover, a.bg-danger:focus, button.bg-danger:hover, button.bg-danger:focus { - background-color: #bd2130 !important; } + background-color: #bd2130 !important; +} .bg-light { - background-color: #f8f9fa !important; } + background-color: #f8f9fa !important; +} a.bg-light:hover, a.bg-light:focus, button.bg-light:hover, button.bg-light:focus { - background-color: #dae0e5 !important; } + background-color: #dae0e5 !important; +} .bg-dark { - background-color: #0f3b21 !important; } + background-color: #0f3b21 !important; +} a.bg-dark:hover, a.bg-dark:focus, button.bg-dark:hover, button.bg-dark:focus { - background-color: #1d2124 !important; } + background-color: #05120a !important; +} .bg-white { - background-color: #fff !important; } + background-color: #fff !important; +} .bg-transparent { - background-color: transparent !important; } + background-color: transparent !important; +} .border { - border: 1px solid #dee2e6 !important; } + border: 1px solid #dee2e6 !important; +} .border-top { - border-top: 1px solid #dee2e6 !important; } + border-top: 1px solid #dee2e6 !important; +} .border-right { - border-right: 1px solid #dee2e6 !important; } + border-right: 1px solid #dee2e6 !important; +} .border-bottom { - border-bottom: 1px solid #dee2e6 !important; } + border-bottom: 1px solid #dee2e6 !important; +} .border-left { - border-left: 1px solid #dee2e6 !important; } + border-left: 1px solid #dee2e6 !important; +} .border-0 { - border: 0 !important; } + border: 0 !important; +} .border-top-0 { - border-top: 0 !important; } + border-top: 0 !important; +} .border-right-0 { - border-right: 0 !important; } + border-right: 0 !important; +} .border-bottom-0 { - border-bottom: 0 !important; } + border-bottom: 0 !important; +} .border-left-0 { - border-left: 0 !important; } + border-left: 0 !important; +} .border-primary { - border-color: #329f80 !important; } + border-color: #329f80 !important; +} .border-secondary { - border-color: #2284A6 !important; } + border-color: #2284A6 !important; +} .border-success { - border-color: #28a745 !important; } + border-color: #28a745 !important; +} .border-info { - border-color: #17a2b8 !important; } + border-color: #17a2b8 !important; +} .border-warning { - border-color: #ffc107 !important; } + border-color: #ffc107 !important; +} .border-danger { - border-color: #dc3545 !important; } + border-color: #dc3545 !important; +} .border-light { - border-color: #f8f9fa !important; } + border-color: #f8f9fa !important; +} .border-dark { - border-color: #0f3b21 !important; } + border-color: #0f3b21 !important; +} .border-white { - border-color: #fff !important; } + border-color: #fff !important; +} .rounded { - border-radius: 0.25rem !important; } + border-radius: 0.25rem !important; +} .rounded-top { border-top-left-radius: 0.25rem !important; - border-top-right-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; } + border-bottom-right-radius: 0.25rem !important; +} .rounded-bottom { border-bottom-right-radius: 0.25rem !important; - border-bottom-left-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; } + border-bottom-left-radius: 0.25rem !important; +} .rounded-circle { - border-radius: 50% !important; } + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: 50rem !important; +} .rounded-0 { - border-radius: 0 !important; } + border-radius: 0 !important; +} .clearfix::after { display: block; clear: both; - content: ""; } + content: ""; +} .d-none { - display: none !important; } + display: none !important; +} .d-inline { - display: inline !important; } + display: inline !important; +} .d-inline-block { - display: inline-block !important; } + display: inline-block !important; +} .d-block { - display: block !important; } + display: block !important; +} .d-table { - display: table !important; } + display: table !important; +} .d-table-row { - display: table-row !important; } + display: table-row !important; +} .d-table-cell { - display: table-cell !important; } + display: table-cell !important; +} .d-flex { - display: flex !important; } + display: -ms-flexbox !important; + display: flex !important; +} .d-inline-flex { - display: inline-flex !important; } + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} @media (min-width: 576px) { .d-sm-none { - display: none !important; } + display: none !important; + } .d-sm-inline { - display: inline !important; } + display: inline !important; + } .d-sm-inline-block { - display: inline-block !important; } + display: inline-block !important; + } .d-sm-block { - display: block !important; } + display: block !important; + } .d-sm-table { - display: table !important; } + display: table !important; + } .d-sm-table-row { - display: table-row !important; } + display: table-row !important; + } .d-sm-table-cell { - display: table-cell !important; } + display: table-cell !important; + } .d-sm-flex { - display: flex !important; } + display: -ms-flexbox !important; + display: flex !important; + } .d-sm-inline-flex { - display: inline-flex !important; } } + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} @media (min-width: 768px) { .d-md-none { - display: none !important; } + display: none !important; + } .d-md-inline { - display: inline !important; } + display: inline !important; + } .d-md-inline-block { - display: inline-block !important; } + display: inline-block !important; + } .d-md-block { - display: block !important; } + display: block !important; + } .d-md-table { - display: table !important; } + display: table !important; + } .d-md-table-row { - display: table-row !important; } + display: table-row !important; + } .d-md-table-cell { - display: table-cell !important; } + display: table-cell !important; + } .d-md-flex { - display: flex !important; } + display: -ms-flexbox !important; + display: flex !important; + } .d-md-inline-flex { - display: inline-flex !important; } } + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} @media (min-width: 992px) { .d-lg-none { - display: none !important; } + display: none !important; + } .d-lg-inline { - display: inline !important; } + display: inline !important; + } .d-lg-inline-block { - display: inline-block !important; } + display: inline-block !important; + } .d-lg-block { - display: block !important; } + display: block !important; + } .d-lg-table { - display: table !important; } + display: table !important; + } .d-lg-table-row { - display: table-row !important; } + display: table-row !important; + } .d-lg-table-cell { - display: table-cell !important; } + display: table-cell !important; + } .d-lg-flex { - display: flex !important; } + display: -ms-flexbox !important; + display: flex !important; + } .d-lg-inline-flex { - display: inline-flex !important; } } + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} @media (min-width: 1200px) { .d-xl-none { - display: none !important; } + display: none !important; + } .d-xl-inline { - display: inline !important; } + display: inline !important; + } .d-xl-inline-block { - display: inline-block !important; } + display: inline-block !important; + } .d-xl-block { - display: block !important; } + display: block !important; + } .d-xl-table { - display: table !important; } + display: table !important; + } .d-xl-table-row { - display: table-row !important; } + display: table-row !important; + } .d-xl-table-cell { - display: table-cell !important; } + display: table-cell !important; + } .d-xl-flex { - display: flex !important; } + display: -ms-flexbox !important; + display: flex !important; + } .d-xl-inline-flex { - display: inline-flex !important; } } + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} @media print { .d-print-none { - display: none !important; } + display: none !important; + } .d-print-inline { - display: inline !important; } + display: inline !important; + } .d-print-inline-block { - display: inline-block !important; } + display: inline-block !important; + } .d-print-block { - display: block !important; } + display: block !important; + } .d-print-table { - display: table !important; } + display: table !important; + } .d-print-table-row { - display: table-row !important; } + display: table-row !important; + } .d-print-table-cell { - display: table-cell !important; } + display: table-cell !important; + } .d-print-flex { - display: flex !important; } + display: -ms-flexbox !important; + display: flex !important; + } .d-print-inline-flex { - display: inline-flex !important; } } + 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; } + 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.85714%; } + padding-top: 42.857143%; +} .embed-responsive-16by9::before { - padding-top: 56.25%; } + padding-top: 56.25%; +} -.embed-responsive-4by3::before { - padding-top: 75%; } +.embed-responsive-3by4::before { + padding-top: 133.333333%; +} .embed-responsive-1by1::before { - padding-top: 100%; } + padding-top: 100%; +} .flex-row { - flex-direction: row !important; } + -ms-flex-direction: row !important; + flex-direction: row !important; +} .flex-column { - flex-direction: column !important; } + -ms-flex-direction: column !important; + flex-direction: column !important; +} .flex-row-reverse { - flex-direction: row-reverse !important; } + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} .flex-column-reverse { - flex-direction: column-reverse !important; } + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} .flex-wrap { - flex-wrap: wrap !important; } + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} .flex-nowrap { - flex-wrap: nowrap !important; } + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} .flex-wrap-reverse { - flex-wrap: wrap-reverse !important; } + -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 { - justify-content: flex-start !important; } + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} .justify-content-end { - justify-content: flex-end !important; } + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} .justify-content-center { - justify-content: center !important; } + -ms-flex-pack: center !important; + justify-content: center !important; +} .justify-content-between { - justify-content: space-between !important; } + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} .justify-content-around { - justify-content: space-around !important; } + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} .align-items-start { - align-items: flex-start !important; } + -ms-flex-align: start !important; + align-items: flex-start !important; +} .align-items-end { - align-items: flex-end !important; } + -ms-flex-align: end !important; + align-items: flex-end !important; +} .align-items-center { - align-items: center !important; } + -ms-flex-align: center !important; + align-items: center !important; +} .align-items-baseline { - align-items: baseline !important; } + -ms-flex-align: baseline !important; + align-items: baseline !important; +} .align-items-stretch { - align-items: stretch !important; } + -ms-flex-align: stretch !important; + align-items: stretch !important; +} .align-content-start { - align-content: flex-start !important; } + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} .align-content-end { - align-content: flex-end !important; } + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} .align-content-center { - align-content: center !important; } + -ms-flex-line-pack: center !important; + align-content: center !important; +} .align-content-between { - align-content: space-between !important; } + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} .align-content-around { - align-content: space-around !important; } + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} .align-content-stretch { - align-content: stretch !important; } + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} .align-self-auto { - align-self: auto !important; } + -ms-flex-item-align: auto !important; + align-self: auto !important; +} .align-self-start { - align-self: flex-start !important; } + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} .align-self-end { - align-self: flex-end !important; } + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} .align-self-center { - align-self: center !important; } + -ms-flex-item-align: center !important; + align-self: center !important; +} .align-self-baseline { - align-self: baseline !important; } + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} .align-self-stretch { - align-self: stretch !important; } + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} @media (min-width: 576px) { .flex-sm-row { - flex-direction: row !important; } + -ms-flex-direction: row !important; + flex-direction: row !important; + } .flex-sm-column { - flex-direction: column !important; } + -ms-flex-direction: column !important; + flex-direction: column !important; + } .flex-sm-row-reverse { - flex-direction: row-reverse !important; } + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } .flex-sm-column-reverse { - flex-direction: column-reverse !important; } + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } .flex-sm-wrap { - flex-wrap: wrap !important; } + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } .flex-sm-nowrap { - flex-wrap: nowrap !important; } + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; } + -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 { - justify-content: flex-start !important; } + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } .justify-content-sm-end { - justify-content: flex-end !important; } + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } .justify-content-sm-center { - justify-content: center !important; } + -ms-flex-pack: center !important; + justify-content: center !important; + } .justify-content-sm-between { - justify-content: space-between !important; } + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } .justify-content-sm-around { - justify-content: space-around !important; } + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } .align-items-sm-start { - align-items: flex-start !important; } + -ms-flex-align: start !important; + align-items: flex-start !important; + } .align-items-sm-end { - align-items: flex-end !important; } + -ms-flex-align: end !important; + align-items: flex-end !important; + } .align-items-sm-center { - align-items: center !important; } + -ms-flex-align: center !important; + align-items: center !important; + } .align-items-sm-baseline { - align-items: baseline !important; } + -ms-flex-align: baseline !important; + align-items: baseline !important; + } .align-items-sm-stretch { - align-items: stretch !important; } + -ms-flex-align: stretch !important; + align-items: stretch !important; + } .align-content-sm-start { - align-content: flex-start !important; } + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } .align-content-sm-end { - align-content: flex-end !important; } + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } .align-content-sm-center { - align-content: center !important; } + -ms-flex-line-pack: center !important; + align-content: center !important; + } .align-content-sm-between { - align-content: space-between !important; } + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } .align-content-sm-around { - align-content: space-around !important; } + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } .align-content-sm-stretch { - align-content: stretch !important; } + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } .align-self-sm-auto { - align-self: auto !important; } + -ms-flex-item-align: auto !important; + align-self: auto !important; + } .align-self-sm-start { - align-self: flex-start !important; } + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } .align-self-sm-end { - align-self: flex-end !important; } + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } .align-self-sm-center { - align-self: center !important; } + -ms-flex-item-align: center !important; + align-self: center !important; + } .align-self-sm-baseline { - align-self: baseline !important; } + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } .align-self-sm-stretch { - align-self: stretch !important; } } + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} @media (min-width: 768px) { .flex-md-row { - flex-direction: row !important; } + -ms-flex-direction: row !important; + flex-direction: row !important; + } .flex-md-column { - flex-direction: column !important; } + -ms-flex-direction: column !important; + flex-direction: column !important; + } .flex-md-row-reverse { - flex-direction: row-reverse !important; } + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } .flex-md-column-reverse { - flex-direction: column-reverse !important; } + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } .flex-md-wrap { - flex-wrap: wrap !important; } + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } .flex-md-nowrap { - flex-wrap: nowrap !important; } + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; } + -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 { - justify-content: flex-start !important; } + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } .justify-content-md-end { - justify-content: flex-end !important; } + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } .justify-content-md-center { - justify-content: center !important; } + -ms-flex-pack: center !important; + justify-content: center !important; + } .justify-content-md-between { - justify-content: space-between !important; } + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } .justify-content-md-around { - justify-content: space-around !important; } + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } .align-items-md-start { - align-items: flex-start !important; } + -ms-flex-align: start !important; + align-items: flex-start !important; + } .align-items-md-end { - align-items: flex-end !important; } + -ms-flex-align: end !important; + align-items: flex-end !important; + } .align-items-md-center { - align-items: center !important; } + -ms-flex-align: center !important; + align-items: center !important; + } .align-items-md-baseline { - align-items: baseline !important; } + -ms-flex-align: baseline !important; + align-items: baseline !important; + } .align-items-md-stretch { - align-items: stretch !important; } + -ms-flex-align: stretch !important; + align-items: stretch !important; + } .align-content-md-start { - align-content: flex-start !important; } + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } .align-content-md-end { - align-content: flex-end !important; } + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } .align-content-md-center { - align-content: center !important; } + -ms-flex-line-pack: center !important; + align-content: center !important; + } .align-content-md-between { - align-content: space-between !important; } + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } .align-content-md-around { - align-content: space-around !important; } + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } .align-content-md-stretch { - align-content: stretch !important; } + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } .align-self-md-auto { - align-self: auto !important; } + -ms-flex-item-align: auto !important; + align-self: auto !important; + } .align-self-md-start { - align-self: flex-start !important; } + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } .align-self-md-end { - align-self: flex-end !important; } + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } .align-self-md-center { - align-self: center !important; } + -ms-flex-item-align: center !important; + align-self: center !important; + } .align-self-md-baseline { - align-self: baseline !important; } + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } .align-self-md-stretch { - align-self: stretch !important; } } + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} @media (min-width: 992px) { .flex-lg-row { - flex-direction: row !important; } + -ms-flex-direction: row !important; + flex-direction: row !important; + } .flex-lg-column { - flex-direction: column !important; } + -ms-flex-direction: column !important; + flex-direction: column !important; + } .flex-lg-row-reverse { - flex-direction: row-reverse !important; } + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } .flex-lg-column-reverse { - flex-direction: column-reverse !important; } + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } .flex-lg-wrap { - flex-wrap: wrap !important; } + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } .flex-lg-nowrap { - flex-wrap: nowrap !important; } + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; } + -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 { - justify-content: flex-start !important; } + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } .justify-content-lg-end { - justify-content: flex-end !important; } + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } .justify-content-lg-center { - justify-content: center !important; } + -ms-flex-pack: center !important; + justify-content: center !important; + } .justify-content-lg-between { - justify-content: space-between !important; } + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } .justify-content-lg-around { - justify-content: space-around !important; } + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } .align-items-lg-start { - align-items: flex-start !important; } + -ms-flex-align: start !important; + align-items: flex-start !important; + } .align-items-lg-end { - align-items: flex-end !important; } + -ms-flex-align: end !important; + align-items: flex-end !important; + } .align-items-lg-center { - align-items: center !important; } + -ms-flex-align: center !important; + align-items: center !important; + } .align-items-lg-baseline { - align-items: baseline !important; } + -ms-flex-align: baseline !important; + align-items: baseline !important; + } .align-items-lg-stretch { - align-items: stretch !important; } + -ms-flex-align: stretch !important; + align-items: stretch !important; + } .align-content-lg-start { - align-content: flex-start !important; } + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } .align-content-lg-end { - align-content: flex-end !important; } + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } .align-content-lg-center { - align-content: center !important; } + -ms-flex-line-pack: center !important; + align-content: center !important; + } .align-content-lg-between { - align-content: space-between !important; } + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } .align-content-lg-around { - align-content: space-around !important; } + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } .align-content-lg-stretch { - align-content: stretch !important; } + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } .align-self-lg-auto { - align-self: auto !important; } + -ms-flex-item-align: auto !important; + align-self: auto !important; + } .align-self-lg-start { - align-self: flex-start !important; } + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } .align-self-lg-end { - align-self: flex-end !important; } + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } .align-self-lg-center { - align-self: center !important; } + -ms-flex-item-align: center !important; + align-self: center !important; + } .align-self-lg-baseline { - align-self: baseline !important; } + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } .align-self-lg-stretch { - align-self: stretch !important; } } + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} @media (min-width: 1200px) { .flex-xl-row { - flex-direction: row !important; } + -ms-flex-direction: row !important; + flex-direction: row !important; + } .flex-xl-column { - flex-direction: column !important; } + -ms-flex-direction: column !important; + flex-direction: column !important; + } .flex-xl-row-reverse { - flex-direction: row-reverse !important; } + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } .flex-xl-column-reverse { - flex-direction: column-reverse !important; } + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } .flex-xl-wrap { - flex-wrap: wrap !important; } + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } .flex-xl-nowrap { - flex-wrap: nowrap !important; } + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; } + -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 { - justify-content: flex-start !important; } + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } .justify-content-xl-end { - justify-content: flex-end !important; } + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } .justify-content-xl-center { - justify-content: center !important; } + -ms-flex-pack: center !important; + justify-content: center !important; + } .justify-content-xl-between { - justify-content: space-between !important; } + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } .justify-content-xl-around { - justify-content: space-around !important; } + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } .align-items-xl-start { - align-items: flex-start !important; } + -ms-flex-align: start !important; + align-items: flex-start !important; + } .align-items-xl-end { - align-items: flex-end !important; } + -ms-flex-align: end !important; + align-items: flex-end !important; + } .align-items-xl-center { - align-items: center !important; } + -ms-flex-align: center !important; + align-items: center !important; + } .align-items-xl-baseline { - align-items: baseline !important; } + -ms-flex-align: baseline !important; + align-items: baseline !important; + } .align-items-xl-stretch { - align-items: stretch !important; } + -ms-flex-align: stretch !important; + align-items: stretch !important; + } .align-content-xl-start { - align-content: flex-start !important; } + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } .align-content-xl-end { - align-content: flex-end !important; } + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } .align-content-xl-center { - align-content: center !important; } + -ms-flex-line-pack: center !important; + align-content: center !important; + } .align-content-xl-between { - align-content: space-between !important; } + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } .align-content-xl-around { - align-content: space-around !important; } + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } .align-content-xl-stretch { - align-content: stretch !important; } + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } .align-self-xl-auto { - align-self: auto !important; } + -ms-flex-item-align: auto !important; + align-self: auto !important; + } .align-self-xl-start { - align-self: flex-start !important; } + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } .align-self-xl-end { - align-self: flex-end !important; } + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } .align-self-xl-center { - align-self: center !important; } + -ms-flex-item-align: center !important; + align-self: center !important; + } .align-self-xl-baseline { - align-self: baseline !important; } + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } .align-self-xl-stretch { - align-self: stretch !important; } } + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} .float-left { - float: left !important; } + float: left !important; +} .float-right { - float: right !important; } + float: right !important; +} .float-none { - float: none !important; } + float: none !important; +} @media (min-width: 576px) { .float-sm-left { - float: left !important; } + float: left !important; + } .float-sm-right { - float: right !important; } + float: right !important; + } .float-sm-none { - float: none !important; } } + float: none !important; + } +} @media (min-width: 768px) { .float-md-left { - float: left !important; } + float: left !important; + } .float-md-right { - float: right !important; } + float: right !important; + } .float-md-none { - float: none !important; } } + float: none !important; + } +} @media (min-width: 992px) { .float-lg-left { - float: left !important; } + float: left !important; + } .float-lg-right { - float: right !important; } + float: right !important; + } .float-lg-none { - float: none !important; } } + float: none !important; + } +} @media (min-width: 1200px) { .float-xl-left { - float: left !important; } + float: left !important; + } .float-xl-right { - float: right !important; } + float: right !important; + } .float-xl-none { - float: none !important; } } + float: none !important; + } +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} .position-static { - position: static !important; } + position: static !important; +} .position-relative { - position: relative !important; } + position: relative !important; +} .position-absolute { - position: absolute !important; } + position: absolute !important; +} .position-fixed { - position: fixed !important; } + position: fixed !important; +} .position-sticky { - position: sticky !important; } + position: -webkit-sticky !important; + position: sticky !important; +} .fixed-top { position: fixed; top: 0; right: 0; left: 0; - z-index: 1030; } + z-index: 1030; +} .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; - z-index: 1030; } + z-index: 1030; +} -@supports (position: sticky) { +@supports ((position: -webkit-sticky) or (position: sticky)) { .sticky-top { + position: -webkit-sticky; position: sticky; top: 0; - z-index: 1020; } } + z-index: 1020; + } +} .sr-only { position: absolute; @@ -4827,8 +7676,8 @@ button.bg-dark:focus { overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; - clip-path: inset(50%); - border: 0; } + border: 0; +} .sr-only-focusable:active, .sr-only-focusable:focus { position: static; @@ -4837,1205 +7686,2202 @@ button.bg-dark:focus { overflow: visible; clip: auto; white-space: normal; - clip-path: none; } +} + +.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; } + width: 25% !important; +} .w-50 { - width: 50% !important; } + width: 50% !important; +} .w-75 { - width: 75% !important; } + width: 75% !important; +} .w-100 { - width: 100% !important; } + width: 100% !important; +} + +.w-auto { + width: auto !important; +} .h-25 { - height: 25% !important; } + height: 25% !important; +} .h-50 { - height: 50% !important; } + height: 50% !important; +} .h-75 { - height: 75% !important; } + height: 75% !important; +} .h-100 { - height: 100% !important; } + height: 100% !important; +} + +.h-auto { + height: auto !important; +} .mw-100 { - max-width: 100% !important; } + max-width: 100% !important; +} .mh-100 { - max-height: 100% !important; } + max-height: 100% !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.vw-100 { + width: 100vw !important; +} + +.vh-100 { + height: 100vh !important; +} .m-0 { - margin: 0 !important; } + margin: 0 !important; +} .mt-0, .my-0 { - margin-top: 0 !important; } + margin-top: 0 !important; +} .mr-0, .mx-0 { - margin-right: 0 !important; } + margin-right: 0 !important; +} .mb-0, .my-0 { - margin-bottom: 0 !important; } + margin-bottom: 0 !important; +} .ml-0, .mx-0 { - margin-left: 0 !important; } + margin-left: 0 !important; +} .m-1 { - margin: 0.25rem !important; } + margin: 0.25rem !important; +} .mt-1, .my-1 { - margin-top: 0.25rem !important; } + margin-top: 0.25rem !important; +} .mr-1, .mx-1 { - margin-right: 0.25rem !important; } + margin-right: 0.25rem !important; +} .mb-1, .my-1 { - margin-bottom: 0.25rem !important; } + margin-bottom: 0.25rem !important; +} .ml-1, .mx-1 { - margin-left: 0.25rem !important; } + margin-left: 0.25rem !important; +} .m-2 { - margin: 0.5rem !important; } + margin: 0.5rem !important; +} .mt-2, .my-2 { - margin-top: 0.5rem !important; } + margin-top: 0.5rem !important; +} .mr-2, .mx-2 { - margin-right: 0.5rem !important; } + margin-right: 0.5rem !important; +} .mb-2, .my-2 { - margin-bottom: 0.5rem !important; } + margin-bottom: 0.5rem !important; +} .ml-2, .mx-2 { - margin-left: 0.5rem !important; } + margin-left: 0.5rem !important; +} .m-3 { - margin: 1rem !important; } + margin: 1rem !important; +} .mt-3, .my-3 { - margin-top: 1rem !important; } + margin-top: 1rem !important; +} .mr-3, .mx-3 { - margin-right: 1rem !important; } + margin-right: 1rem !important; +} .mb-3, .my-3 { - margin-bottom: 1rem !important; } + margin-bottom: 1rem !important; +} .ml-3, .mx-3 { - margin-left: 1rem !important; } + margin-left: 1rem !important; +} .m-4 { - margin: 1.5rem !important; } + margin: 1.5rem !important; +} .mt-4, .my-4 { - margin-top: 1.5rem !important; } + margin-top: 1.5rem !important; +} .mr-4, .mx-4 { - margin-right: 1.5rem !important; } + margin-right: 1.5rem !important; +} .mb-4, .my-4 { - margin-bottom: 1.5rem !important; } + margin-bottom: 1.5rem !important; +} .ml-4, .mx-4 { - margin-left: 1.5rem !important; } + margin-left: 1.5rem !important; +} .m-5 { - margin: 3rem !important; } + margin: 3rem !important; +} .mt-5, .my-5 { - margin-top: 3rem !important; } + margin-top: 3rem !important; +} .mr-5, .mx-5 { - margin-right: 3rem !important; } + margin-right: 3rem !important; +} .mb-5, .my-5 { - margin-bottom: 3rem !important; } + margin-bottom: 3rem !important; +} .ml-5, .mx-5 { - margin-left: 3rem !important; } + margin-left: 3rem !important; +} .p-0 { - padding: 0 !important; } + padding: 0 !important; +} .pt-0, .py-0 { - padding-top: 0 !important; } + padding-top: 0 !important; +} .pr-0, .px-0 { - padding-right: 0 !important; } + padding-right: 0 !important; +} .pb-0, .py-0 { - padding-bottom: 0 !important; } + padding-bottom: 0 !important; +} .pl-0, .px-0 { - padding-left: 0 !important; } + padding-left: 0 !important; +} .p-1 { - padding: 0.25rem !important; } + padding: 0.25rem !important; +} .pt-1, .py-1 { - padding-top: 0.25rem !important; } + padding-top: 0.25rem !important; +} .pr-1, .px-1 { - padding-right: 0.25rem !important; } + padding-right: 0.25rem !important; +} .pb-1, .py-1 { - padding-bottom: 0.25rem !important; } + padding-bottom: 0.25rem !important; +} .pl-1, .px-1 { - padding-left: 0.25rem !important; } + padding-left: 0.25rem !important; +} .p-2 { - padding: 0.5rem !important; } + padding: 0.5rem !important; +} .pt-2, .py-2 { - padding-top: 0.5rem !important; } + padding-top: 0.5rem !important; +} .pr-2, .px-2 { - padding-right: 0.5rem !important; } + padding-right: 0.5rem !important; +} .pb-2, .py-2 { - padding-bottom: 0.5rem !important; } + padding-bottom: 0.5rem !important; +} .pl-2, .px-2 { - padding-left: 0.5rem !important; } + padding-left: 0.5rem !important; +} .p-3 { - padding: 1rem !important; } + padding: 1rem !important; +} .pt-3, .py-3 { - padding-top: 1rem !important; } + padding-top: 1rem !important; +} .pr-3, .px-3 { - padding-right: 1rem !important; } + padding-right: 1rem !important; +} .pb-3, .py-3 { - padding-bottom: 1rem !important; } + padding-bottom: 1rem !important; +} .pl-3, .px-3 { - padding-left: 1rem !important; } + padding-left: 1rem !important; +} .p-4 { - padding: 1.5rem !important; } + padding: 1.5rem !important; +} .pt-4, .py-4 { - padding-top: 1.5rem !important; } + padding-top: 1.5rem !important; +} .pr-4, .px-4 { - padding-right: 1.5rem !important; } + padding-right: 1.5rem !important; +} .pb-4, .py-4 { - padding-bottom: 1.5rem !important; } + padding-bottom: 1.5rem !important; +} .pl-4, .px-4 { - padding-left: 1.5rem !important; } + padding-left: 1.5rem !important; +} .p-5 { - padding: 3rem !important; } + padding: 3rem !important; +} .pt-5, .py-5 { - padding-top: 3rem !important; } + padding-top: 3rem !important; +} .pr-5, .px-5 { - padding-right: 3rem !important; } + padding-right: 3rem !important; +} .pb-5, .py-5 { - padding-bottom: 3rem !important; } + padding-bottom: 3rem !important; +} .pl-5, .px-5 { - padding-left: 3rem !important; } + padding-left: 3rem !important; +} + +.m-n1 { + margin: -0.25rem !important; +} + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; +} + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; +} + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; +} + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; +} + +.m-n2 { + margin: -0.5rem !important; +} + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; +} + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; +} + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; +} + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; +} + +.m-n3 { + margin: -1rem !important; +} + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; +} + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; +} + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; +} + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; +} + +.m-n4 { + margin: -1.5rem !important; +} + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; +} + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; +} + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; +} + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; +} + +.m-n5 { + margin: -3rem !important; +} + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; +} + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; +} + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; +} + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; +} .m-auto { - margin: auto !important; } + margin: auto !important; +} .mt-auto, .my-auto { - margin-top: auto !important; } + margin-top: auto !important; +} .mr-auto, .mx-auto { - margin-right: auto !important; } + margin-right: auto !important; +} .mb-auto, .my-auto { - margin-bottom: auto !important; } + margin-bottom: auto !important; +} .ml-auto, .mx-auto { - margin-left: auto !important; } + margin-left: auto !important; +} @media (min-width: 576px) { .m-sm-0 { - margin: 0 !important; } + margin: 0 !important; + } .mt-sm-0, .my-sm-0 { - margin-top: 0 !important; } + margin-top: 0 !important; + } .mr-sm-0, .mx-sm-0 { - margin-right: 0 !important; } + margin-right: 0 !important; + } .mb-sm-0, .my-sm-0 { - margin-bottom: 0 !important; } + margin-bottom: 0 !important; + } .ml-sm-0, .mx-sm-0 { - margin-left: 0 !important; } + margin-left: 0 !important; + } .m-sm-1 { - margin: 0.25rem !important; } + margin: 0.25rem !important; + } .mt-sm-1, .my-sm-1 { - margin-top: 0.25rem !important; } + margin-top: 0.25rem !important; + } .mr-sm-1, .mx-sm-1 { - margin-right: 0.25rem !important; } + margin-right: 0.25rem !important; + } .mb-sm-1, .my-sm-1 { - margin-bottom: 0.25rem !important; } + margin-bottom: 0.25rem !important; + } .ml-sm-1, .mx-sm-1 { - margin-left: 0.25rem !important; } + margin-left: 0.25rem !important; + } .m-sm-2 { - margin: 0.5rem !important; } + margin: 0.5rem !important; + } .mt-sm-2, .my-sm-2 { - margin-top: 0.5rem !important; } + margin-top: 0.5rem !important; + } .mr-sm-2, .mx-sm-2 { - margin-right: 0.5rem !important; } + margin-right: 0.5rem !important; + } .mb-sm-2, .my-sm-2 { - margin-bottom: 0.5rem !important; } + margin-bottom: 0.5rem !important; + } .ml-sm-2, .mx-sm-2 { - margin-left: 0.5rem !important; } + margin-left: 0.5rem !important; + } .m-sm-3 { - margin: 1rem !important; } + margin: 1rem !important; + } .mt-sm-3, .my-sm-3 { - margin-top: 1rem !important; } + margin-top: 1rem !important; + } .mr-sm-3, .mx-sm-3 { - margin-right: 1rem !important; } + margin-right: 1rem !important; + } .mb-sm-3, .my-sm-3 { - margin-bottom: 1rem !important; } + margin-bottom: 1rem !important; + } .ml-sm-3, .mx-sm-3 { - margin-left: 1rem !important; } + margin-left: 1rem !important; + } .m-sm-4 { - margin: 1.5rem !important; } + margin: 1.5rem !important; + } .mt-sm-4, .my-sm-4 { - margin-top: 1.5rem !important; } + margin-top: 1.5rem !important; + } .mr-sm-4, .mx-sm-4 { - margin-right: 1.5rem !important; } + margin-right: 1.5rem !important; + } .mb-sm-4, .my-sm-4 { - margin-bottom: 1.5rem !important; } + margin-bottom: 1.5rem !important; + } .ml-sm-4, .mx-sm-4 { - margin-left: 1.5rem !important; } + margin-left: 1.5rem !important; + } .m-sm-5 { - margin: 3rem !important; } + margin: 3rem !important; + } .mt-sm-5, .my-sm-5 { - margin-top: 3rem !important; } + margin-top: 3rem !important; + } .mr-sm-5, .mx-sm-5 { - margin-right: 3rem !important; } + margin-right: 3rem !important; + } .mb-sm-5, .my-sm-5 { - margin-bottom: 3rem !important; } + margin-bottom: 3rem !important; + } .ml-sm-5, .mx-sm-5 { - margin-left: 3rem !important; } + margin-left: 3rem !important; + } .p-sm-0 { - padding: 0 !important; } + padding: 0 !important; + } .pt-sm-0, .py-sm-0 { - padding-top: 0 !important; } + padding-top: 0 !important; + } .pr-sm-0, .px-sm-0 { - padding-right: 0 !important; } + padding-right: 0 !important; + } .pb-sm-0, .py-sm-0 { - padding-bottom: 0 !important; } + padding-bottom: 0 !important; + } .pl-sm-0, .px-sm-0 { - padding-left: 0 !important; } + padding-left: 0 !important; + } .p-sm-1 { - padding: 0.25rem !important; } + padding: 0.25rem !important; + } .pt-sm-1, .py-sm-1 { - padding-top: 0.25rem !important; } + padding-top: 0.25rem !important; + } .pr-sm-1, .px-sm-1 { - padding-right: 0.25rem !important; } + padding-right: 0.25rem !important; + } .pb-sm-1, .py-sm-1 { - padding-bottom: 0.25rem !important; } + padding-bottom: 0.25rem !important; + } .pl-sm-1, .px-sm-1 { - padding-left: 0.25rem !important; } + padding-left: 0.25rem !important; + } .p-sm-2 { - padding: 0.5rem !important; } + padding: 0.5rem !important; + } .pt-sm-2, .py-sm-2 { - padding-top: 0.5rem !important; } + padding-top: 0.5rem !important; + } .pr-sm-2, .px-sm-2 { - padding-right: 0.5rem !important; } + padding-right: 0.5rem !important; + } .pb-sm-2, .py-sm-2 { - padding-bottom: 0.5rem !important; } + padding-bottom: 0.5rem !important; + } .pl-sm-2, .px-sm-2 { - padding-left: 0.5rem !important; } + padding-left: 0.5rem !important; + } .p-sm-3 { - padding: 1rem !important; } + padding: 1rem !important; + } .pt-sm-3, .py-sm-3 { - padding-top: 1rem !important; } + padding-top: 1rem !important; + } .pr-sm-3, .px-sm-3 { - padding-right: 1rem !important; } + padding-right: 1rem !important; + } .pb-sm-3, .py-sm-3 { - padding-bottom: 1rem !important; } + padding-bottom: 1rem !important; + } .pl-sm-3, .px-sm-3 { - padding-left: 1rem !important; } + padding-left: 1rem !important; + } .p-sm-4 { - padding: 1.5rem !important; } + padding: 1.5rem !important; + } .pt-sm-4, .py-sm-4 { - padding-top: 1.5rem !important; } + padding-top: 1.5rem !important; + } .pr-sm-4, .px-sm-4 { - padding-right: 1.5rem !important; } + padding-right: 1.5rem !important; + } .pb-sm-4, .py-sm-4 { - padding-bottom: 1.5rem !important; } + padding-bottom: 1.5rem !important; + } .pl-sm-4, .px-sm-4 { - padding-left: 1.5rem !important; } + padding-left: 1.5rem !important; + } .p-sm-5 { - padding: 3rem !important; } + padding: 3rem !important; + } .pt-sm-5, .py-sm-5 { - padding-top: 3rem !important; } + padding-top: 3rem !important; + } .pr-sm-5, .px-sm-5 { - padding-right: 3rem !important; } + padding-right: 3rem !important; + } .pb-sm-5, .py-sm-5 { - padding-bottom: 3rem !important; } + padding-bottom: 3rem !important; + } .pl-sm-5, .px-sm-5 { - padding-left: 3rem !important; } + padding-left: 3rem !important; + } + .m-sm-n1 { + margin: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; + } + .m-sm-n3 { + margin: -1rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; + } + .m-sm-n4 { + margin: -1.5rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; + } + .m-sm-n5 { + margin: -3rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; + } .m-sm-auto { - margin: auto !important; } + margin: auto !important; + } .mt-sm-auto, .my-sm-auto { - margin-top: auto !important; } + margin-top: auto !important; + } .mr-sm-auto, .mx-sm-auto { - margin-right: auto !important; } + margin-right: auto !important; + } .mb-sm-auto, .my-sm-auto { - margin-bottom: auto !important; } + margin-bottom: auto !important; + } .ml-sm-auto, .mx-sm-auto { - margin-left: auto !important; } } + margin-left: auto !important; + } +} @media (min-width: 768px) { .m-md-0 { - margin: 0 !important; } + margin: 0 !important; + } .mt-md-0, .my-md-0 { - margin-top: 0 !important; } + margin-top: 0 !important; + } .mr-md-0, .mx-md-0 { - margin-right: 0 !important; } + margin-right: 0 !important; + } .mb-md-0, .my-md-0 { - margin-bottom: 0 !important; } + margin-bottom: 0 !important; + } .ml-md-0, .mx-md-0 { - margin-left: 0 !important; } + margin-left: 0 !important; + } .m-md-1 { - margin: 0.25rem !important; } + margin: 0.25rem !important; + } .mt-md-1, .my-md-1 { - margin-top: 0.25rem !important; } + margin-top: 0.25rem !important; + } .mr-md-1, .mx-md-1 { - margin-right: 0.25rem !important; } + margin-right: 0.25rem !important; + } .mb-md-1, .my-md-1 { - margin-bottom: 0.25rem !important; } + margin-bottom: 0.25rem !important; + } .ml-md-1, .mx-md-1 { - margin-left: 0.25rem !important; } + margin-left: 0.25rem !important; + } .m-md-2 { - margin: 0.5rem !important; } + margin: 0.5rem !important; + } .mt-md-2, .my-md-2 { - margin-top: 0.5rem !important; } + margin-top: 0.5rem !important; + } .mr-md-2, .mx-md-2 { - margin-right: 0.5rem !important; } + margin-right: 0.5rem !important; + } .mb-md-2, .my-md-2 { - margin-bottom: 0.5rem !important; } + margin-bottom: 0.5rem !important; + } .ml-md-2, .mx-md-2 { - margin-left: 0.5rem !important; } + margin-left: 0.5rem !important; + } .m-md-3 { - margin: 1rem !important; } + margin: 1rem !important; + } .mt-md-3, .my-md-3 { - margin-top: 1rem !important; } + margin-top: 1rem !important; + } .mr-md-3, .mx-md-3 { - margin-right: 1rem !important; } + margin-right: 1rem !important; + } .mb-md-3, .my-md-3 { - margin-bottom: 1rem !important; } + margin-bottom: 1rem !important; + } .ml-md-3, .mx-md-3 { - margin-left: 1rem !important; } + margin-left: 1rem !important; + } .m-md-4 { - margin: 1.5rem !important; } + margin: 1.5rem !important; + } .mt-md-4, .my-md-4 { - margin-top: 1.5rem !important; } + margin-top: 1.5rem !important; + } .mr-md-4, .mx-md-4 { - margin-right: 1.5rem !important; } + margin-right: 1.5rem !important; + } .mb-md-4, .my-md-4 { - margin-bottom: 1.5rem !important; } + margin-bottom: 1.5rem !important; + } .ml-md-4, .mx-md-4 { - margin-left: 1.5rem !important; } + margin-left: 1.5rem !important; + } .m-md-5 { - margin: 3rem !important; } + margin: 3rem !important; + } .mt-md-5, .my-md-5 { - margin-top: 3rem !important; } + margin-top: 3rem !important; + } .mr-md-5, .mx-md-5 { - margin-right: 3rem !important; } + margin-right: 3rem !important; + } .mb-md-5, .my-md-5 { - margin-bottom: 3rem !important; } + margin-bottom: 3rem !important; + } .ml-md-5, .mx-md-5 { - margin-left: 3rem !important; } + margin-left: 3rem !important; + } .p-md-0 { - padding: 0 !important; } + padding: 0 !important; + } .pt-md-0, .py-md-0 { - padding-top: 0 !important; } + padding-top: 0 !important; + } .pr-md-0, .px-md-0 { - padding-right: 0 !important; } + padding-right: 0 !important; + } .pb-md-0, .py-md-0 { - padding-bottom: 0 !important; } + padding-bottom: 0 !important; + } .pl-md-0, .px-md-0 { - padding-left: 0 !important; } + padding-left: 0 !important; + } .p-md-1 { - padding: 0.25rem !important; } + padding: 0.25rem !important; + } .pt-md-1, .py-md-1 { - padding-top: 0.25rem !important; } + padding-top: 0.25rem !important; + } .pr-md-1, .px-md-1 { - padding-right: 0.25rem !important; } + padding-right: 0.25rem !important; + } .pb-md-1, .py-md-1 { - padding-bottom: 0.25rem !important; } + padding-bottom: 0.25rem !important; + } .pl-md-1, .px-md-1 { - padding-left: 0.25rem !important; } + padding-left: 0.25rem !important; + } .p-md-2 { - padding: 0.5rem !important; } + padding: 0.5rem !important; + } .pt-md-2, .py-md-2 { - padding-top: 0.5rem !important; } + padding-top: 0.5rem !important; + } .pr-md-2, .px-md-2 { - padding-right: 0.5rem !important; } + padding-right: 0.5rem !important; + } .pb-md-2, .py-md-2 { - padding-bottom: 0.5rem !important; } + padding-bottom: 0.5rem !important; + } .pl-md-2, .px-md-2 { - padding-left: 0.5rem !important; } + padding-left: 0.5rem !important; + } .p-md-3 { - padding: 1rem !important; } + padding: 1rem !important; + } .pt-md-3, .py-md-3 { - padding-top: 1rem !important; } + padding-top: 1rem !important; + } .pr-md-3, .px-md-3 { - padding-right: 1rem !important; } + padding-right: 1rem !important; + } .pb-md-3, .py-md-3 { - padding-bottom: 1rem !important; } + padding-bottom: 1rem !important; + } .pl-md-3, .px-md-3 { - padding-left: 1rem !important; } + padding-left: 1rem !important; + } .p-md-4 { - padding: 1.5rem !important; } + padding: 1.5rem !important; + } .pt-md-4, .py-md-4 { - padding-top: 1.5rem !important; } + padding-top: 1.5rem !important; + } .pr-md-4, .px-md-4 { - padding-right: 1.5rem !important; } + padding-right: 1.5rem !important; + } .pb-md-4, .py-md-4 { - padding-bottom: 1.5rem !important; } + padding-bottom: 1.5rem !important; + } .pl-md-4, .px-md-4 { - padding-left: 1.5rem !important; } + padding-left: 1.5rem !important; + } .p-md-5 { - padding: 3rem !important; } + padding: 3rem !important; + } .pt-md-5, .py-md-5 { - padding-top: 3rem !important; } + padding-top: 3rem !important; + } .pr-md-5, .px-md-5 { - padding-right: 3rem !important; } + padding-right: 3rem !important; + } .pb-md-5, .py-md-5 { - padding-bottom: 3rem !important; } + padding-bottom: 3rem !important; + } .pl-md-5, .px-md-5 { - padding-left: 3rem !important; } + padding-left: 3rem !important; + } + .m-md-n1 { + margin: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; + } + .m-md-n3 { + margin: -1rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; + } + .m-md-n4 { + margin: -1.5rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; + } + .m-md-n5 { + margin: -3rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; + } .m-md-auto { - margin: auto !important; } + margin: auto !important; + } .mt-md-auto, .my-md-auto { - margin-top: auto !important; } + margin-top: auto !important; + } .mr-md-auto, .mx-md-auto { - margin-right: auto !important; } + margin-right: auto !important; + } .mb-md-auto, .my-md-auto { - margin-bottom: auto !important; } + margin-bottom: auto !important; + } .ml-md-auto, .mx-md-auto { - margin-left: auto !important; } } + margin-left: auto !important; + } +} @media (min-width: 992px) { .m-lg-0 { - margin: 0 !important; } + margin: 0 !important; + } .mt-lg-0, .my-lg-0 { - margin-top: 0 !important; } + margin-top: 0 !important; + } .mr-lg-0, .mx-lg-0 { - margin-right: 0 !important; } + margin-right: 0 !important; + } .mb-lg-0, .my-lg-0 { - margin-bottom: 0 !important; } + margin-bottom: 0 !important; + } .ml-lg-0, .mx-lg-0 { - margin-left: 0 !important; } + margin-left: 0 !important; + } .m-lg-1 { - margin: 0.25rem !important; } + margin: 0.25rem !important; + } .mt-lg-1, .my-lg-1 { - margin-top: 0.25rem !important; } + margin-top: 0.25rem !important; + } .mr-lg-1, .mx-lg-1 { - margin-right: 0.25rem !important; } + margin-right: 0.25rem !important; + } .mb-lg-1, .my-lg-1 { - margin-bottom: 0.25rem !important; } + margin-bottom: 0.25rem !important; + } .ml-lg-1, .mx-lg-1 { - margin-left: 0.25rem !important; } + margin-left: 0.25rem !important; + } .m-lg-2 { - margin: 0.5rem !important; } + margin: 0.5rem !important; + } .mt-lg-2, .my-lg-2 { - margin-top: 0.5rem !important; } + margin-top: 0.5rem !important; + } .mr-lg-2, .mx-lg-2 { - margin-right: 0.5rem !important; } + margin-right: 0.5rem !important; + } .mb-lg-2, .my-lg-2 { - margin-bottom: 0.5rem !important; } + margin-bottom: 0.5rem !important; + } .ml-lg-2, .mx-lg-2 { - margin-left: 0.5rem !important; } + margin-left: 0.5rem !important; + } .m-lg-3 { - margin: 1rem !important; } + margin: 1rem !important; + } .mt-lg-3, .my-lg-3 { - margin-top: 1rem !important; } + margin-top: 1rem !important; + } .mr-lg-3, .mx-lg-3 { - margin-right: 1rem !important; } + margin-right: 1rem !important; + } .mb-lg-3, .my-lg-3 { - margin-bottom: 1rem !important; } + margin-bottom: 1rem !important; + } .ml-lg-3, .mx-lg-3 { - margin-left: 1rem !important; } + margin-left: 1rem !important; + } .m-lg-4 { - margin: 1.5rem !important; } + margin: 1.5rem !important; + } .mt-lg-4, .my-lg-4 { - margin-top: 1.5rem !important; } + margin-top: 1.5rem !important; + } .mr-lg-4, .mx-lg-4 { - margin-right: 1.5rem !important; } + margin-right: 1.5rem !important; + } .mb-lg-4, .my-lg-4 { - margin-bottom: 1.5rem !important; } + margin-bottom: 1.5rem !important; + } .ml-lg-4, .mx-lg-4 { - margin-left: 1.5rem !important; } + margin-left: 1.5rem !important; + } .m-lg-5 { - margin: 3rem !important; } + margin: 3rem !important; + } .mt-lg-5, .my-lg-5 { - margin-top: 3rem !important; } + margin-top: 3rem !important; + } .mr-lg-5, .mx-lg-5 { - margin-right: 3rem !important; } + margin-right: 3rem !important; + } .mb-lg-5, .my-lg-5 { - margin-bottom: 3rem !important; } + margin-bottom: 3rem !important; + } .ml-lg-5, .mx-lg-5 { - margin-left: 3rem !important; } + margin-left: 3rem !important; + } .p-lg-0 { - padding: 0 !important; } + padding: 0 !important; + } .pt-lg-0, .py-lg-0 { - padding-top: 0 !important; } + padding-top: 0 !important; + } .pr-lg-0, .px-lg-0 { - padding-right: 0 !important; } + padding-right: 0 !important; + } .pb-lg-0, .py-lg-0 { - padding-bottom: 0 !important; } + padding-bottom: 0 !important; + } .pl-lg-0, .px-lg-0 { - padding-left: 0 !important; } + padding-left: 0 !important; + } .p-lg-1 { - padding: 0.25rem !important; } + padding: 0.25rem !important; + } .pt-lg-1, .py-lg-1 { - padding-top: 0.25rem !important; } + padding-top: 0.25rem !important; + } .pr-lg-1, .px-lg-1 { - padding-right: 0.25rem !important; } + padding-right: 0.25rem !important; + } .pb-lg-1, .py-lg-1 { - padding-bottom: 0.25rem !important; } + padding-bottom: 0.25rem !important; + } .pl-lg-1, .px-lg-1 { - padding-left: 0.25rem !important; } + padding-left: 0.25rem !important; + } .p-lg-2 { - padding: 0.5rem !important; } + padding: 0.5rem !important; + } .pt-lg-2, .py-lg-2 { - padding-top: 0.5rem !important; } + padding-top: 0.5rem !important; + } .pr-lg-2, .px-lg-2 { - padding-right: 0.5rem !important; } + padding-right: 0.5rem !important; + } .pb-lg-2, .py-lg-2 { - padding-bottom: 0.5rem !important; } + padding-bottom: 0.5rem !important; + } .pl-lg-2, .px-lg-2 { - padding-left: 0.5rem !important; } + padding-left: 0.5rem !important; + } .p-lg-3 { - padding: 1rem !important; } + padding: 1rem !important; + } .pt-lg-3, .py-lg-3 { - padding-top: 1rem !important; } + padding-top: 1rem !important; + } .pr-lg-3, .px-lg-3 { - padding-right: 1rem !important; } + padding-right: 1rem !important; + } .pb-lg-3, .py-lg-3 { - padding-bottom: 1rem !important; } + padding-bottom: 1rem !important; + } .pl-lg-3, .px-lg-3 { - padding-left: 1rem !important; } + padding-left: 1rem !important; + } .p-lg-4 { - padding: 1.5rem !important; } + padding: 1.5rem !important; + } .pt-lg-4, .py-lg-4 { - padding-top: 1.5rem !important; } + padding-top: 1.5rem !important; + } .pr-lg-4, .px-lg-4 { - padding-right: 1.5rem !important; } + padding-right: 1.5rem !important; + } .pb-lg-4, .py-lg-4 { - padding-bottom: 1.5rem !important; } + padding-bottom: 1.5rem !important; + } .pl-lg-4, .px-lg-4 { - padding-left: 1.5rem !important; } + padding-left: 1.5rem !important; + } .p-lg-5 { - padding: 3rem !important; } + padding: 3rem !important; + } .pt-lg-5, .py-lg-5 { - padding-top: 3rem !important; } + padding-top: 3rem !important; + } .pr-lg-5, .px-lg-5 { - padding-right: 3rem !important; } + padding-right: 3rem !important; + } .pb-lg-5, .py-lg-5 { - padding-bottom: 3rem !important; } + padding-bottom: 3rem !important; + } .pl-lg-5, .px-lg-5 { - padding-left: 3rem !important; } + padding-left: 3rem !important; + } + .m-lg-n1 { + margin: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; + } + .m-lg-n3 { + margin: -1rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; + } + .m-lg-n4 { + margin: -1.5rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; + } + .m-lg-n5 { + margin: -3rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; + } .m-lg-auto { - margin: auto !important; } + margin: auto !important; + } .mt-lg-auto, .my-lg-auto { - margin-top: auto !important; } + margin-top: auto !important; + } .mr-lg-auto, .mx-lg-auto { - margin-right: auto !important; } + margin-right: auto !important; + } .mb-lg-auto, .my-lg-auto { - margin-bottom: auto !important; } + margin-bottom: auto !important; + } .ml-lg-auto, .mx-lg-auto { - margin-left: auto !important; } } + margin-left: auto !important; + } +} @media (min-width: 1200px) { .m-xl-0 { - margin: 0 !important; } + margin: 0 !important; + } .mt-xl-0, .my-xl-0 { - margin-top: 0 !important; } + margin-top: 0 !important; + } .mr-xl-0, .mx-xl-0 { - margin-right: 0 !important; } + margin-right: 0 !important; + } .mb-xl-0, .my-xl-0 { - margin-bottom: 0 !important; } + margin-bottom: 0 !important; + } .ml-xl-0, .mx-xl-0 { - margin-left: 0 !important; } + margin-left: 0 !important; + } .m-xl-1 { - margin: 0.25rem !important; } + margin: 0.25rem !important; + } .mt-xl-1, .my-xl-1 { - margin-top: 0.25rem !important; } + margin-top: 0.25rem !important; + } .mr-xl-1, .mx-xl-1 { - margin-right: 0.25rem !important; } + margin-right: 0.25rem !important; + } .mb-xl-1, .my-xl-1 { - margin-bottom: 0.25rem !important; } + margin-bottom: 0.25rem !important; + } .ml-xl-1, .mx-xl-1 { - margin-left: 0.25rem !important; } + margin-left: 0.25rem !important; + } .m-xl-2 { - margin: 0.5rem !important; } + margin: 0.5rem !important; + } .mt-xl-2, .my-xl-2 { - margin-top: 0.5rem !important; } + margin-top: 0.5rem !important; + } .mr-xl-2, .mx-xl-2 { - margin-right: 0.5rem !important; } + margin-right: 0.5rem !important; + } .mb-xl-2, .my-xl-2 { - margin-bottom: 0.5rem !important; } + margin-bottom: 0.5rem !important; + } .ml-xl-2, .mx-xl-2 { - margin-left: 0.5rem !important; } + margin-left: 0.5rem !important; + } .m-xl-3 { - margin: 1rem !important; } + margin: 1rem !important; + } .mt-xl-3, .my-xl-3 { - margin-top: 1rem !important; } + margin-top: 1rem !important; + } .mr-xl-3, .mx-xl-3 { - margin-right: 1rem !important; } + margin-right: 1rem !important; + } .mb-xl-3, .my-xl-3 { - margin-bottom: 1rem !important; } + margin-bottom: 1rem !important; + } .ml-xl-3, .mx-xl-3 { - margin-left: 1rem !important; } + margin-left: 1rem !important; + } .m-xl-4 { - margin: 1.5rem !important; } + margin: 1.5rem !important; + } .mt-xl-4, .my-xl-4 { - margin-top: 1.5rem !important; } + margin-top: 1.5rem !important; + } .mr-xl-4, .mx-xl-4 { - margin-right: 1.5rem !important; } + margin-right: 1.5rem !important; + } .mb-xl-4, .my-xl-4 { - margin-bottom: 1.5rem !important; } + margin-bottom: 1.5rem !important; + } .ml-xl-4, .mx-xl-4 { - margin-left: 1.5rem !important; } + margin-left: 1.5rem !important; + } .m-xl-5 { - margin: 3rem !important; } + margin: 3rem !important; + } .mt-xl-5, .my-xl-5 { - margin-top: 3rem !important; } + margin-top: 3rem !important; + } .mr-xl-5, .mx-xl-5 { - margin-right: 3rem !important; } + margin-right: 3rem !important; + } .mb-xl-5, .my-xl-5 { - margin-bottom: 3rem !important; } + margin-bottom: 3rem !important; + } .ml-xl-5, .mx-xl-5 { - margin-left: 3rem !important; } + margin-left: 3rem !important; + } .p-xl-0 { - padding: 0 !important; } + padding: 0 !important; + } .pt-xl-0, .py-xl-0 { - padding-top: 0 !important; } + padding-top: 0 !important; + } .pr-xl-0, .px-xl-0 { - padding-right: 0 !important; } + padding-right: 0 !important; + } .pb-xl-0, .py-xl-0 { - padding-bottom: 0 !important; } + padding-bottom: 0 !important; + } .pl-xl-0, .px-xl-0 { - padding-left: 0 !important; } + padding-left: 0 !important; + } .p-xl-1 { - padding: 0.25rem !important; } + padding: 0.25rem !important; + } .pt-xl-1, .py-xl-1 { - padding-top: 0.25rem !important; } + padding-top: 0.25rem !important; + } .pr-xl-1, .px-xl-1 { - padding-right: 0.25rem !important; } + padding-right: 0.25rem !important; + } .pb-xl-1, .py-xl-1 { - padding-bottom: 0.25rem !important; } + padding-bottom: 0.25rem !important; + } .pl-xl-1, .px-xl-1 { - padding-left: 0.25rem !important; } + padding-left: 0.25rem !important; + } .p-xl-2 { - padding: 0.5rem !important; } + padding: 0.5rem !important; + } .pt-xl-2, .py-xl-2 { - padding-top: 0.5rem !important; } + padding-top: 0.5rem !important; + } .pr-xl-2, .px-xl-2 { - padding-right: 0.5rem !important; } + padding-right: 0.5rem !important; + } .pb-xl-2, .py-xl-2 { - padding-bottom: 0.5rem !important; } + padding-bottom: 0.5rem !important; + } .pl-xl-2, .px-xl-2 { - padding-left: 0.5rem !important; } + padding-left: 0.5rem !important; + } .p-xl-3 { - padding: 1rem !important; } + padding: 1rem !important; + } .pt-xl-3, .py-xl-3 { - padding-top: 1rem !important; } + padding-top: 1rem !important; + } .pr-xl-3, .px-xl-3 { - padding-right: 1rem !important; } + padding-right: 1rem !important; + } .pb-xl-3, .py-xl-3 { - padding-bottom: 1rem !important; } + padding-bottom: 1rem !important; + } .pl-xl-3, .px-xl-3 { - padding-left: 1rem !important; } + padding-left: 1rem !important; + } .p-xl-4 { - padding: 1.5rem !important; } + padding: 1.5rem !important; + } .pt-xl-4, .py-xl-4 { - padding-top: 1.5rem !important; } + padding-top: 1.5rem !important; + } .pr-xl-4, .px-xl-4 { - padding-right: 1.5rem !important; } + padding-right: 1.5rem !important; + } .pb-xl-4, .py-xl-4 { - padding-bottom: 1.5rem !important; } + padding-bottom: 1.5rem !important; + } .pl-xl-4, .px-xl-4 { - padding-left: 1.5rem !important; } + padding-left: 1.5rem !important; + } .p-xl-5 { - padding: 3rem !important; } + padding: 3rem !important; + } .pt-xl-5, .py-xl-5 { - padding-top: 3rem !important; } + padding-top: 3rem !important; + } .pr-xl-5, .px-xl-5 { - padding-right: 3rem !important; } + padding-right: 3rem !important; + } .pb-xl-5, .py-xl-5 { - padding-bottom: 3rem !important; } + padding-bottom: 3rem !important; + } .pl-xl-5, .px-xl-5 { - padding-left: 3rem !important; } + padding-left: 3rem !important; + } + .m-xl-n1 { + margin: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; + } + .m-xl-n3 { + margin: -1rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; + } + .m-xl-n4 { + margin: -1.5rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; + } + .m-xl-n5 { + margin: -3rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; + } .m-xl-auto { - margin: auto !important; } + margin: auto !important; + } .mt-xl-auto, .my-xl-auto { - margin-top: auto !important; } + margin-top: auto !important; + } .mr-xl-auto, .mx-xl-auto { - margin-right: auto !important; } + margin-right: auto !important; + } .mb-xl-auto, .my-xl-auto { - margin-bottom: auto !important; } + margin-bottom: auto !important; + } .ml-xl-auto, .mx-xl-auto { - margin-left: auto !important; } } + 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-align: justify !important; +} + +.text-wrap { + white-space: normal !important; +} .text-nowrap { - white-space: nowrap !important; } + white-space: nowrap !important; +} .text-truncate { overflow: hidden; text-overflow: ellipsis; - white-space: nowrap; } + white-space: nowrap; +} .text-left { - text-align: left !important; } + text-align: left !important; +} .text-right { - text-align: right !important; } + text-align: right !important; +} .text-center { - text-align: center !important; } + text-align: center !important; +} @media (min-width: 576px) { .text-sm-left { - text-align: left !important; } + text-align: left !important; + } .text-sm-right { - text-align: right !important; } + text-align: right !important; + } .text-sm-center { - text-align: center !important; } } + text-align: center !important; + } +} @media (min-width: 768px) { .text-md-left { - text-align: left !important; } + text-align: left !important; + } .text-md-right { - text-align: right !important; } + text-align: right !important; + } .text-md-center { - text-align: center !important; } } + text-align: center !important; + } +} @media (min-width: 992px) { .text-lg-left { - text-align: left !important; } + text-align: left !important; + } .text-lg-right { - text-align: right !important; } + text-align: right !important; + } .text-lg-center { - text-align: center !important; } } + text-align: center !important; + } +} @media (min-width: 1200px) { .text-xl-left { - text-align: left !important; } + text-align: left !important; + } .text-xl-right { - text-align: right !important; } + text-align: right !important; + } .text-xl-center { - text-align: center !important; } } + text-align: center !important; + } +} .text-lowercase { - text-transform: lowercase !important; } + text-transform: lowercase !important; +} .text-uppercase { - text-transform: uppercase !important; } + text-transform: uppercase !important; +} .text-capitalize { - text-transform: capitalize !important; } + text-transform: capitalize !important; +} .font-weight-light { - font-weight: 300 !important; } + font-weight: 300 !important; +} + +.font-weight-lighter { + font-weight: lighter !important; +} .font-weight-normal { - font-weight: 400 !important; } + font-weight: 400 !important; +} .font-weight-bold { - font-weight: 700 !important; } + font-weight: 700 !important; +} + +.font-weight-bolder { + font-weight: bolder !important; +} .font-italic { - font-style: italic !important; } + font-style: italic !important; +} .text-white { - color: #fff !important; } + color: #fff !important; +} .text-primary { - color: #329f80 !important; } + color: #329f80 !important; +} a.text-primary:hover, a.text-primary:focus { - color: #174c3d !important; } + color: #206551 !important; +} .text-secondary { - color: #2284A6 !important; } + color: #2284A6 !important; +} a.text-secondary:hover, a.text-secondary:focus { - color: #19627c !important; } + color: #155267 !important; +} .text-success { - color: #28a745 !important; } + color: #28a745 !important; +} a.text-success:hover, a.text-success:focus { - color: #1e7e34 !important; } + color: #19692c !important; +} .text-info { - color: #17a2b8 !important; } + color: #17a2b8 !important; +} a.text-info:hover, a.text-info:focus { - color: #117a8b !important; } + color: #0f6674 !important; +} .text-warning { - color: #ffc107 !important; } + color: #ffc107 !important; +} a.text-warning:hover, a.text-warning:focus { - color: #d39e00 !important; } + color: #ba8b00 !important; +} .text-danger { - color: #dc3545 !important; } + color: #dc3545 !important; +} a.text-danger:hover, a.text-danger:focus { - color: #bd2130 !important; } + color: #a71d2a !important; +} .text-light { - color: #f8f9fa !important; } + color: #f8f9fa !important; +} a.text-light:hover, a.text-light:focus { - color: #dae0e5 !important; } + color: #cbd3da !important; +} .text-dark { - color: #0f3b21 !important; } + color: #0f3b21 !important; +} a.text-dark:hover, a.text-dark:focus { - color: #1d2124 !important; } + color: black !important; +} + +.text-body { + color: #212529 !important; +} .text-muted { - color: #6c757d !important; } + 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; } + border: 0; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-reset { + color: inherit !important; +} .visible { - visibility: visible !important; } + visibility: visible !important; +} .invisible { - visibility: hidden !important; } + visibility: hidden !important; +} @media print { *, *::before, *::after { text-shadow: none !important; - box-shadow: none !important; } + box-shadow: none !important; + } a:not(.btn) { - text-decoration: underline; } + text-decoration: underline; + } abbr[title]::after { - content: " (" attr(title) ")"; } + content: " (" attr(title) ")"; + } pre { - white-space: pre-wrap !important; } + white-space: pre-wrap !important; + } pre, blockquote { - border: 1px solid #999; - page-break-inside: avoid; } + border: 1px solid #adb5bd; + page-break-inside: avoid; + } thead { - display: table-header-group; } + display: table-header-group; + } tr, img { - page-break-inside: avoid; } + page-break-inside: avoid; + } p, h2, h3 { orphans: 3; - widows: 3; } + widows: 3; + } h2, h3 { - page-break-after: avoid; } + page-break-after: avoid; + } @page { - size: a3; } + size: a3; + } body { - min-width: 992px !important; } + min-width: 992px !important; + } .container { - min-width: 992px !important; } + min-width: 992px !important; + } .navbar { - display: none; } + display: none; + } .badge { - border: 1px solid #000; } + border: 1px solid #000; + } .table { - border-collapse: collapse !important; } - .table td, - .table th { - background-color: #fff !important; } + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } .table-bordered th, .table-bordered td { - border: 1px solid #ddd !important; } } + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; + } +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/BTCPayServer/wwwroot/vendor/bootstrap4/js/bootstrap.bundle.js b/BTCPayServer/wwwroot/vendor/bootstrap4/js/bootstrap.bundle.js index 45b357d36..6fd1000b7 100644 --- a/BTCPayServer/wwwroot/vendor/bootstrap4/js/bootstrap.bundle.js +++ b/BTCPayServer/wwwroot/vendor/bootstrap4/js/bootstrap.bundle.js @@ -1,82 +1,98 @@ /*! - * Bootstrap v4.0.0 (https://getbootstrap.com) + * Bootstrap v4.2.1 (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)); + 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'] : $; + $ = $ && $.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 _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 _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } -function _extends() { - _extends = Object.assign || function (target) { + 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]; + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } + 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; - }; + } - return _extends.apply(this, arguments); -} + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } -function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; -} - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.0): util.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - -var Util = function ($$$1) { + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.2.1): util.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ /** * ------------------------------------------------------------------------ * Private TransitionEnd Helpers * ------------------------------------------------------------------------ */ - var transition = false; - var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) + + 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-zA-Z]+)/)[1].toLowerCase(); + return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); } function getSpecialTransitionEndEvent() { return { - bindType: transition.end, - delegateType: transition.end, + bindType: TRANSITION_END, + delegateType: TRANSITION_END, handle: function handle(event) { - if ($$$1(event.target).is(this)) { + if ($(event.target).is(this)) { return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params } @@ -85,21 +101,11 @@ var Util = function ($$$1) { }; } - function transitionEndTest() { - if (typeof window !== 'undefined' && window.QUnit) { - return false; - } - - return { - end: 'transitionend' - }; - } - function transitionEndEmulator(duration) { var _this = this; var called = false; - $$$1(this).one(Util.TRANSITION_END, function () { + $(this).one(Util.TRANSITION_END, function () { called = true; }); setTimeout(function () { @@ -111,19 +117,8 @@ var Util = function ($$$1) { } function setTransitionEndSupport() { - transition = transitionEndTest(); - $$$1.fn.emulateTransitionEnd = transitionEndEmulator; - - if (Util.supportsTransitionEnd()) { - $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); - } - } - - function escapeId(selector) { - // We escape IDs in case of special selectors (selector = '#myId:something') - // $.escapeSelector does not exist in jQuery < 3 - selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1'); - return selector; + $.fn.emulateTransitionEnd = transitionEndEmulator; + $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); } /** * -------------------------------------------------------------------------- @@ -146,29 +141,41 @@ var Util = function ($$$1) { var selector = element.getAttribute('data-target'); if (!selector || selector === '#') { - selector = element.getAttribute('href') || ''; - } // If it's an ID - - - if (selector.charAt(0) === '#') { - selector = escapeId(selector); + var hrefAttr = element.getAttribute('href'); + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; } - try { - var $selector = $$$1(document).find(selector); - return $selector.length > 0 ? selector : null; - } catch (err) { - return null; - } + return selector && document.querySelector(selector) ? selector : null; + }, + getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { + if (!element) { + return 0; + } // Get transition-duration of the element + + + var transitionDuration = $(element).css('transition-duration'); + var transitionDelay = $(element).css('transition-delay'); + var floatTransitionDuration = parseFloat(transitionDuration); + var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found + + if (!floatTransitionDuration && !floatTransitionDelay) { + return 0; + } // If multiple durations are defined, take the first + + + transitionDuration = transitionDuration.split(',')[0]; + transitionDelay = transitionDelay.split(',')[0]; + return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }, reflow: function reflow(element) { return element.offsetHeight; }, triggerTransitionEnd: function triggerTransitionEnd(element) { - $$$1(element).trigger(transition.end); + $(element).trigger(TRANSITION_END); }, + // TODO: Remove in v5 supportsTransitionEnd: function supportsTransitionEnd() { - return Boolean(transition); + return Boolean(TRANSITION_END); }, isElement: function isElement(obj) { return (obj[0] || obj).nodeType; @@ -185,32 +192,44 @@ var Util = function ($$$1) { } } } + }, + findShadowRoot: function findShadowRoot(element) { + if (!document.documentElement.attachShadow) { + return null; + } // Can find the shadow root otherwise it'll return the document + + + if (typeof element.getRootNode === 'function') { + var root = element.getRootNode(); + return root instanceof ShadowRoot ? root : null; + } + + if (element instanceof ShadowRoot) { + return element; + } // when we don't find a shadow root + + + if (!element.parentNode) { + return null; + } + + return Util.findShadowRoot(element.parentNode); } }; setTransitionEndSupport(); - return Util; -}($); -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.0'; + var VERSION = '4.2.1'; var DATA_KEY = 'bs.alert'; var EVENT_KEY = "." + DATA_KEY; var DATA_API_KEY = '.data-api'; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var TRANSITION_DURATION = 150; + var JQUERY_NO_CONFLICT = $.fn[NAME]; var Selector = { DISMISS: '[data-dismiss="alert"]' }; @@ -243,9 +262,11 @@ var Alert = function ($$$1) { // Public _proto.close = function close(element) { - element = element || this._element; + var rootElement = this._element; - var rootElement = this._getRootElement(element); + if (element) { + rootElement = this._getRootElement(element); + } var customEvent = this._triggerCloseEvent(rootElement); @@ -257,7 +278,7 @@ var Alert = function ($$$1) { }; _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); + $.removeData(this._element, DATA_KEY); this._element = null; }; // Private @@ -267,46 +288,47 @@ var Alert = function ($$$1) { var parent = false; if (selector) { - parent = $$$1(selector)[0]; + parent = document.querySelector(selector); } if (!parent) { - parent = $$$1(element).closest("." + ClassName.ALERT)[0]; + parent = $(element).closest("." + ClassName.ALERT)[0]; } return parent; }; _proto._triggerCloseEvent = function _triggerCloseEvent(element) { - var closeEvent = $$$1.Event(Event.CLOSE); - $$$1(element).trigger(closeEvent); + var closeEvent = $.Event(Event.CLOSE); + $(element).trigger(closeEvent); return closeEvent; }; _proto._removeElement = function _removeElement(element) { var _this = this; - $$$1(element).removeClass(ClassName.SHOW); + $(element).removeClass(ClassName.SHOW); - if (!Util.supportsTransitionEnd() || !$$$1(element).hasClass(ClassName.FADE)) { + if (!$(element).hasClass(ClassName.FADE)) { this._destroyElement(element); return; } - $$$1(element).one(Util.TRANSITION_END, function (event) { + var transitionDuration = Util.getTransitionDurationFromElement(element); + $(element).one(Util.TRANSITION_END, function (event) { return _this._destroyElement(element, event); - }).emulateTransitionEnd(TRANSITION_DURATION); + }).emulateTransitionEnd(transitionDuration); }; _proto._destroyElement = function _destroyElement(element) { - $$$1(element).detach().trigger(Event.CLOSED).remove(); + $(element).detach().trigger(Event.CLOSED).remove(); }; // Static Alert._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { - var $element = $$$1(this); + var $element = $(this); var data = $element.data(DATA_KEY); if (!data) { @@ -336,6 +358,7 @@ var Alert = function ($$$1) { return VERSION; } }]); + return Alert; }(); /** @@ -345,58 +368,48 @@ var Alert = function ($$$1) { */ - $$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Alert._jQueryInterface; - $$$1.fn[NAME].Constructor = Alert; + $.fn[NAME] = Alert._jQueryInterface; + $.fn[NAME].Constructor = Alert; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; return Alert._jQueryInterface; }; - return Alert; -}($); - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.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 = { + + var NAME$1 = 'button'; + var VERSION$1 = '4.2.1'; + var DATA_KEY$1 = 'bs.button'; + var EVENT_KEY$1 = "." + DATA_KEY$1; + var DATA_API_KEY$1 = '.data-api'; + var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1]; + var ClassName$1 = { ACTIVE: 'active', BUTTON: 'btn', FOCUS: 'focus' }; - var Selector = { + var Selector$1 = { DATA_TOGGLE_CARROT: '[data-toggle^="button"]', DATA_TOGGLE: '[data-toggle="buttons"]', - INPUT: 'input', + INPUT: 'input:not([type="hidden"])', 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) + var Event$1 = { + CLICK_DATA_API: "click" + EVENT_KEY$1 + DATA_API_KEY$1, + FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1) /** * ------------------------------------------------------------------------ * Class Definition @@ -419,20 +432,20 @@ var Button = function ($$$1) { _proto.toggle = function toggle() { var triggerChangeEvent = true; var addAriaPressed = true; - var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; + var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0]; if (rootElement) { - var input = $$$1(this._element).find(Selector.INPUT)[0]; + var input = this._element.querySelector(Selector$1.INPUT); if (input) { if (input.type === 'radio') { - if (input.checked && $$$1(this._element).hasClass(ClassName.ACTIVE)) { + if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) { triggerChangeEvent = false; } else { - var activeElement = $$$1(rootElement).find(Selector.ACTIVE)[0]; + var activeElement = rootElement.querySelector(Selector$1.ACTIVE); if (activeElement) { - $$$1(activeElement).removeClass(ClassName.ACTIVE); + $(activeElement).removeClass(ClassName$1.ACTIVE); } } } @@ -442,8 +455,8 @@ var Button = function ($$$1) { return; } - input.checked = !$$$1(this._element).hasClass(ClassName.ACTIVE); - $$$1(input).trigger('change'); + input.checked = !this._element.classList.contains(ClassName$1.ACTIVE); + $(input).trigger('change'); } input.focus(); @@ -452,27 +465,27 @@ var Button = function ($$$1) { } if (addAriaPressed) { - this._element.setAttribute('aria-pressed', !$$$1(this._element).hasClass(ClassName.ACTIVE)); + this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE)); } if (triggerChangeEvent) { - $$$1(this._element).toggleClass(ClassName.ACTIVE); + $(this._element).toggleClass(ClassName$1.ACTIVE); } }; _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); + $.removeData(this._element, DATA_KEY$1); this._element = null; }; // Static Button._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + var data = $(this).data(DATA_KEY$1); if (!data) { data = new Button(this); - $$$1(this).data(DATA_KEY, data); + $(this).data(DATA_KEY$1, data); } if (config === 'toggle') { @@ -484,9 +497,10 @@ var Button = function ($$$1) { _createClass(Button, null, [{ key: "VERSION", get: function get() { - return VERSION; + return VERSION$1; } }]); + return Button; }(); /** @@ -496,18 +510,18 @@ var Button = function ($$$1) { */ - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { event.preventDefault(); var button = event.target; - if (!$$$1(button).hasClass(ClassName.BUTTON)) { - button = $$$1(button).closest(Selector.BUTTON); + if (!$(button).hasClass(ClassName$1.BUTTON)) { + button = $(button).closest(Selector$1.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)); + Button._jQueryInterface.call($(button), 'toggle'); + }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) { + var button = $(event.target).closest(Selector$1.BUTTON)[0]; + $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type)); }); /** * ------------------------------------------------------------------------ @@ -515,56 +529,48 @@ var Button = function ($$$1) { * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Button._jQueryInterface; - $$$1.fn[NAME].Constructor = Button; + $.fn[NAME$1] = Button._jQueryInterface; + $.fn[NAME$1].Constructor = Button; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME$1].noConflict = function () { + $.fn[NAME$1] = JQUERY_NO_CONFLICT$1; return Button._jQueryInterface; }; - return Button; -}($); - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.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 TRANSITION_DURATION = 600; + + var NAME$2 = 'carousel'; + var VERSION$2 = '4.2.1'; + var DATA_KEY$2 = 'bs.carousel'; + var EVENT_KEY$2 = "." + DATA_KEY$2; + var DATA_API_KEY$2 = '.data-api'; + var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2]; 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 SWIPE_THRESHOLD = 40; var Default = { interval: 5000, keyboard: true, slide: false, pause: 'hover', - wrap: true + wrap: true, + touch: true }; var DefaultType = { interval: '(number|boolean)', keyboard: 'boolean', slide: '(boolean|string)', pause: '(string|boolean)', - wrap: 'boolean' + wrap: 'boolean', + touch: 'boolean' }; var Direction = { NEXT: 'next', @@ -572,17 +578,22 @@ var Carousel = function ($$$1) { 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 Event$2 = { + SLIDE: "slide" + EVENT_KEY$2, + SLID: "slid" + EVENT_KEY$2, + KEYDOWN: "keydown" + EVENT_KEY$2, + MOUSEENTER: "mouseenter" + EVENT_KEY$2, + MOUSELEAVE: "mouseleave" + EVENT_KEY$2, + TOUCHSTART: "touchstart" + EVENT_KEY$2, + TOUCHMOVE: "touchmove" + EVENT_KEY$2, + TOUCHEND: "touchend" + EVENT_KEY$2, + POINTERDOWN: "pointerdown" + EVENT_KEY$2, + POINTERUP: "pointerup" + EVENT_KEY$2, + DRAG_START: "dragstart" + EVENT_KEY$2, + LOAD_DATA_API: "load" + EVENT_KEY$2 + DATA_API_KEY$2, + CLICK_DATA_API: "click" + EVENT_KEY$2 + DATA_API_KEY$2 }; - var ClassName = { + var ClassName$2 = { CAROUSEL: 'carousel', ACTIVE: 'active', SLIDE: 'slide', @@ -590,16 +601,22 @@ var Carousel = function ($$$1) { LEFT: 'carousel-item-left', NEXT: 'carousel-item-next', PREV: 'carousel-item-prev', - ITEM: 'carousel-item' + ITEM: 'carousel-item', + POINTER_EVENT: 'pointer-event' }; - var Selector = { + var Selector$2 = { ACTIVE: '.active', ACTIVE_ITEM: '.active.carousel-item', ITEM: '.carousel-item', + ITEM_IMG: '.carousel-item img', NEXT_PREV: '.carousel-item-next, .carousel-item-prev', INDICATORS: '.carousel-indicators', DATA_SLIDE: '[data-slide], [data-slide-to]', DATA_RIDE: '[data-ride="carousel"]' + }; + var PointerType = { + TOUCH: 'touch', + PEN: 'pen' /** * ------------------------------------------------------------------------ * Class Definition @@ -618,9 +635,13 @@ var Carousel = function ($$$1) { this._isPaused = false; this._isSliding = false; this.touchTimeout = null; + this.touchStartX = 0; + this.touchDeltaX = 0; this._config = this._getConfig(config); - this._element = $$$1(element)[0]; - this._indicatorsElement = $$$1(this._element).find(Selector.INDICATORS)[0]; + this._element = element; + this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS); + this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; + this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); this._addEventListeners(); } // Getters @@ -638,7 +659,7 @@ var Carousel = function ($$$1) { _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') { + if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { this.next(); } }; @@ -654,7 +675,7 @@ var Carousel = function ($$$1) { this._isPaused = true; } - if ($$$1(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { + if (this._element.querySelector(Selector$2.NEXT_PREV)) { Util.triggerTransitionEnd(this._element); this.cycle(true); } @@ -681,7 +702,7 @@ var Carousel = function ($$$1) { _proto.to = function to(index) { var _this = this; - this._activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; + this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); var activeIndex = this._getItemIndex(this._activeElement); @@ -690,7 +711,7 @@ var Carousel = function ($$$1) { } if (this._isSliding) { - $$$1(this._element).one(Event.SLID, function () { + $(this._element).one(Event$2.SLID, function () { return _this.to(index); }); return; @@ -708,8 +729,8 @@ var Carousel = function ($$$1) { }; _proto.dispose = function dispose() { - $$$1(this._element).off(EVENT_KEY); - $$$1.removeData(this._element, DATA_KEY); + $(this._element).off(EVENT_KEY$2); + $.removeData(this._element, DATA_KEY$2); this._items = null; this._config = null; this._element = null; @@ -722,28 +743,82 @@ var Carousel = function ($$$1) { _proto._getConfig = function _getConfig(config) { - config = _extends({}, Default, config); - Util.typeCheckConfig(NAME, config, DefaultType); + config = _objectSpread({}, Default, config); + Util.typeCheckConfig(NAME$2, config, DefaultType); return config; }; + _proto._handleSwipe = function _handleSwipe() { + var absDeltax = Math.abs(this.touchDeltaX); + + if (absDeltax <= SWIPE_THRESHOLD) { + return; + } + + var direction = absDeltax / this.touchDeltaX; // swipe left + + if (direction > 0) { + this.prev(); + } // swipe right + + + if (direction < 0) { + this.next(); + } + }; + _proto._addEventListeners = function _addEventListeners() { var _this2 = this; if (this._config.keyboard) { - $$$1(this._element).on(Event.KEYDOWN, function (event) { + $(this._element).on(Event$2.KEYDOWN, function (event) { return _this2._keydown(event); }); } if (this._config.pause === 'hover') { - $$$1(this._element).on(Event.MOUSEENTER, function (event) { + $(this._element).on(Event$2.MOUSEENTER, function (event) { return _this2.pause(event); - }).on(Event.MOUSELEAVE, function (event) { + }).on(Event$2.MOUSELEAVE, function (event) { return _this2.cycle(event); }); + } - if ('ontouchstart' in document.documentElement) { + this._addTouchEventListeners(); + }; + + _proto._addTouchEventListeners = function _addTouchEventListeners() { + var _this3 = this; + + if (!this._touchSupported) { + return; + } + + var start = function start(event) { + if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { + _this3.touchStartX = event.originalEvent.clientX; + } else if (!_this3._pointerEvent) { + _this3.touchStartX = event.originalEvent.touches[0].clientX; + } + }; + + var move = function move(event) { + // ensure swiping with one touch and not pinching + if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { + _this3.touchDeltaX = 0; + } else { + _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; + } + }; + + var end = function end(event) { + if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { + _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; + } + + _this3._handleSwipe(); + + if (_this3._config.pause === 'hover') { // 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; @@ -751,18 +826,41 @@ var Carousel = function ($$$1) { // (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(); + _this3.pause(); - if (_this2.touchTimeout) { - clearTimeout(_this2.touchTimeout); - } + if (_this3.touchTimeout) { + clearTimeout(_this3.touchTimeout); + } - _this2.touchTimeout = setTimeout(function (event) { - return _this2.cycle(event); - }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); - }); + _this3.touchTimeout = setTimeout(function (event) { + return _this3.cycle(event); + }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); } + }; + + $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) { + return e.preventDefault(); + }); + + if (this._pointerEvent) { + $(this._element).on(Event$2.POINTERDOWN, function (event) { + return start(event); + }); + $(this._element).on(Event$2.POINTERUP, function (event) { + return end(event); + }); + + this._element.classList.add(ClassName$2.POINTER_EVENT); + } else { + $(this._element).on(Event$2.TOUCHSTART, function (event) { + return start(event); + }); + $(this._element).on(Event$2.TOUCHMOVE, function (event) { + return move(event); + }); + $(this._element).on(Event$2.TOUCHEND, function (event) { + return end(event); + }); } }; @@ -787,7 +885,7 @@ var Carousel = function ($$$1) { }; _proto._getItemIndex = function _getItemIndex(element) { - this._items = $$$1.makeArray($$$1(element).parent().find(Selector.ITEM)); + this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : []; return this._items.indexOf(element); }; @@ -812,34 +910,35 @@ var Carousel = function ($$$1) { _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { var targetIndex = this._getItemIndex(relatedTarget); - var fromIndex = this._getItemIndex($$$1(this._element).find(Selector.ACTIVE_ITEM)[0]); + var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM)); - var slideEvent = $$$1.Event(Event.SLIDE, { + var slideEvent = $.Event(Event$2.SLIDE, { relatedTarget: relatedTarget, direction: eventDirectionName, from: fromIndex, to: targetIndex }); - $$$1(this._element).trigger(slideEvent); + $(this._element).trigger(slideEvent); return slideEvent; }; _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { if (this._indicatorsElement) { - $$$1(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE)); + $(indicators).removeClass(ClassName$2.ACTIVE); var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; if (nextIndicator) { - $$$1(nextIndicator).addClass(ClassName.ACTIVE); + $(nextIndicator).addClass(ClassName$2.ACTIVE); } } }; _proto._slide = function _slide(direction, element) { - var _this3 = this; + var _this4 = this; - var activeElement = $$$1(this._element).find(Selector.ACTIVE_ITEM)[0]; + var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM); var activeElementIndex = this._getItemIndex(activeElement); @@ -853,16 +952,16 @@ var Carousel = function ($$$1) { var eventDirectionName; if (direction === Direction.NEXT) { - directionalClassName = ClassName.LEFT; - orderClassName = ClassName.NEXT; + directionalClassName = ClassName$2.LEFT; + orderClassName = ClassName$2.NEXT; eventDirectionName = Direction.LEFT; } else { - directionalClassName = ClassName.RIGHT; - orderClassName = ClassName.PREV; + directionalClassName = ClassName$2.RIGHT; + orderClassName = ClassName$2.PREV; eventDirectionName = Direction.RIGHT; } - if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { + if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) { this._isSliding = false; return; } @@ -886,31 +985,41 @@ var Carousel = function ($$$1) { this._setActiveIndicatorElement(nextElement); - var slidEvent = $$$1.Event(Event.SLID, { + var slidEvent = $.Event(Event$2.SLID, { relatedTarget: nextElement, direction: eventDirectionName, from: activeElementIndex, to: nextElementIndex }); - if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.SLIDE)) { - $$$1(nextElement).addClass(orderClassName); + if ($(this._element).hasClass(ClassName$2.SLIDE)) { + $(nextElement).addClass(orderClassName); Util.reflow(nextElement); - $$$1(activeElement).addClass(directionalClassName); - $$$1(nextElement).addClass(directionalClassName); - $$$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; + $(activeElement).addClass(directionalClassName); + $(nextElement).addClass(directionalClassName); + var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); + + if (nextElementInterval) { + this._config.defaultInterval = this._config.defaultInterval || this._config.interval; + this._config.interval = nextElementInterval; + } else { + this._config.interval = this._config.defaultInterval || this._config.interval; + } + + var transitionDuration = Util.getTransitionDurationFromElement(activeElement); + $(activeElement).one(Util.TRANSITION_END, function () { + $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName$2.ACTIVE); + $(activeElement).removeClass(ClassName$2.ACTIVE + " " + orderClassName + " " + directionalClassName); + _this4._isSliding = false; setTimeout(function () { - return $$$1(_this3._element).trigger(slidEvent); + return $(_this4._element).trigger(slidEvent); }, 0); - }).emulateTransitionEnd(TRANSITION_DURATION); + }).emulateTransitionEnd(transitionDuration); } else { - $$$1(activeElement).removeClass(ClassName.ACTIVE); - $$$1(nextElement).addClass(ClassName.ACTIVE); + $(activeElement).removeClass(ClassName$2.ACTIVE); + $(nextElement).addClass(ClassName$2.ACTIVE); this._isSliding = false; - $$$1(this._element).trigger(slidEvent); + $(this._element).trigger(slidEvent); } if (isCycling) { @@ -921,19 +1030,19 @@ var Carousel = function ($$$1) { Carousel._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + var data = $(this).data(DATA_KEY$2); - var _config = _extends({}, Default, $$$1(this).data()); + var _config = _objectSpread({}, Default, $(this).data()); if (typeof config === 'object') { - _config = _extends({}, _config, config); + _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); + $(this).data(DATA_KEY$2, data); } if (typeof config === 'number') { @@ -958,23 +1067,24 @@ var Carousel = function ($$$1) { return; } - var target = $$$1(selector)[0]; + var target = $(selector)[0]; - if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { + if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) { return; } - var config = _extends({}, $$$1(target).data(), $$$1(this).data()); + var config = _objectSpread({}, $(target).data(), $(this).data()); + var slideIndex = this.getAttribute('data-slide-to'); if (slideIndex) { config.interval = false; } - Carousel._jQueryInterface.call($$$1(target), config); + Carousel._jQueryInterface.call($(target), config); if (slideIndex) { - $$$1(target).data(DATA_KEY).to(slideIndex); + $(target).data(DATA_KEY$2).to(slideIndex); } event.preventDefault(); @@ -983,7 +1093,7 @@ var Carousel = function ($$$1) { _createClass(Carousel, null, [{ key: "VERSION", get: function get() { - return VERSION; + return VERSION$2; } }, { key: "Default", @@ -991,6 +1101,7 @@ var Carousel = function ($$$1) { return Default; } }]); + return Carousel; }(); /** @@ -1000,13 +1111,15 @@ var Carousel = function ($$$1) { */ - $$$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); + $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler); + $(window).on(Event$2.LOAD_DATA_API, function () { + var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE)); + + for (var i = 0, len = carousels.length; i < len; i++) { + var $carousel = $(carousels[i]); Carousel._jQueryInterface.call($carousel, $carousel.data()); - }); + } }); /** * ------------------------------------------------------------------------ @@ -1014,53 +1127,42 @@ var Carousel = function ($$$1) { * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Carousel._jQueryInterface; - $$$1.fn[NAME].Constructor = Carousel; + $.fn[NAME$2] = Carousel._jQueryInterface; + $.fn[NAME$2].Constructor = Carousel; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME$2].noConflict = function () { + $.fn[NAME$2] = JQUERY_NO_CONFLICT$2; return Carousel._jQueryInterface; }; - return Carousel; -}($); - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.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 TRANSITION_DURATION = 600; - var Default = { + + var NAME$3 = 'collapse'; + var VERSION$3 = '4.2.1'; + var DATA_KEY$3 = 'bs.collapse'; + var EVENT_KEY$3 = "." + DATA_KEY$3; + var DATA_API_KEY$3 = '.data-api'; + var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3]; + var Default$1 = { toggle: true, parent: '' }; - var DefaultType = { + var DefaultType$1 = { 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 Event$3 = { + SHOW: "show" + EVENT_KEY$3, + SHOWN: "shown" + EVENT_KEY$3, + HIDE: "hide" + EVENT_KEY$3, + HIDDEN: "hidden" + EVENT_KEY$3, + CLICK_DATA_API: "click" + EVENT_KEY$3 + DATA_API_KEY$3 }; - var ClassName = { + var ClassName$3 = { SHOW: 'show', COLLAPSE: 'collapse', COLLAPSING: 'collapsing', @@ -1070,7 +1172,7 @@ var Collapse = function ($$$1) { WIDTH: 'width', HEIGHT: 'height' }; - var Selector = { + var Selector$3 = { ACTIVES: '.show, .collapsing', DATA_TOGGLE: '[data-toggle="collapse"]' /** @@ -1088,14 +1190,17 @@ var Collapse = function ($$$1) { 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); + this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); + var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE)); - for (var i = 0; i < tabToggles.length; i++) { - var elem = tabToggles[i]; + for (var i = 0, len = toggleList.length; i < len; i++) { + var elem = toggleList[i]; var selector = Util.getSelectorFromElement(elem); + var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { + return foundElem === element; + }); - if (selector !== null && $$$1(selector).filter(element).length > 0) { + if (selector !== null && filterElement.length > 0) { this._selector = selector; this._triggerArray.push(elem); @@ -1118,7 +1223,7 @@ var Collapse = function ($$$1) { // Public _proto.toggle = function toggle() { - if ($$$1(this._element).hasClass(ClassName.SHOW)) { + if ($(this._element).hasClass(ClassName$3.SHOW)) { this.hide(); } else { this.show(); @@ -1128,7 +1233,7 @@ var Collapse = function ($$$1) { _proto.show = function show() { var _this = this; - if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { + if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) { return; } @@ -1136,7 +1241,13 @@ var Collapse = function ($$$1) { var activesData; if (this._parent) { - actives = $$$1.makeArray($$$1(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]")); + actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) { + if (typeof _this._config.parent === 'string') { + return elem.getAttribute('data-parent') === _this._config.parent; + } + + return elem.classList.contains(ClassName$3.COLLAPSE); + }); if (actives.length === 0) { actives = null; @@ -1144,68 +1255,64 @@ var Collapse = function ($$$1) { } if (actives) { - activesData = $$$1(actives).not(this._selector).data(DATA_KEY); + activesData = $(actives).not(this._selector).data(DATA_KEY$3); if (activesData && activesData._isTransitioning) { return; } } - var startEvent = $$$1.Event(Event.SHOW); - $$$1(this._element).trigger(startEvent); + var startEvent = $.Event(Event$3.SHOW); + $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; } if (actives) { - Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); + Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); if (!activesData) { - $$$1(actives).data(DATA_KEY, null); + $(actives).data(DATA_KEY$3, null); } } var dimension = this._getDimension(); - $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); + $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING); this._element.style[dimension] = 0; - if (this._triggerArray.length > 0) { - $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); + if (this._triggerArray.length) { + $(this._triggerArray).removeClass(ClassName$3.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).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW); _this._element.style[dimension] = ''; _this.setTransitioning(false); - $$$1(_this._element).trigger(Event.SHOWN); + $(_this._element).trigger(Event$3.SHOWN); }; - if (!Util.supportsTransitionEnd()) { - complete(); - return; - } - var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var scrollSize = "scroll" + capitalizedDimension; - $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $(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)) { + if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) { return; } - var startEvent = $$$1.Event(Event.HIDE); - $$$1(this._element).trigger(startEvent); + var startEvent = $.Event(Event$3.HIDE); + $(this._element).trigger(startEvent); if (startEvent.isDefaultPrevented()) { return; @@ -1215,18 +1322,19 @@ var Collapse = function ($$$1) { 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); + $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW); + var triggerArrayLength = this._triggerArray.length; - if (this._triggerArray.length > 0) { - for (var i = 0; i < this._triggerArray.length; i++) { + if (triggerArrayLength > 0) { + for (var i = 0; i < triggerArrayLength; i++) { var trigger = this._triggerArray[i]; var selector = Util.getSelectorFromElement(trigger); if (selector !== null) { - var $elem = $$$1(selector); + var $elem = $([].slice.call(document.querySelectorAll(selector))); - if (!$elem.hasClass(ClassName.SHOW)) { - $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); + if (!$elem.hasClass(ClassName$3.SHOW)) { + $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false); } } } @@ -1237,17 +1345,12 @@ var Collapse = function ($$$1) { var complete = function complete() { _this2.setTransitioning(false); - $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); + $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN); }; this._element.style[dimension] = ''; - - if (!Util.supportsTransitionEnd()) { - complete(); - return; - } - - $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); }; _proto.setTransitioning = function setTransitioning(isTransitioning) { @@ -1255,7 +1358,7 @@ var Collapse = function ($$$1) { }; _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); + $.removeData(this._element, DATA_KEY$3); this._config = null; this._parent = null; this._element = null; @@ -1265,22 +1368,22 @@ var Collapse = function ($$$1) { _proto._getConfig = function _getConfig(config) { - config = _extends({}, Default, config); + config = _objectSpread({}, Default$1, config); config.toggle = Boolean(config.toggle); // Coerce string values - Util.typeCheckConfig(NAME, config, DefaultType); + Util.typeCheckConfig(NAME$3, config, DefaultType$1); return config; }; _proto._getDimension = function _getDimension() { - var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); + var hasWidth = $(this._element).hasClass(Dimension.WIDTH); return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; }; _proto._getParent = function _getParent() { var _this3 = this; - var parent = null; + var parent; if (Util.isElement(this._config.parent)) { parent = this._config.parent; // It's a jQuery object @@ -1289,38 +1392,37 @@ var Collapse = function ($$$1) { parent = this._config.parent[0]; } } else { - parent = $$$1(this._config.parent)[0]; + parent = document.querySelector(this._config.parent); } var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; - $$$1(parent).find(selector).each(function (i, element) { + var children = [].slice.call(parent.querySelectorAll(selector)); + $(children).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); + var isOpen = $(element).hasClass(ClassName$3.SHOW); - if (triggerArray.length > 0) { - $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); - } + if (triggerArray.length) { + $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); } }; // Static Collapse._getTargetFromElement = function _getTargetFromElement(element) { var selector = Util.getSelectorFromElement(element); - return selector ? $$$1(selector)[0] : null; + return selector ? document.querySelector(selector) : null; }; Collapse._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { - var $this = $$$1(this); - var data = $this.data(DATA_KEY); + var $this = $(this); + var data = $this.data(DATA_KEY$3); - var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config); + var _config = _objectSpread({}, Default$1, $this.data(), typeof config === 'object' && config ? config : {}); if (!data && _config.toggle && /show|hide/.test(config)) { _config.toggle = false; @@ -1328,7 +1430,7 @@ var Collapse = function ($$$1) { if (!data) { data = new Collapse(this, _config); - $this.data(DATA_KEY, data); + $this.data(DATA_KEY$3, data); } if (typeof config === 'string') { @@ -1344,14 +1446,15 @@ var Collapse = function ($$$1) { _createClass(Collapse, null, [{ key: "VERSION", get: function get() { - return VERSION; + return VERSION$3; } }, { key: "Default", get: function get() { - return Default; + return Default$1; } }]); + return Collapse; }(); /** @@ -1361,17 +1464,18 @@ var Collapse = function ($$$1) { */ - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + $(document).on(Event$3.CLICK_DATA_API, Selector$3.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 $trigger = $(this); var selector = Util.getSelectorFromElement(this); - $$$1(selector).each(function () { - var $target = $$$1(this); - var data = $target.data(DATA_KEY); + var selectors = [].slice.call(document.querySelectorAll(selector)); + $(selectors).each(function () { + var $target = $(this); + var data = $target.data(DATA_KEY$3); var config = data ? 'toggle' : $trigger.data(); Collapse._jQueryInterface.call($target, config); @@ -1383,2471 +1487,2596 @@ var Collapse = function ($$$1) { * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Collapse._jQueryInterface; - $$$1.fn[NAME].Constructor = Collapse; + $.fn[NAME$3] = Collapse._jQueryInterface; + $.fn[NAME$3].Constructor = Collapse; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME$3].noConflict = function () { + $.fn[NAME$3] = JQUERY_NO_CONFLICT$3; return Collapse._jQueryInterface; }; - return Collapse; -}($); + /**! + * @fileOverview Kickass library to create and place poppers near their reference elements. + * @version 1.14.6 + * @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'; -/**! - * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.12.9 - * @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; + 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) { + 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 window = element.ownerDocument.defaultView; + var css = window.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)); + } + + var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); + var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); + + /** + * Determines if the browser is Internet Explorer + * @method + * @memberof Popper.Utils + * @param {Number} version to check + * @returns {Boolean} isIE + */ + function isIE(version) { + if (version === 11) { + return isIE11; + } + if (version === 10) { + return isIE10; + } + return isIE11 || isIE10; + } + + /** + * 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 || null; + // 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 TH, TD or TABLE in case + // no offsetParent is present, I hate this job... + if (['TH', '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) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); + } + + function getWindowSizes(document) { + 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(element.ownerDocument) : {}; + 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 && isHTML) { + 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(popper.ownerDocument), + 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 + padding = padding || 0; + var isPaddingNumber = typeof padding === 'number'; + boundaries.left += isPaddingNumber ? padding : padding.left || 0; + boundaries.top += isPaddingNumber ? padding : padding.top || 0; + boundaries.right -= isPaddingNumber ? padding : padding.right || 0; + boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; + + 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 window = element.ownerDocument.defaultView; + var styles = window.getComputedStyle(element); + var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); + var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); + 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; } - 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 data = { + instance: this, + styles: {}, + arrowStyles: {}, + attributes: {}, + flipped: false, + offsets: {} + }; -var supportsMicroTasks = isBrowser && window.Promise; + // compute reference element offsets + data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); -/** -* 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; + // 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); -/** - * 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]'; -} + // store the computed placement inside `originalPlacement` + data.originalPlacement = data.placement; -/** - * 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; -} + data.positionFixed = this.options.positionFixed; -/** - * 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; -} + // compute the popper offsets + data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); -/** - * 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; - } + data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; - switch (element.nodeName) { - case 'HTML': - case 'BODY': - return element.ownerDocument.body; - case '#document': - return element.body; - } + // run the modifiers + data = runModifiers(this.modifiers, data); - // 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)/.test(overflow + overflowY + overflowX)) { - return element; - } - - return getScrollParent(getParentNode(element)); -} - -/** - * Returns the offset parent of the given element - * @method - * @memberof Popper.Utils - * @argument {Element} element - * @returns {Element} offset parent - */ -function getOffsetParent(element) { - // NOTE: 1 DOM access here - var offsetParent = element && element.offsetParent; - var nodeName = offsetParent && offsetParent.nodeName; - - if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { - if (element) { - return element.ownerDocument.documentElement; - } - - return 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); -} - -/** - * Tells if you are running Internet Explorer 10 - * @method - * @memberof Popper.Utils - * @returns {Boolean} isIE10 - */ -var isIE10 = undefined; - -var isIE10$1 = function () { - if (isIE10 === undefined) { - isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1; - } - return isIE10; -}; - -function getSize(axis, body, html, computedStyle) { - return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? 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 = isIE10$1() && 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$1 = 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$1({}, 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 - if (isIE10$1()) { - try { - 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; - } catch (err) {} - } else { - rect = element.getBoundingClientRect(); - } - - 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 isIE10 = isIE10$1(); - 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); - - 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 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { - offsets = includeScroll(offsets, parent); - } - - return offsets; -} - -function getViewportOffsetRectRelativeToArtbitraryNode(element) { - 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 = getScroll(html); - var scrollLeft = getScroll(html, 'left'); - - 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)); -} - -/** - * 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 - * @returns {Object} Coordinates of the boundaries - */ -function getBoundaries(popper, reference, padding, boundariesElement) { - // NOTE: 1 DOM access here - var boundaries = { top: 0, left: 0 }; - var offsetParent = findCommonOffsetParent(popper, reference); - - // Handle viewport case - if (boundariesElement === 'viewport') { - boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent); - } 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; + // 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 { - boundariesNode = boundariesElement; - } - - var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent); - - // 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; + this.options.onUpdate(data); } } - // 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$1({ - 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) - * @returns {Object} An object containing the offsets which will be applied to the popper - */ -function getReferenceOffsets(state, popper, reference) { - var commonOffsetParent = findCommonOffsetParent(popper, reference); - return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent); -} - -/** - * 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; + /** + * 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; }); } - // 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); - - // 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; - - // compute the popper offsets - data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); - data.offsets.popper.position = '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 - 1; 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.left = ''; - this.popper.style.position = ''; - this.popper.style.top = ''; - 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); - - // 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: '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$1({}, attributes, data.attributes); - data.styles = _extends$1({}, styles, data.styles); - data.arrowStyles = _extends$1({}, 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); - - 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]; + /** + * 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; + } - if (flippedVariation) { - variation = getOppositeVariation(variation); + /** + * Destroys 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'; } - - 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$1({}, 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]); + element.style[prop] = styles[prop] + unit; + }); } - 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; + /** + * 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 { - 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); + element.removeAttribute(prop); } }); - }); - 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]; - } + /** + * @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); - data.popper = popper; - return data; -} + // 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); -/** - * @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); - 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); + // 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 Popper.Utils + * @argument {Object} data - The data object generated by `update` method + * @argument {Boolean} shouldRound - If the offsets should be rounded at all + * @returns {Object} The popper's position offsets rounded + * + * The tale of pixel-perfect positioning. It's still not 100% perfect, but as + * good as it can be within reason. + * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 + * + * Low DPI screens cause a popper to be blurry if not using full pixels (Safari + * as well on High DPI screens). + * + * Firefox prefers no rounding for positioning and does not have blurriness on + * high DPI screens. + * + * Only horizontal placement and left/right values need to be considered. + */ + function getRoundedOffsets(data, shouldRound) { + var _data$offsets = data.offsets, + popper = _data$offsets.popper, + reference = _data$offsets.reference; + + + var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; + var isVariation = data.placement.indexOf('-') !== -1; + var sameWidthOddness = reference.width % 2 === popper.width % 2; + var bothOddWidth = reference.width % 2 === 1 && popper.width % 2 === 1; + var noRound = function noRound(v) { + return v; + }; + + var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthOddness ? Math.round : Math.floor; + var verticalToInteger = !shouldRound ? noRound : Math.round; + + return { + left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), + top: verticalToInteger(popper.top), + bottom: verticalToInteger(popper.bottom), + right: horizontalToInteger(popper.right) + }; + } + + var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); + + /** + * @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 + }; + + var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); + + 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') { + // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) + // and not the bottom of the html element + if (offsetParent.nodeName === 'HTML') { + top = -offsetParent.clientHeight + offsets.bottom; + } else { + top = -offsetParentRect.height + offsets.bottom; + } + } else { + top = offsets.top; + } + if (sideB === 'right') { + if (offsetParent.nodeName === 'HTML') { + left = -offsetParent.clientWidth + offsets.right; + } else { + 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 conjunction + // + + // 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-end` (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' }; - order.forEach(function (placement) { - var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; - popper = _extends$1({}, popper, check[side](placement)); - }); + /** + * @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; + } - data.offsets.popper = popper; + 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; + } - return data; -} + var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); -/** - * @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]; + var placement = data.placement.split('-')[0]; + var placementOpposite = getOppositePlacement(placement); + var variation = data.placement.split('-')[1] || ''; - // if shift shiftvariation is specified, run the modifier - if (shiftvariation) { + 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, - reference = _data$offsets.reference, - popper = _data$offsets.popper; + popper = _data$offsets.popper, + reference = _data$offsets.reference; - var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; - var side = isVertical ? 'left' : 'top'; + 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'; - var shiftOffsets = { - start: defineProperty({}, side, reference[side]), - end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) - }; + 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]); + } - data.offsets.popper = _extends$1({}, 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; + /** + * 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 (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; + // If it's not a number it's an operator, I guess + if (!value) { + return str; } - 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', - - /** - * 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$1({}, 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$1({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { - _this.options.modifiers[name] = _extends$1({}, 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$1({ - 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); + if (unit.indexOf('%') === 0) { + var element = void 0; + switch (unit) { + case '%p': + element = popperOffsets; + break; + case '%': + case '%r': + default: + element = referenceOffsets; } - }); - // 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(); + 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; } - - 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 + /** + * 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; - 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); + // 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); + } + + // NOTE: DOM access here + // resets the popper's position so that the document size can be calculated excluding + // the size of the popper element itself + var transformProp = getSupportedPropertyName('transform'); + var popperStyles = data.instance.popper.style; // assignment to help minification + var top = popperStyles.top, + left = popperStyles.left, + transform = popperStyles[transformProp]; + + popperStyles.top = ''; + popperStyles.left = ''; + popperStyles[transformProp] = ''; + + var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); + + // NOTE: DOM access here + // restores the original style properties after the offsets have been computed + popperStyles.top = top; + popperStyles.left = left; + popperStyles[transformProp] = transform; + + 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 = { /** - * Schedule an update, it will run on the next UI update available - * @method scheduleUpdate - * @memberof Popper + * 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 + }, /** - * 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`. + * The `offset` modifier can shift your popper on both its axis. * - * **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 + * It accepts the following units: + * - `px` or unit-less, 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. + * > You can read more on this at 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 + }, - }]); - return Popper; -}(); + /** + * Modifier used to prevent the popper from being positioned outside the boundary. + * + * A 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 always has 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' + }, -/** - * 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. - */ + /** + * Modifier used to make sure the reference and its popper stay near each other + * without leaving any gap between the two. Especially useful when the arrow is + * enabled and you want to ensure that it points 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 conjunction 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 your 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 information used by Popper.js. + * This object is 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 overridden using the `options` argument of Popper.js.
+ * To override an option, simply pass an object with the same + * structure of the `options` object, as the 3rd argument. For 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, it 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, it 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 () { + /** + * Creates 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 the 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 -Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; -Popper.placements = placements; -Popper.Defaults = Defaults; + 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); + } -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.0): dropdown.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ + /** + * Schedules 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; -var Dropdown = function ($$$1) { /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'dropdown'; - var VERSION = '4.0.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 NAME$4 = 'dropdown'; + var VERSION$4 = '4.2.1'; + var DATA_KEY$4 = 'bs.dropdown'; + var EVENT_KEY$4 = "." + DATA_KEY$4; + var DATA_API_KEY$4 = '.data-api'; + var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4]; var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key @@ -3861,17 +4090,17 @@ var Dropdown = function ($$$1) { 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 Event$4 = { + HIDE: "hide" + EVENT_KEY$4, + HIDDEN: "hidden" + EVENT_KEY$4, + SHOW: "show" + EVENT_KEY$4, + SHOWN: "shown" + EVENT_KEY$4, + CLICK: "click" + EVENT_KEY$4, + CLICK_DATA_API: "click" + EVENT_KEY$4 + DATA_API_KEY$4, + KEYDOWN_DATA_API: "keydown" + EVENT_KEY$4 + DATA_API_KEY$4, + KEYUP_DATA_API: "keyup" + EVENT_KEY$4 + DATA_API_KEY$4 }; - var ClassName = { + var ClassName$4 = { DISABLED: 'disabled', SHOW: 'show', DROPUP: 'dropup', @@ -3881,12 +4110,12 @@ var Dropdown = function ($$$1) { MENULEFT: 'dropdown-menu-left', POSITION_STATIC: 'position-static' }; - var Selector = { + var Selector$4 = { DATA_TOGGLE: '[data-toggle="dropdown"]', FORM_CHILD: '.dropdown form', MENU: '.dropdown-menu', NAVBAR_NAV: '.navbar-nav', - VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' + VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' }; var AttachmentMap = { TOP: 'top-start', @@ -3898,15 +4127,19 @@ var Dropdown = function ($$$1) { LEFT: 'left-start', LEFTEND: 'left-end' }; - var Default = { + var Default$2 = { offset: 0, flip: true, - boundary: 'scrollParent' + boundary: 'scrollParent', + reference: 'toggle', + display: 'dynamic' }; - var DefaultType = { + var DefaultType$2 = { offset: '(number|string|function)', flip: 'boolean', - boundary: '(string|element)' + boundary: '(string|element)', + reference: '(string|element)', + display: 'string' /** * ------------------------------------------------------------------------ * Class Definition @@ -3933,13 +4166,13 @@ var Dropdown = function ($$$1) { // Public _proto.toggle = function toggle() { - if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { + if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) { return; } var parent = Dropdown._getParentFromElement(this._element); - var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); + var isActive = $(this._menu).hasClass(ClassName$4.SHOW); Dropdown._clearMenus(); @@ -3950,8 +4183,8 @@ var Dropdown = function ($$$1) { var relatedTarget = { relatedTarget: this._element }; - var showEvent = $$$1.Event(Event.SHOW, relatedTarget); - $$$1(parent).trigger(showEvent); + var showEvent = $.Event(Event$4.SHOW, relatedTarget); + $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { return; @@ -3964,14 +4197,18 @@ var Dropdown = function ($$$1) { * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); + throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); } - var element = this._element; // For dropup with alignment we use the parent as popper container + var referenceElement = this._element; - if ($$$1(parent).hasClass(ClassName.DROPUP)) { - if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { - element = parent; + 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 @@ -3979,31 +4216,75 @@ var Dropdown = function ($$$1) { if (this._config.boundary !== 'scrollParent') { - $$$1(parent).addClass(ClassName.POSITION_STATIC); + $(parent).addClass(ClassName$4.POSITION_STATIC); } - this._popper = new Popper(element, this._menu, this._getPopperConfig()); + 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('body').children().on('mouseover', null, $$$1.noop); + if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) { + $(document.body).children().on('mouseover', null, $.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)); + $(this._menu).toggleClass(ClassName$4.SHOW); + $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); + }; + + _proto.show = function show() { + if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) { + return; + } + + var relatedTarget = { + relatedTarget: this._element + }; + var showEvent = $.Event(Event$4.SHOW, relatedTarget); + + var parent = Dropdown._getParentFromElement(this._element); + + $(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return; + } + + $(this._menu).toggleClass(ClassName$4.SHOW); + $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget)); + }; + + _proto.hide = function hide() { + if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) { + return; + } + + var relatedTarget = { + relatedTarget: this._element + }; + var hideEvent = $.Event(Event$4.HIDE, relatedTarget); + + var parent = Dropdown._getParentFromElement(this._element); + + $(parent).trigger(hideEvent); + + if (hideEvent.isDefaultPrevented()) { + return; + } + + $(this._menu).toggleClass(ClassName$4.SHOW); + $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); }; _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - $$$1(this._element).off(EVENT_KEY); + $.removeData(this._element, DATA_KEY$4); + $(this._element).off(EVENT_KEY$4); this._element = null; this._menu = null; @@ -4026,7 +4307,7 @@ var Dropdown = function ($$$1) { _proto._addEventListeners = function _addEventListeners() { var _this = this; - $$$1(this._element).on(Event.CLICK, function (event) { + $(this._element).on(Event$4.CLICK, function (event) { event.preventDefault(); event.stopPropagation(); @@ -4035,8 +4316,8 @@ var Dropdown = function ($$$1) { }; _proto._getConfig = function _getConfig(config) { - config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config); - Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); + Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType); return config; }; @@ -4044,27 +4325,29 @@ var Dropdown = function ($$$1) { if (!this._menu) { var parent = Dropdown._getParentFromElement(this._element); - this._menu = $$$1(parent).find(Selector.MENU)[0]; + if (parent) { + this._menu = parent.querySelector(Selector$4.MENU); + } } return this._menu; }; _proto._getPlacement = function _getPlacement() { - var $parentDropdown = $$$1(this._element).parent(); + var $parentDropdown = $(this._element.parentNode); var placement = AttachmentMap.BOTTOM; // Handle dropup - if ($parentDropdown.hasClass(ClassName.DROPUP)) { + if ($parentDropdown.hasClass(ClassName$4.DROPUP)) { placement = AttachmentMap.TOP; - if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { + if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { placement = AttachmentMap.TOPEND; } - } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { + } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) { placement = AttachmentMap.RIGHT; - } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { + } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) { placement = AttachmentMap.LEFT; - } else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { + } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) { placement = AttachmentMap.BOTTOMEND; } @@ -4072,7 +4355,7 @@ var Dropdown = function ($$$1) { }; _proto._detectNavbar = function _detectNavbar() { - return $$$1(this._element).closest('.navbar').length > 0; + return $(this._element).closest('.navbar').length > 0; }; _proto._getPopperConfig = function _getPopperConfig() { @@ -4082,7 +4365,7 @@ var Dropdown = function ($$$1) { if (typeof this._config.offset === 'function') { offsetConf.fn = function (data) { - data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {}); + data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); return data; }; } else { @@ -4099,21 +4382,29 @@ var Dropdown = function ($$$1) { 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 data = $(this).data(DATA_KEY$4); var _config = typeof config === 'object' ? config : null; if (!data) { data = new Dropdown(this, _config); - $$$1(this).data(DATA_KEY, data); + $(this).data(DATA_KEY$4, data); } if (typeof config === 'string') { @@ -4131,32 +4422,36 @@ var Dropdown = function ($$$1) { return; } - var toggles = $$$1.makeArray($$$1(Selector.DATA_TOGGLE)); + var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE)); - for (var i = 0; i < toggles.length; i++) { + for (var i = 0, len = toggles.length; i < len; i++) { var parent = Dropdown._getParentFromElement(toggles[i]); - var context = $$$1(toggles[i]).data(DATA_KEY); + var context = $(toggles[i]).data(DATA_KEY$4); var relatedTarget = { relatedTarget: toggles[i] }; + if (event && event.type === 'click') { + relatedTarget.clickEvent = event; + } + if (!context) { continue; } var dropdownMenu = context._menu; - if (!$$$1(parent).hasClass(ClassName.SHOW)) { + if (!$(parent).hasClass(ClassName$4.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)) { + if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { continue; } - var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); - $$$1(parent).trigger(hideEvent); + var hideEvent = $.Event(Event$4.HIDE, relatedTarget); + $(parent).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { continue; @@ -4165,12 +4460,12 @@ var Dropdown = function ($$$1) { if ('ontouchstart' in document.documentElement) { - $$$1('body').children().off('mouseover', null, $$$1.noop); + $(document.body).children().off('mouseover', null, $.noop); } toggles[i].setAttribute('aria-expanded', 'false'); - $$$1(dropdownMenu).removeClass(ClassName.SHOW); - $$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); + $(dropdownMenu).removeClass(ClassName$4.SHOW); + $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget)); } }; @@ -4179,7 +4474,7 @@ var Dropdown = function ($$$1) { var selector = Util.getSelectorFromElement(element); if (selector) { - parent = $$$1(selector)[0]; + parent = document.querySelector(selector); } return parent || element.parentNode; @@ -4194,32 +4489,32 @@ var Dropdown = function ($$$1) { // - 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)) { + 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 || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { return; } event.preventDefault(); event.stopPropagation(); - if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { + if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) { return; } var parent = Dropdown._getParentFromElement(this); - var isActive = $$$1(parent).hasClass(ClassName.SHOW); + var isActive = $(parent).hasClass(ClassName$4.SHOW); - if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { + if (!isActive || 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'); + var toggle = parent.querySelector(Selector$4.DATA_TOGGLE); + $(toggle).trigger('focus'); } - $$$1(this).trigger('click'); + $(this).trigger('click'); return; } - var items = $$$1(parent).find(Selector.VISIBLE_ITEMS).get(); + var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)); if (items.length === 0) { return; @@ -4247,19 +4542,20 @@ var Dropdown = function ($$$1) { _createClass(Dropdown, null, [{ key: "VERSION", get: function get() { - return VERSION; + return VERSION$4; } }, { key: "Default", get: function get() { - return Default; + return Default$2; } }, { key: "DefaultType", get: function get() { - return DefaultType; + return DefaultType$2; } }]); + return Dropdown; }(); /** @@ -4269,12 +4565,12 @@ var Dropdown = function ($$$1) { */ - $$$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) { + $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + " " + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) { event.preventDefault(); event.stopPropagation(); - Dropdown._jQueryInterface.call($$$1(this), 'toggle'); - }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + Dropdown._jQueryInterface.call($(this), 'toggle'); + }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) { e.stopPropagation(); }); /** @@ -4283,79 +4579,66 @@ var Dropdown = function ($$$1) { * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Dropdown._jQueryInterface; - $$$1.fn[NAME].Constructor = Dropdown; + $.fn[NAME$4] = Dropdown._jQueryInterface; + $.fn[NAME$4].Constructor = Dropdown; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME$4].noConflict = function () { + $.fn[NAME$4] = JQUERY_NO_CONFLICT$4; return Dropdown._jQueryInterface; }; - return Dropdown; -}($, Popper); - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.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 TRANSITION_DURATION = 300; - var BACKDROP_TRANSITION_DURATION = 150; - var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key - var Default = { + var NAME$5 = 'modal'; + var VERSION$5 = '4.2.1'; + var DATA_KEY$5 = 'bs.modal'; + var EVENT_KEY$5 = "." + DATA_KEY$5; + var DATA_API_KEY$5 = '.data-api'; + var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5]; + var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key + + var Default$3 = { backdrop: true, keyboard: true, focus: true, show: true }; - var DefaultType = { + var DefaultType$3 = { 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 Event$5 = { + HIDE: "hide" + EVENT_KEY$5, + HIDDEN: "hidden" + EVENT_KEY$5, + SHOW: "show" + EVENT_KEY$5, + SHOWN: "shown" + EVENT_KEY$5, + FOCUSIN: "focusin" + EVENT_KEY$5, + RESIZE: "resize" + EVENT_KEY$5, + CLICK_DISMISS: "click.dismiss" + EVENT_KEY$5, + KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY$5, + MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY$5, + MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY$5, + CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 }; - var ClassName = { + var ClassName$5 = { SCROLLBAR_MEASURER: 'modal-scrollbar-measure', BACKDROP: 'modal-backdrop', OPEN: 'modal-open', FADE: 'fade', SHOW: 'show' }; - var Selector = { + var Selector$5 = { 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' + STICKY_CONTENT: '.sticky-top' /** * ------------------------------------------------------------------------ * Class Definition @@ -4370,12 +4653,12 @@ var Modal = function ($$$1) { function Modal(element, config) { this._config = this._getConfig(config); this._element = element; - this._dialog = $$$1(element).find(Selector.DIALOG)[0]; + this._dialog = element.querySelector(Selector$5.DIALOG); this._backdrop = null; this._isShown = false; this._isBodyOverflowing = false; this._ignoreBackdropClick = false; - this._originalBodyPadding = 0; + this._isTransitioning = false; this._scrollbarWidth = 0; } // Getters @@ -4390,18 +4673,18 @@ var Modal = function ($$$1) { _proto.show = function show(relatedTarget) { var _this = this; - if (this._isTransitioning || this._isShown) { + if (this._isShown || this._isTransitioning) { return; } - if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { + if ($(this._element).hasClass(ClassName$5.FADE)) { this._isTransitioning = true; } - var showEvent = $$$1.Event(Event.SHOW, { + var showEvent = $.Event(Event$5.SHOW, { relatedTarget: relatedTarget }); - $$$1(this._element).trigger(showEvent); + $(this._element).trigger(showEvent); if (this._isShown || showEvent.isDefaultPrevented()) { return; @@ -4415,18 +4698,16 @@ var Modal = function ($$$1) { this._adjustDialog(); - $$$1(document.body).addClass(ClassName.OPEN); - this._setEscapeEvent(); this._setResizeEvent(); - $$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { + $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.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._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () { + $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) { + if ($(event.target).is(_this._element)) { _this._ignoreBackdropClick = true; } }); @@ -4444,19 +4725,19 @@ var Modal = function ($$$1) { event.preventDefault(); } - if (this._isTransitioning || !this._isShown) { + if (!this._isShown || this._isTransitioning) { return; } - var hideEvent = $$$1.Event(Event.HIDE); - $$$1(this._element).trigger(hideEvent); + var hideEvent = $.Event(Event$5.HIDE); + $(this._element).trigger(hideEvent); if (!this._isShown || hideEvent.isDefaultPrevented()) { return; } this._isShown = false; - var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); + var transition = $(this._element).hasClass(ClassName$5.FADE); if (transition) { this._isTransitioning = true; @@ -4466,23 +4747,33 @@ var Modal = function ($$$1) { 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); + $(document).off(Event$5.FOCUSIN); + $(this._element).removeClass(ClassName$5.SHOW); + $(this._element).off(Event$5.CLICK_DISMISS); + $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS); if (transition) { - $$$1(this._element).one(Util.TRANSITION_END, function (event) { + var transitionDuration = Util.getTransitionDurationFromElement(this._element); + $(this._element).one(Util.TRANSITION_END, function (event) { return _this2._hideModal(event); - }).emulateTransitionEnd(TRANSITION_DURATION); + }).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); + [window, this._element, this._dialog].forEach(function (htmlElement) { + return $(htmlElement).off(EVENT_KEY$5); + }); + /** + * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` + * Do not move `document` in `htmlElements` array + * It will remove `Event.CLICK_DATA_API` event that should remain + */ + + $(document).off(Event$5.FOCUSIN); + $.removeData(this._element, DATA_KEY$5); this._config = null; this._element = null; this._dialog = null; @@ -4490,6 +4781,7 @@ var Modal = function ($$$1) { this._isShown = null; this._isBodyOverflowing = null; this._ignoreBackdropClick = null; + this._isTransitioning = null; this._scrollbarWidth = null; }; @@ -4499,15 +4791,15 @@ var Modal = function ($$$1) { _proto._getConfig = function _getConfig(config) { - config = _extends({}, Default, config); - Util.typeCheckConfig(NAME, config, DefaultType); + config = _objectSpread({}, Default$3, config); + Util.typeCheckConfig(NAME$5, config, DefaultType$3); return config; }; _proto._showElement = function _showElement(relatedTarget) { var _this3 = this; - var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); + var transition = $(this._element).hasClass(ClassName$5.FADE); if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { // Don't move modal's DOM position @@ -4518,19 +4810,21 @@ var Modal = function ($$$1) { this._element.removeAttribute('aria-hidden'); + this._element.setAttribute('aria-modal', true); + this._element.scrollTop = 0; if (transition) { Util.reflow(this._element); } - $$$1(this._element).addClass(ClassName.SHOW); + $(this._element).addClass(ClassName$5.SHOW); if (this._config.focus) { this._enforceFocus(); } - var shownEvent = $$$1.Event(Event.SHOWN, { + var shownEvent = $.Event(Event$5.SHOWN, { relatedTarget: relatedTarget }); @@ -4540,11 +4834,12 @@ var Modal = function ($$$1) { } _this3._isTransitioning = false; - $$$1(_this3._element).trigger(shownEvent); + $(_this3._element).trigger(shownEvent); }; if (transition) { - $$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); + var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); + $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); } else { transitionComplete(); } @@ -4553,9 +4848,9 @@ var Modal = function ($$$1) { _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) { + $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop + .on(Event$5.FOCUSIN, function (event) { + if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { _this4._element.focus(); } }); @@ -4565,15 +4860,15 @@ var Modal = function ($$$1) { var _this5 = this; if (this._isShown && this._config.keyboard) { - $$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { - if (event.which === ESCAPE_KEYCODE) { + $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) { + if (event.which === ESCAPE_KEYCODE$1) { event.preventDefault(); _this5.hide(); } }); } else if (!this._isShown) { - $$$1(this._element).off(Event.KEYDOWN_DISMISS); + $(this._element).off(Event$5.KEYDOWN_DISMISS); } }; @@ -4581,11 +4876,11 @@ var Modal = function ($$$1) { var _this6 = this; if (this._isShown) { - $$$1(window).on(Event.RESIZE, function (event) { + $(window).on(Event$5.RESIZE, function (event) { return _this6.handleUpdate(event); }); } else { - $$$1(window).off(Event.RESIZE); + $(window).off(Event$5.RESIZE); } }; @@ -4596,22 +4891,24 @@ var Modal = function ($$$1) { this._element.setAttribute('aria-hidden', true); + this._element.removeAttribute('aria-modal'); + this._isTransitioning = false; this._showBackdrop(function () { - $$$1(document.body).removeClass(ClassName.OPEN); + $(document.body).removeClass(ClassName$5.OPEN); _this7._resetAdjustments(); _this7._resetScrollbar(); - $$$1(_this7._element).trigger(Event.HIDDEN); + $(_this7._element).trigger(Event$5.HIDDEN); }); }; _proto._removeBackdrop = function _removeBackdrop() { if (this._backdrop) { - $$$1(this._backdrop).remove(); + $(this._backdrop).remove(); this._backdrop = null; } }; @@ -4619,19 +4916,18 @@ var Modal = function ($$$1) { _proto._showBackdrop = function _showBackdrop(callback) { var _this8 = this; - var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; + var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : ''; if (this._isShown && this._config.backdrop) { - var doAnimate = Util.supportsTransitionEnd() && animate; this._backdrop = document.createElement('div'); - this._backdrop.className = ClassName.BACKDROP; + this._backdrop.className = ClassName$5.BACKDROP; if (animate) { - $$$1(this._backdrop).addClass(animate); + this._backdrop.classList.add(animate); } - $$$1(this._backdrop).appendTo(document.body); - $$$1(this._element).on(Event.CLICK_DISMISS, function (event) { + $(this._backdrop).appendTo(document.body); + $(this._element).on(Event$5.CLICK_DISMISS, function (event) { if (_this8._ignoreBackdropClick) { _this8._ignoreBackdropClick = false; return; @@ -4648,24 +4944,25 @@ var Modal = function ($$$1) { } }); - if (doAnimate) { + if (animate) { Util.reflow(this._backdrop); } - $$$1(this._backdrop).addClass(ClassName.SHOW); + $(this._backdrop).addClass(ClassName$5.SHOW); if (!callback) { return; } - if (!doAnimate) { + if (!animate) { callback(); return; } - $$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); } else if (!this._isShown && this._backdrop) { - $$$1(this._backdrop).removeClass(ClassName.SHOW); + $(this._backdrop).removeClass(ClassName$5.SHOW); var callbackRemove = function callbackRemove() { _this8._removeBackdrop(); @@ -4675,8 +4972,10 @@ var Modal = function ($$$1) { } }; - if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { - $$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + if ($(this._element).hasClass(ClassName$5.FADE)) { + var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); + + $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); } else { callbackRemove(); } @@ -4718,60 +5017,56 @@ var Modal = function ($$$1) { 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"); + var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); + var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding + + $(fixedContent).each(function (index, element) { + var actualPadding = element.style.paddingRight; + var calculatedPadding = $(element).css('padding-right'); + $(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"); + $(stickyContent).each(function (index, element) { + var actualMargin = element.style.marginRight; + var calculatedMargin = $(element).css('margin-right'); + $(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('body').css('padding-right'); - $$$1('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); + var calculatedPadding = $(document.body).css('padding-right'); + $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); } + + $(document.body).addClass(ClassName$5.OPEN); }; _proto._resetScrollbar = function _resetScrollbar() { // Restore fixed content padding - $$$1(Selector.FIXED_CONTENT).each(function (index, element) { - var padding = $$$1(element).data('padding-right'); + var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT)); + $(fixedContent).each(function (index, element) { + var padding = $(element).data('padding-right'); + $(element).removeData('padding-right'); + element.style.paddingRight = padding ? padding : ''; + }); // Restore sticky content - 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'); + var elements = [].slice.call(document.querySelectorAll("" + Selector$5.STICKY_CONTENT)); + $(elements).each(function (index, element) { + var margin = $(element).data('margin-right'); if (typeof margin !== 'undefined') { - $$$1(element).css('margin-right', margin).removeData('margin-right'); + $(element).css('margin-right', margin).removeData('margin-right'); } }); // Restore body padding - var padding = $$$1('body').data('padding-right'); - - if (typeof padding !== 'undefined') { - $$$1('body').css('padding-right', padding).removeData('padding-right'); - } + var padding = $(document.body).data('padding-right'); + $(document.body).removeData('padding-right'); + document.body.style.paddingRight = padding ? padding : ''; }; _proto._getScrollbarWidth = function _getScrollbarWidth() { // thx d.walsh var scrollDiv = document.createElement('div'); - scrollDiv.className = ClassName.SCROLLBAR_MEASURER; + scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER; document.body.appendChild(scrollDiv); var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); @@ -4781,13 +5076,13 @@ var Modal = function ($$$1) { Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + var data = $(this).data(DATA_KEY$5); - var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); + var _config = _objectSpread({}, Default$3, $(this).data(), typeof config === 'object' && config ? config : {}); if (!data) { data = new Modal(this, _config); - $$$1(this).data(DATA_KEY, data); + $(this).data(DATA_KEY$5, data); } if (typeof config === 'string') { @@ -4805,14 +5100,15 @@ var Modal = function ($$$1) { _createClass(Modal, null, [{ key: "VERSION", get: function get() { - return VERSION; + return VERSION$5; } }, { key: "Default", get: function get() { - return Default; + return Default$3; } }]); + return Modal; }(); /** @@ -4822,36 +5118,36 @@ var Modal = function ($$$1) { */ - $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) { var _this10 = this; var target; var selector = Util.getSelectorFromElement(this); if (selector) { - target = $$$1(selector)[0]; + target = document.querySelector(selector); } - var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data()); + var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); if (this.tagName === 'A' || this.tagName === 'AREA') { event.preventDefault(); } - var $target = $$$1(target).one(Event.SHOW, function (showEvent) { + var $target = $(target).one(Event$5.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')) { + $target.one(Event$5.HIDDEN, function () { + if ($(_this10).is(':visible')) { _this10.focus(); } }); }); - Modal._jQueryInterface.call($$$1(target), config, this); + Modal._jQueryInterface.call($(target), config, this); }); /** * ------------------------------------------------------------------------ @@ -4859,39 +5155,28 @@ var Modal = function ($$$1) { * ------------------------------------------------------------------------ */ - $$$1.fn[NAME] = Modal._jQueryInterface; - $$$1.fn[NAME].Constructor = Modal; + $.fn[NAME$5] = Modal._jQueryInterface; + $.fn[NAME$5].Constructor = Modal; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME$5].noConflict = function () { + $.fn[NAME$5] = JQUERY_NO_CONFLICT$5; return Modal._jQueryInterface; }; - return Modal; -}($); - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.0'; - var DATA_KEY = 'bs.tooltip'; - var EVENT_KEY = "." + DATA_KEY; - var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; - var TRANSITION_DURATION = 150; + + var NAME$6 = 'tooltip'; + var VERSION$6 = '4.2.1'; + var DATA_KEY$6 = 'bs.tooltip'; + var EVENT_KEY$6 = "." + DATA_KEY$6; + var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; var CLASS_PREFIX = 'bs-tooltip'; var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); - var DefaultType = { + var DefaultType$4 = { animation: 'boolean', template: 'string', title: '(string|element|function)', @@ -4905,14 +5190,14 @@ var Tooltip = function ($$$1) { fallbackPlacement: '(string|array)', boundary: '(string|element)' }; - var AttachmentMap = { + var AttachmentMap$1 = { AUTO: 'auto', TOP: 'top', RIGHT: 'right', BOTTOM: 'bottom', LEFT: 'left' }; - var Default = { + var Default$4 = { animation: true, template: '', trigger: 'hover focus', @@ -4930,23 +5215,23 @@ var Tooltip = function ($$$1) { 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 Event$6 = { + HIDE: "hide" + EVENT_KEY$6, + HIDDEN: "hidden" + EVENT_KEY$6, + SHOW: "show" + EVENT_KEY$6, + SHOWN: "shown" + EVENT_KEY$6, + INSERTED: "inserted" + EVENT_KEY$6, + CLICK: "click" + EVENT_KEY$6, + FOCUSIN: "focusin" + EVENT_KEY$6, + FOCUSOUT: "focusout" + EVENT_KEY$6, + MOUSEENTER: "mouseenter" + EVENT_KEY$6, + MOUSELEAVE: "mouseleave" + EVENT_KEY$6 }; - var ClassName = { + var ClassName$6 = { FADE: 'fade', SHOW: 'show' }; - var Selector = { + var Selector$6 = { TOOLTIP: '.tooltip', TOOLTIP_INNER: '.tooltip-inner', ARROW: '.arrow' @@ -4973,7 +5258,7 @@ var Tooltip = function ($$$1) { * Popper - https://popper.js.org */ if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); + throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); } // private @@ -5013,11 +5298,11 @@ var Tooltip = function ($$$1) { if (event) { var dataKey = this.constructor.DATA_KEY; - var context = $$$1(event.currentTarget).data(dataKey); + var context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); + $(event.currentTarget).data(dataKey, context); } context._activeTrigger.click = !context._activeTrigger.click; @@ -5028,7 +5313,7 @@ var Tooltip = function ($$$1) { context._leave(null, context); } } else { - if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { + if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) { this._leave(null, this); return; @@ -5040,12 +5325,12 @@ var Tooltip = function ($$$1) { _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'); + $.removeData(this.element, this.constructor.DATA_KEY); + $(this.element).off(this.constructor.EVENT_KEY); + $(this.element).closest('.modal').off('hide.bs.modal'); if (this.tip) { - $$$1(this.tip).remove(); + $(this.tip).remove(); } this._isEnabled = null; @@ -5066,15 +5351,16 @@ var Tooltip = function ($$$1) { _proto.show = function show() { var _this = this; - if ($$$1(this.element).css('display') === 'none') { + if ($(this.element).css('display') === 'none') { throw new Error('Please use show on visible elements'); } - var showEvent = $$$1.Event(this.constructor.Event.SHOW); + var showEvent = $.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); + $(this.element).trigger(showEvent); + var shadowRoot = Util.findShadowRoot(this.element); + var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); if (showEvent.isDefaultPrevented() || !isInTheDom) { return; @@ -5087,7 +5373,7 @@ var Tooltip = function ($$$1) { this.setContent(); if (this.config.animation) { - $$$1(tip).addClass(ClassName.FADE); + $(tip).addClass(ClassName$6.FADE); } var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; @@ -5095,14 +5381,16 @@ var Tooltip = function ($$$1) { 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); + var container = this._getContainer(); + + $(tip).data(this.constructor.DATA_KEY, this); + + if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { + $(tip).appendTo(container); } - $$$1(this.element).trigger(this.constructor.Event.INSERTED); + $(this.element).trigger(this.constructor.Event.INSERTED); this._popper = new Popper(this.element, tip, { placement: attachment, modifiers: { @@ -5113,7 +5401,7 @@ var Tooltip = function ($$$1) { behavior: this.config.fallbackPlacement }, arrow: { - element: Selector.ARROW + element: Selector$6.ARROW }, preventOverflow: { boundariesElement: this.config.boundary @@ -5125,16 +5413,16 @@ var Tooltip = function ($$$1) { } }, onUpdate: function onUpdate(data) { - _this._handlePopperPlacementChange(data); + return _this._handlePopperPlacementChange(data); } }); - $$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra + $(tip).addClass(ClassName$6.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('body').children().on('mouseover', null, $$$1.noop); + $(document.body).children().on('mouseover', null, $.noop); } var complete = function complete() { @@ -5144,15 +5432,16 @@ var Tooltip = function ($$$1) { var prevHoverState = _this._hoverState; _this._hoverState = null; - $$$1(_this.element).trigger(_this.constructor.Event.SHOWN); + $(_this.element).trigger(_this.constructor.Event.SHOWN); if (prevHoverState === HoverState.OUT) { _this._leave(null, _this); } }; - if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { - $$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); + if ($(this.tip).hasClass(ClassName$6.FADE)) { + var transitionDuration = Util.getTransitionDurationFromElement(this.tip); + $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } @@ -5163,7 +5452,7 @@ var Tooltip = function ($$$1) { var _this2 = this; var tip = this.getTipElement(); - var hideEvent = $$$1.Event(this.constructor.Event.HIDE); + var hideEvent = $.Event(this.constructor.Event.HIDE); var complete = function complete() { if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { @@ -5174,7 +5463,7 @@ var Tooltip = function ($$$1) { _this2.element.removeAttribute('aria-describedby'); - $$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); + $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); if (_this2._popper !== null) { _this2._popper.destroy(); @@ -5185,25 +5474,26 @@ var Tooltip = function ($$$1) { } }; - $$$1(this.element).trigger(hideEvent); + $(this.element).trigger(hideEvent); if (hideEvent.isDefaultPrevented()) { return; } - $$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra + $(tip).removeClass(ClassName$6.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('body').children().off('mouseover', null, $$$1.noop); + $(document.body).children().off('mouseover', null, $.noop); } this._activeTrigger[Trigger.CLICK] = false; this._activeTrigger[Trigger.FOCUS] = false; this._activeTrigger[Trigger.HOVER] = false; - if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { - $$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + if ($(this.tip).hasClass(ClassName$6.FADE)) { + var transitionDuration = Util.getTransitionDurationFromElement(tip); + $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); } else { complete(); } @@ -5223,18 +5513,18 @@ var Tooltip = function ($$$1) { }; _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); + $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); }; _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $$$1(this.config.template)[0]; + this.tip = this.tip || $(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); + var tip = this.getTipElement(); + this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle()); + $(tip).removeClass(ClassName$6.FADE + " " + ClassName$6.SHOW); }; _proto.setElementContent = function setElementContent($element, content) { @@ -5243,11 +5533,11 @@ var Tooltip = function ($$$1) { if (typeof content === 'object' && (content.nodeType || content.jquery)) { // Content is a DOM node or a jQuery if (html) { - if (!$$$1(content).parent().is($element)) { + if (!$(content).parent().is($element)) { $element.empty().append(content); } } else { - $element.text($$$1(content).text()); + $element.text($(content).text()); } } else { $element[html ? 'html' : 'text'](content); @@ -5265,8 +5555,20 @@ var Tooltip = function ($$$1) { }; // Private + _proto._getContainer = function _getContainer() { + if (this.config.container === false) { + return document.body; + } + + if (Util.isElement(this.config.container)) { + return $(this.config.container); + } + + return $(document).find(this.config.container); + }; + _proto._getAttachment = function _getAttachment(placement) { - return AttachmentMap[placement.toUpperCase()]; + return AttachmentMap$1[placement.toUpperCase()]; }; _proto._setListeners = function _setListeners() { @@ -5275,26 +5577,27 @@ var Tooltip = function ($$$1) { 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) { + $(_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) { + $(_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(); - }); + }); + $(this.element).closest('.modal').on('hide.bs.modal', function () { + if (_this3.element) { + _this3.hide(); + } }); if (this.config.selector) { - this.config = _extends({}, this.config, { + this.config = _objectSpread({}, this.config, { trigger: 'manual', selector: '' }); @@ -5314,18 +5617,18 @@ var Tooltip = function ($$$1) { _proto._enter = function _enter(event, context) { var dataKey = this.constructor.DATA_KEY; - context = context || $$$1(event.currentTarget).data(dataKey); + context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); + $(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) { + if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) { context._hoverState = HoverState.SHOW; return; } @@ -5347,11 +5650,11 @@ var Tooltip = function ($$$1) { _proto._leave = function _leave(event, context) { var dataKey = this.constructor.DATA_KEY; - context = context || $$$1(event.currentTarget).data(dataKey); + context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $$$1(event.currentTarget).data(dataKey, context); + $(event.currentTarget).data(dataKey, context); } if (event) { @@ -5388,7 +5691,7 @@ var Tooltip = function ($$$1) { }; _proto._getConfig = function _getConfig(config) { - config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config); + config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {}); if (typeof config.delay === 'number') { config.delay = { @@ -5405,7 +5708,7 @@ var Tooltip = function ($$$1) { config.content = config.content.toString(); } - Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); return config; }; @@ -5424,18 +5727,21 @@ var Tooltip = function ($$$1) { }; _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $$$1(this.getTipElement()); + var $tip = $(this.getTipElement()); var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); - if (tabClass !== null && tabClass.length > 0) { + if (tabClass !== null && tabClass.length) { $tip.removeClass(tabClass.join('')); } }; - _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) { + _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { + var popperInstance = popperData.instance; + this.tip = popperInstance.popper; + this._cleanTipClass(); - this.addAttachmentClass(this._getAttachment(data.placement)); + this.addAttachmentClass(this._getAttachment(popperData.placement)); }; _proto._fixTransition = function _fixTransition() { @@ -5446,7 +5752,7 @@ var Tooltip = function ($$$1) { return; } - $$$1(tip).removeClass(ClassName.FADE); + $(tip).removeClass(ClassName$6.FADE); this.config.animation = false; this.hide(); this.show(); @@ -5456,7 +5762,7 @@ var Tooltip = function ($$$1) { Tooltip._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + var data = $(this).data(DATA_KEY$6); var _config = typeof config === 'object' && config; @@ -5466,7 +5772,7 @@ var Tooltip = function ($$$1) { if (!data) { data = new Tooltip(this, _config); - $$$1(this).data(DATA_KEY, data); + $(this).data(DATA_KEY$6, data); } if (typeof config === 'string') { @@ -5482,39 +5788,40 @@ var Tooltip = function ($$$1) { _createClass(Tooltip, null, [{ key: "VERSION", get: function get() { - return VERSION; + return VERSION$6; } }, { key: "Default", get: function get() { - return Default; + return Default$4; } }, { key: "NAME", get: function get() { - return NAME; + return NAME$6; } }, { key: "DATA_KEY", get: function get() { - return DATA_KEY; + return DATA_KEY$6; } }, { key: "Event", get: function get() { - return Event; + return Event$6; } }, { key: "EVENT_KEY", get: function get() { - return EVENT_KEY; + return EVENT_KEY$6; } }, { key: "DefaultType", get: function get() { - return DefaultType; + return DefaultType$4; } }]); + return Tooltip; }(); /** @@ -5524,65 +5831,58 @@ var Tooltip = function ($$$1) { */ - $$$1.fn[NAME] = Tooltip._jQueryInterface; - $$$1.fn[NAME].Constructor = Tooltip; + $.fn[NAME$6] = Tooltip._jQueryInterface; + $.fn[NAME$6].Constructor = Tooltip; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME$6].noConflict = function () { + $.fn[NAME$6] = JQUERY_NO_CONFLICT$6; return Tooltip._jQueryInterface; }; - return Tooltip; -}($, Popper); - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.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 = _extends({}, Tooltip.Default, { + + var NAME$7 = 'popover'; + var VERSION$7 = '4.2.1'; + var DATA_KEY$7 = 'bs.popover'; + var EVENT_KEY$7 = "." + DATA_KEY$7; + var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; + var CLASS_PREFIX$1 = 'bs-popover'; + var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g'); + + var Default$5 = _objectSpread({}, Tooltip.Default, { placement: 'right', trigger: 'click', content: '', template: '' }); - var DefaultType = _extends({}, Tooltip.DefaultType, { + + var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, { content: '(string|element|function)' }); - var ClassName = { + + var ClassName$7 = { FADE: 'fade', SHOW: 'show' }; - var Selector = { + var Selector$7 = { 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 + var Event$7 = { + HIDE: "hide" + EVENT_KEY$7, + HIDDEN: "hidden" + EVENT_KEY$7, + SHOW: "show" + EVENT_KEY$7, + SHOWN: "shown" + EVENT_KEY$7, + INSERTED: "inserted" + EVENT_KEY$7, + CLICK: "click" + EVENT_KEY$7, + FOCUSIN: "focusin" + EVENT_KEY$7, + FOCUSOUT: "focusout" + EVENT_KEY$7, + MOUSEENTER: "mouseenter" + EVENT_KEY$7, + MOUSELEAVE: "mouseleave" + EVENT_KEY$7 /** * ------------------------------------------------------------------------ * Class Definition @@ -5608,18 +5908,18 @@ var Popover = function ($$$1) { }; _proto.addAttachmentClass = function addAttachmentClass(attachment) { - $$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); + $(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment); }; _proto.getTipElement = function getTipElement() { - this.tip = this.tip || $$$1(this.config.template)[0]; + this.tip = this.tip || $(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 + var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events - this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); + this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle()); var content = this._getContent(); @@ -5627,8 +5927,8 @@ var Popover = function ($$$1) { content = content.call(this.element); } - this.setElementContent($tip.find(Selector.CONTENT), content); - $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); + this.setElementContent($tip.find(Selector$7.CONTENT), content); + $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); }; // Private @@ -5637,8 +5937,8 @@ var Popover = function ($$$1) { }; _proto._cleanTipClass = function _cleanTipClass() { - var $tip = $$$1(this.getTipElement()); - var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); + var $tip = $(this.getTipElement()); + var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1); if (tabClass !== null && tabClass.length > 0) { $tip.removeClass(tabClass.join('')); @@ -5648,17 +5948,17 @@ var Popover = function ($$$1) { Popover._jQueryInterface = function _jQueryInterface(config) { return this.each(function () { - var data = $$$1(this).data(DATA_KEY); + var data = $(this).data(DATA_KEY$7); var _config = typeof config === 'object' ? config : null; - if (!data && /destroy|hide/.test(config)) { + if (!data && /dispose|hide/.test(config)) { return; } if (!data) { data = new Popover(this, _config); - $$$1(this).data(DATA_KEY, data); + $(this).data(DATA_KEY$7, data); } if (typeof config === 'string') { @@ -5675,39 +5975,40 @@ var Popover = function ($$$1) { key: "VERSION", // Getters get: function get() { - return VERSION; + return VERSION$7; } }, { key: "Default", get: function get() { - return Default; + return Default$5; } }, { key: "NAME", get: function get() { - return NAME; + return NAME$7; } }, { key: "DATA_KEY", get: function get() { - return DATA_KEY; + return DATA_KEY$7; } }, { key: "Event", get: function get() { - return Event; + return Event$7; } }, { key: "EVENT_KEY", get: function get() { - return EVENT_KEY; + return EVENT_KEY$7; } }, { key: "DefaultType", get: function get() { - return DefaultType; + return DefaultType$5; } }]); + return Popover; }(Tooltip); /** @@ -5717,57 +6018,47 @@ var Popover = function ($$$1) { */ - $$$1.fn[NAME] = Popover._jQueryInterface; - $$$1.fn[NAME].Constructor = Popover; + $.fn[NAME$7] = Popover._jQueryInterface; + $.fn[NAME$7].Constructor = Popover; - $$$1.fn[NAME].noConflict = function () { - $$$1.fn[NAME] = JQUERY_NO_CONFLICT; + $.fn[NAME$7].noConflict = function () { + $.fn[NAME$7] = JQUERY_NO_CONFLICT$7; return Popover._jQueryInterface; }; - return Popover; -}($); - -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.0.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.0.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 = { + + var NAME$8 = 'scrollspy'; + var VERSION$8 = '4.2.1'; + var DATA_KEY$8 = 'bs.scrollspy'; + var EVENT_KEY$8 = "." + DATA_KEY$8; + var DATA_API_KEY$6 = '.data-api'; + var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8]; + var Default$6 = { offset: 10, method: 'auto', target: '' }; - var DefaultType = { + var DefaultType$6 = { 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 Event$8 = { + ACTIVATE: "activate" + EVENT_KEY$8, + SCROLL: "scroll" + EVENT_KEY$8, + LOAD_DATA_API: "load" + EVENT_KEY$8 + DATA_API_KEY$6 }; - var ClassName = { + var ClassName$8 = { DROPDOWN_ITEM: 'dropdown-item', DROPDOWN_MENU: 'dropdown-menu', ACTIVE: 'active' }; - var Selector = { + var Selector$8 = { DATA_SPY: '[data-spy="scroll"]', ACTIVE: '.active', NAV_LIST_GROUP: '.nav, .list-group', @@ -5798,12 +6089,12 @@ var ScrollSpy = function ($$$1) { 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._selector = this._config.target + " " + Selector$8.NAV_LINKS + "," + (this._config.target + " " + Selector$8.LIST_ITEMS + ",") + (this._config.target + " " + Selector$8.DROPDOWN_ITEMS); this._offsets = []; this._targets = []; this._activeTarget = null; this._scrollHeight = 0; - $$$1(this._scrollElement).on(Event.SCROLL, function (event) { + $(this._scrollElement).on(Event$8.SCROLL, function (event) { return _this._process(event); }); this.refresh(); @@ -5824,13 +6115,13 @@ var ScrollSpy = function ($$$1) { this._offsets = []; this._targets = []; this._scrollHeight = this._getScrollHeight(); - var targets = $$$1.makeArray($$$1(this._selector)); + var targets = [].slice.call(document.querySelectorAll(this._selector)); targets.map(function (element) { var target; var targetSelector = Util.getSelectorFromElement(element); if (targetSelector) { - target = $$$1(targetSelector)[0]; + target = document.querySelector(targetSelector); } if (target) { @@ -5838,7 +6129,7 @@ var ScrollSpy = function ($$$1) { if (targetBCR.width || targetBCR.height) { // TODO (fat): remove sketch reliance on jQuery position/offset - return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; + return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; } } @@ -5855,8 +6146,8 @@ var ScrollSpy = function ($$$1) { }; _proto.dispose = function dispose() { - $$$1.removeData(this._element, DATA_KEY); - $$$1(this._scrollElement).off(EVENT_KEY); + $.removeData(this._element, DATA_KEY$8); + $(this._scrollElement).off(EVENT_KEY$8); this._element = null; this._scrollElement = null; this._config = null; @@ -5869,20 +6160,20 @@ var ScrollSpy = function ($$$1) { _proto._getConfig = function _getConfig(config) { - config = _extends({}, Default, config); + config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); if (typeof config.target !== 'string') { - var id = $$$1(config.target).attr('id'); + var id = $(config.target).attr('id'); if (!id) { - id = Util.getUID(NAME); - $$$1(config.target).attr('id', id); + id = Util.getUID(NAME$8); + $(config.target).attr('id', id); } config.target = "#" + id; } - Util.typeCheckConfig(NAME, config, DefaultType); + Util.typeCheckConfig(NAME$8, config, DefaultType$6); return config; }; @@ -5927,7 +6218,9 @@ var ScrollSpy = function ($$$1) { return; } - for (var i = this._offsets.length; i--;) { + var offsetLength = this._offsets.length; + + for (var i = offsetLength; 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) { @@ -5941,46 +6234,48 @@ var ScrollSpy = function ($$$1) { 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 queries = this._selector.split(',').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); + var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); + + if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) { + $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE); + $link.addClass(ClassName$8.ACTIVE); } else { // Set triggered link as active - $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active + $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active // With both