diff --git a/R/f7Messages.R b/R/f7Messages.R
index fe3ad867..73f9e9fc 100644
--- a/R/f7Messages.R
+++ b/R/f7Messages.R
@@ -45,9 +45,6 @@ f7Messages <- function(id, title = NULL, autoLayout = TRUE, newMessagesFirst = F
)
}
-
-
-
#' Framework7 message bar.
#'
#' \code{f7MessageBar} creates a message text container to type new messages.
@@ -84,9 +81,6 @@ f7MessageBar <- function(inputId, placeholder = "Message") {
)
}
-
-
-
#' Update Framework7 message bar
#'
#' \code{updateF7MessageBar} updates message bar content on the server side.
@@ -98,59 +92,7 @@ f7MessageBar <- function(inputId, placeholder = "Message") {
#'
#' @rdname messagebar
#' @export
-#' @examples
-#' if (interactive()) {
-#' library(shiny)
-#' library(shinyMobile)
-#' shinyApp(
-#' ui = f7Page(
-#' title = "Update message bar",
-#' f7SingleLayout(
-#' navbar = f7Navbar(
-#' title = "Message bar",
-#' hairline = FALSE,
-#' shadow = TRUE
-#' ),
-#' toolbar = f7Toolbar(
-#' position = "bottom",
-#' f7Link(label = "Link 1", href = "https://www.google.com"),
-#' f7Link(label = "Link 2", href = "https://www.google.com")
-#' ),
-#' # main content
-#' f7Segment(
-#' container = "segment",
-#' f7Button("updateMessageBar", "Update value"),
-#' f7Button("updateMessageBarPlaceholder", "Update placeholder")
-#' ),
-#' f7MessageBar(inputId = "mymessagebar", placeholder = "Message"),
-#' uiOutput("messageContent")
-#' )
-#' ),
-#' server = function(input, output, session) {
-#' output$messageContent <- renderUI({
-#' req(input$mymessagebar)
-#' tagList(
-#' f7BlockTitle("Message Content", size = "large"),
-#' f7Block(strong = TRUE, inset = TRUE, input$mymessagebar)
-#' )
-#' })
-#'
-#' observeEvent(input$updateMessageBar, {
-#' updateF7MessageBar(
-#' inputId = "mymessagebar",
-#' value = "sjsjsj"
-#' )
-#' })
-#'
-#' observeEvent(input$updateMessageBarPlaceholder, {
-#' updateF7MessageBar(
-#' inputId = "mymessagebar",
-#' placeholder = "Enter your message"
-#' )
-#' })
-#' }
-#' )
-#' }
+#' @example inst/examples/messagebar/app.R
updateF7MessageBar <- function(inputId, value = NULL, placeholder = NULL,
session = shiny::getDefaultReactiveDomain()) {
message <- dropNulls(
@@ -163,10 +105,6 @@ updateF7MessageBar <- function(inputId, value = NULL, placeholder = NULL,
session$sendInputMessage(inputId, message)
}
-
-
-
-
#' Framework7 message element
#'
#' \code{f7Message} creates a message item to be inserted in
@@ -206,16 +144,14 @@ f7Message <- function(text, name, type = c("sent", "received"),
)
}
-
-
#' Update Framework7 message container
#'
-#' \code{updateF7Messages} add messages to an \link{f7Messages} container.
+#' \code{updateF7Messages} add messages to a \link{f7Messages} container.
#'
#' @param id Reference to \link{f7Messages} container.
#' @param showTyping Show typing when a new message comes. Default to FALSE.
#' Does not work yet...
-#' @param messages List of \link{f7Messages}.
+#' @param messages List of \link{f7Message}.
#' @param session Shiny session object
#'
#'
diff --git a/inst/examples/messagebar/app.R b/inst/examples/messagebar/app.R
new file mode 100644
index 00000000..c071c667
--- /dev/null
+++ b/inst/examples/messagebar/app.R
@@ -0,0 +1,51 @@
+library(shiny)
+library(shinyMobile)
+
+app <- shinyApp(
+ ui = f7Page(
+ title = "Update message bar",
+ f7SingleLayout(
+ navbar = f7Navbar(
+ title = "Message bar",
+ hairline = FALSE,
+ shadow = TRUE
+ ),
+ toolbar = f7Toolbar(
+ position = "bottom",
+ f7Link(label = "Link 1", href = "https://www.google.com"),
+ f7Link(label = "Link 2", href = "https://www.google.com")
+ ),
+ # main content
+ f7Segment(
+ container = "segment",
+ f7Button("updateMessageBar", "Update value"),
+ f7Button("updateMessageBarPlaceholder", "Update placeholder")
+ ),
+ f7MessageBar(inputId = "mymessagebar", placeholder = "Message"),
+ uiOutput("messageContent")
+ )
+ ),
+ server = function(input, output, session) {
+ output$messageContent <- renderUI({
+ req(input$mymessagebar)
+ tagList(
+ f7BlockTitle("Message Content", size = "large"),
+ f7Block(strong = TRUE, inset = TRUE, input$mymessagebar)
+ )
+ })
+ observeEvent(input$updateMessageBar, {
+ updateF7MessageBar(
+ inputId = "mymessagebar",
+ value = "sjsjsj"
+ )
+ })
+ observeEvent(input$updateMessageBarPlaceholder, {
+ updateF7MessageBar(
+ inputId = "mymessagebar",
+ placeholder = "Enter your message"
+ )
+ })
+ }
+)
+
+if (interactive() || identical(Sys.getenv("TESTTHAT"), "true")) app
diff --git a/inst/examples/messages/app.R b/inst/examples/messages/app.R
index 8648eb96..50ddcf4e 100644
--- a/inst/examples/messages/app.R
+++ b/inst/examples/messages/app.R
@@ -16,9 +16,6 @@ app <- shinyApp(
)
),
server = function(input, output, session) {
- observe({
- print(input$mymessages)
- })
# Send a message
observeEvent(input[["mymessagebar-send"]], {
updateF7Messages(
diff --git a/inst/shinyMobile-1.0.1/dist/shinyMobile.min.css.map b/inst/shinyMobile-1.0.1/dist/shinyMobile.min.css.map
index a625254b..ae1820f9 100644
--- a/inst/shinyMobile-1.0.1/dist/shinyMobile.min.css.map
+++ b/inst/shinyMobile-1.0.1/dist/shinyMobile.min.css.map
@@ -1,6 +1,6 @@
{
"version": 3,
- "sources": ["../../../node_modules/framework7/framework7-bundle.min.css", "../../../styles/Users/davidgranjon/david/RinteRface/shinyMobile/styles/main.scss", "../../../styles/%3Cinput%20css%20nFKXso%3E"],
+ "sources": ["../../../node_modules/framework7/framework7-bundle.min.css", "../../../styles/Users/davidgranjon/david/RinteRface/shinyMobile/styles/main.scss", "../../../styles/%3Cinput%20css%20B-gIEz%3E"],
"sourcesContent": ["/**\n * Framework7 8.3.2\n * Full featured mobile HTML framework for building iOS & Android apps\n * https://framework7.io/\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 27, 2024\n */\n\n:root{--f7-safe-area-left:0px;--f7-safe-area-right:0px;--f7-safe-area-top:0px;--f7-safe-area-bottom:0px;--f7-safe-area-outer-left:0px;--f7-safe-area-outer-right:0px;--f7-device-pixel-ratio:1}@supports (left:env(safe-area-inset-left)){:root{--f7-safe-area-top:env(safe-area-inset-top);--f7-safe-area-bottom:env(safe-area-inset-bottom)}:root .ios-edges,:root .ios-left-edge,:root .panel-left,:root .popup,:root .safe-area-left,:root .safe-areas,:root .sheet-modal{--f7-safe-area-left:env(safe-area-inset-left);--f7-safe-area-outer-left:env(safe-area-inset-left)}:root .ios-edges,:root .ios-right-edge,:root .panel-right,:root .popup,:root .safe-area-right,:root .safe-areas,:root .sheet-modal{--f7-safe-area-right:env(safe-area-inset-right);--f7-safe-area-outer-right:env(safe-area-inset-right)}:root .no-ios-edges,:root .no-ios-left-edge,:root .no-safe-area-left,:root .no-safe-areas{--f7-safe-area-left:0px;--f7-safe-area-outer-left:0px}:root .no-ios-edges,:root .no-ios-right-edge,:root .no-safe-area-right,:root .no-safe-areas{--f7-safe-area-right:0px;--f7-safe-area-outer-right:0px}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){:root{--f7-device-pixel-ratio:2}}@media (-webkit-min-device-pixel-ratio:3),(min-resolution:3dppx){:root{--f7-device-pixel-ratio:3}}:root{--f7-font-size:14px;--f7-bars-translucent-opacity:0.8;--f7-bars-translucent-blur:20px}.ios{--f7-font-family:-apple-system,SF Pro Text,SF UI Text,system-ui,Helvetica Neue,Helvetica,Arial,sans-serif;--f7-line-height:1.4;--f7-bars-text-color:#000;--f7-text-color:#000;--f7-bars-bg-color:#f7f7f8;--f7-bars-bg-color-rgb:247,247,248;--f7-bars-border-color:rgba(0, 0, 0, 0.25)}.ios .dark,.ios.dark{--f7-bars-text-color:#fff;--f7-text-color:#fff;--f7-bars-bg-color:#121212;--f7-bars-bg-color-rgb:22,22,22;--f7-bars-border-color:rgba(255, 255, 255, 0.16)}.md{--f7-font-family:Roboto,system-ui,Noto,Helvetica,Arial,sans-serif;--f7-line-height:1.5;--f7-bars-border-color:transparent;--f7-text-color:#212121}.md .dark,.md.dark{--f7-text-color:rgba(255, 255, 255, 0.87)}.md,.md .dark,.md [class*=color-]{--f7-bars-link-color:var(--f7-md-on-surface);--f7-bars-bg-color:var(--f7-md-surface-2);--f7-bars-bg-color-rgb:var(--f7-md-surface-2-rgb)}.text-color-primary{--f7-theme-color-text-color:var(--f7-theme-color)}.bg-color-primary{--f7-theme-color-bg-color:var(--f7-theme-color)}.border-color-primary{--f7-theme-color-border-color:var(--f7-theme-color)}.ripple-color-primary{--f7-theme-color-ripple-color:rgba(var(--f7-theme-color-rgb), 0.3)}@font-face{font-family:framework7-core-icons;src:url('data:application/font-woff;charset=utf-8;base64, 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') format('woff');font-weight:400;font-style:normal}html{overscroll-behavior:none}.framework7-root,body,html{position:relative;height:100%;width:100%;overflow-x:hidden}body{margin:0;padding:0;width:100%;background:#fff;overflow:hidden;overflow-y:scroll;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;font-family:var(--f7-font-family);font-size:var(--f7-font-size);line-height:var(--f7-line-height);color:var(--f7-text-color);scrollbar-width:none;scrollbar-color:transparent}body::-webkit-scrollbar{-webkit-appearance:none;appearance:none;width:0px;display:none;opacity:0;background:0 0}body::-webkit-scrollbar-track{box-shadow:none;background:0 0}body::-webkit-scrollbar-thumb{background-color:transparent;outline:0;border-radius:9999px;position:relative}.dark body,body.dark{background:#000}.dark{color:var(--f7-text-color)}.framework7-root{overflow:hidden;box-sizing:border-box}.framework7-initializing *,.framework7-initializing :after,.framework7-initializing :before{transition-duration:0s!important}.device-android,.device-ios{cursor:pointer}.device-ios{touch-action:manipulation}@media (width:1024px) and (height:691px) and (orientation:landscape){.framework7-root,body,html{height:671px}}@media (width:1024px) and (height:692px) and (orientation:landscape){.framework7-root,body,html{height:672px}}*{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none}a,input,select,textarea{outline:0}a{cursor:pointer;text-decoration:none;color:var(--f7-theme-color)}.item-link,.link{cursor:pointer}p{margin:1em 0}.disabled{opacity:.55!important;pointer-events:none!important}html.device-full-viewport,html.device-full-viewport body{height:100vh}.ios .if-md,.ios .if-not-ios,.ios .md-only,.ios .not-ios{display:none!important}@media (width:1024px) and (height:691px) and (orientation:landscape){.ios,.ios .framework7-root,.ios body{height:671px}}@media (width:1024px) and (height:692px) and (orientation:landscape){.ios,.ios .framework7-root,.ios body{height:672px}}.md .if-ios,.md .if-not-md,.md .ios-only,.md .not-md{display:none!important}.view,.views{position:relative;height:100%;z-index:5000;overflow:hidden;box-sizing:border-box}.framework7-root>.view,.framework7-root>.views{height:100%}.view-resize-handler{width:6px;height:100%;position:absolute;left:var(--f7-page-master-width);margin-left:-3px;top:0;cursor:col-resize;z-index:1000;display:none}.view-master-detail .view-resize-handler{display:block}:root{--f7-page-master-width:320px;--f7-page-master-border-color:rgba(0, 0, 0, 0.1);--f7-page-master-border-width:1px;--f7-page-swipeback-transition-duration:300ms;--f7-page-parallax-transition-duration:500ms;--f7-page-cover-transition-duration:450ms;--f7-page-dive-transition-duration:500ms;--f7-page-fade-transition-duration:500ms;--f7-page-flip-transition-duration:700ms;--f7-page-push-transition-duration:500ms;--f7-page-title-line-height:1.2;--f7-page-title-text-color:inherit;--f7-page-title-padding-left:16px;--f7-page-title-padding-right:16px}.ios{--f7-page-transition-duration:400ms;--f7-page-title-font-size:34px;--f7-page-title-font-weight:700;--f7-page-title-letter-spacing:-0.03em;--f7-page-title-padding-vertical:6px;--f7-page-bg-color:#efeff4}.ios .dark,.ios.dark{--f7-page-bg-color:#000}.md{--f7-page-transition-duration:400ms;--f7-page-title-font-size:34px;--f7-page-title-font-weight:500;--f7-page-title-letter-spacing:0;--f7-page-title-padding-vertical:8px}.md,.md .dark,.md [class*=color-]{--f7-page-bg-color:var(--f7-md-surface)}.dark{--f7-page-master-border-color:rgba(255, 255, 255, 0.2)}.pages{position:relative;width:100%;height:100%;overflow:hidden}.page{box-sizing:border-box;position:absolute;left:0;top:0;width:100%;height:100%;transform:none;background-color:var(--f7-page-bg-color);z-index:1}.page-with-navbar-large-collapsed{--f7-navbar-large-collapse-progress:1}.page-previous{pointer-events:none}.page-content{overflow:auto;-webkit-overflow-scrolling:touch;box-sizing:border-box;height:100%;position:relative;z-index:1;padding-top:calc(var(--f7-page-navbar-offset,0px) + var(--f7-page-toolbar-top-offset,0px) + var(--f7-page-subnavbar-offset,0px) + var(--f7-page-searchbar-offset,0px) + var(--f7-page-content-extra-padding-top,0px));padding-bottom:calc(var(--f7-page-toolbar-bottom-offset,0px) + var(--f7-safe-area-bottom) + var(--f7-page-content-extra-padding-bottom,0px))}.page-transitioning,.page-transitioning .page-opacity-effect,.page-transitioning .page-shadow-effect{transition-duration:var(--f7-page-transition-duration)}.page-transitioning-swipeback,.page-transitioning-swipeback .page-opacity-effect,.page-transitioning-swipeback .page-shadow-effect{transition-duration:var(--f7-page-swipeback-transition-duration)}.router-transition-backward .page-current,.router-transition-backward .page-next,.router-transition-forward .page-current,.router-transition-forward .page-next{pointer-events:none}.page-shadow-effect{position:absolute;top:0;width:16px;bottom:0;z-index:-1;content:'';opacity:0;right:100%;background:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,0) 10%,rgba(0,0,0,.01) 50%,rgba(0,0,0,.2) 100%)}.page-opacity-effect{position:absolute;left:0;top:0;background:rgba(0,0,0,.1);width:100%;bottom:0;content:'';opacity:0;z-index:10000}.ios .page-previous{transform:translate3d(-20%,0,0)}.ios .page-next{transform:translate3d(100%,0,0)}.ios .page-previous .page-opacity-effect{opacity:1}.ios .page-previous:after{opacity:1}.ios .page-current .page-shadow-effect{opacity:1}.ios .router-transition-forward .page-next{animation:ios-page-next-to-current var(--f7-page-transition-duration) forwards}.ios .router-transition-forward .page-next:before{position:absolute;top:0;width:16px;bottom:0;z-index:-1;content:'';opacity:0;right:100%;background:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,0) 10%,rgba(0,0,0,.01) 50%,rgba(0,0,0,.2) 100%);animation:ios-page-element-fade-in var(--f7-page-transition-duration) forwards}.ios .router-transition-forward .page-current{animation:ios-page-current-to-previous var(--f7-page-transition-duration) forwards}.ios .router-transition-forward .page-current:after{position:absolute;left:0;top:0;background:rgba(0,0,0,.1);width:100%;bottom:0;content:'';opacity:0;z-index:10000;animation:ios-page-element-fade-in var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .page-previous{animation:ios-page-previous-to-current var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .page-previous:after{position:absolute;left:0;top:0;background:rgba(0,0,0,.1);width:100%;bottom:0;content:'';opacity:0;z-index:10000;animation:ios-page-element-fade-out var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .page-current{animation:ios-page-current-to-next var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .page-current:before{position:absolute;top:0;width:16px;bottom:0;z-index:-1;content:'';opacity:0;right:100%;background:linear-gradient(to right,rgba(0,0,0,0) 0%,rgba(0,0,0,0) 10%,rgba(0,0,0,.01) 50%,rgba(0,0,0,.2) 100%);animation:ios-page-element-fade-out var(--f7-page-transition-duration) forwards}@keyframes ios-page-next-to-current{from{transform:translate3d(100%,0,0)}to{transform:translate3d(0%,0,0)}}@keyframes ios-page-previous-to-current{from{transform:translate3d(-20%,0,0)}to{transform:translate3d(0%,0,0)}}@keyframes ios-page-current-to-previous{from{transform:translate3d(0,0,0)}to{transform:translate3d(-20%,0,0)}}@keyframes ios-page-current-to-next{from{transform:translate3d(0,0,0)}to{transform:translate3d(100%,0,0)}}@keyframes ios-page-element-fade-in{from{opacity:0}to{opacity:1}}@keyframes ios-page-element-fade-out{from{opacity:1}to{opacity:0}}.md .page-previous{transform:translate3d(0,-20px,0)}.md .page-next{pointer-events:none;transform:translate3d(0,128px,0);opacity:0}.md .page-next.page-next-on-right{transform:translate3d(100%,0,0);opacity:1}.md .router-transition-forward .page-next{opacity:1;animation:md-page-next-to-current var(--f7-page-transition-duration) forwards cubic-bezier(0,.8,.3,1)}.md .router-transition-forward .page-current{animation:md-page-current-to-previous var(--f7-page-transition-duration) forwards cubic-bezier(0,.8,.3,1)}.md .router-transition-backward .page-current{animation:md-page-current-to-next calc(var(--f7-page-transition-duration)/ 4) forwards cubic-bezier(.8,0,1,.3),md-page-current-to-next-opacity 0s calc(var(--f7-page-transition-duration)/ 4) forwards}.md .router-transition-backward .page-previous{animation:md-page-previous-to-current var(--f7-page-transition-duration) forwards}@keyframes md-page-next-to-current{from{transform:translate3d(0,128px,0)}to{transform:translate3d(0,0px,0)}}@keyframes md-page-current-to-next{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,128px,0)}}@keyframes md-page-current-to-next-opacity{from{opacity:1}to{opacity:0}}@keyframes md-page-current-to-previous{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,-20px,0)}}@keyframes md-page-previous-to-current{from{transform:translate3d(0,-20px,0)}to{transform:translate3d(0,0px,0)}}.view:not(.view-master-detail) .page-master-stacked{display:none}.view:not(.view-master-detail) .navbar-master-stacked{display:none}.view-master-detail .navbar-master,.view-master-detail .page-master{width:var(--f7-page-master-width);--f7-safe-area-right:0px;--f7-safe-area-outer-right:0px;border-right:var(--f7-page-master-border-width) solid var(--f7-page-master-border-color)}.view-master-detail .navbar-master-detail,.view-master-detail .page-master-detail{width:calc(100% - var(--f7-page-master-width));--f7-safe-area-left:0px;--f7-safe-area-outer-left:0px;left:var(--f7-page-master-width)}.view-master-detail .page-master-detail>.navbar-master-detail{left:0;right:0;width:100%}.view-master-detail .page-master{z-index:2;transform:none;pointer-events:auto}.view-master-detail .page-master:after,.view-master-detail .page-master:before{display:none}.view-master-detail.router-transition .page-master{animation:none}.ios .router-transition-custom .page-next,.ios .router-transition-custom .page-previous,.md .router-transition-custom .page-next,.md .router-transition-custom .page-previous{opacity:1;transform:none}.ios .router-transition-custom.view-master-detail .page-master,.md .router-transition-custom.view-master-detail .page-master{animation:none}.page-title{position:relative;z-index:10;text-overflow:ellipsis;white-space:nowrap;color:var(--f7-page-title-text-color);letter-spacing:var(--f7-page-title-letter-spacing);font-size:var(--f7-page-title-font-size);font-weight:var(--f7-page-title-font-weight);line-height:var(--f7-page-title-line-height);padding-left:calc(var(--f7-page-title-padding-left) + var(--f7-safe-area-left));padding-right:calc(var(--f7-page-title-padding-right) + var(--f7-safe-area-right));padding-top:var(--f7-page-title-padding-vertical);padding-bottom:var(--f7-page-title-padding-vertical);box-sizing:border-box;overflow:hidden;width:100%}.router-transition-f7-circle-backward:after,.router-transition-f7-circle-forward:after{content:'';position:absolute;left:50%;top:50%;width:100vmax;height:100vmax;margin-left:-50vmax;margin-top:-50vmax;background:var(--f7-page-bg-color);z-index:100}.router-transition-f7-circle-backward .page,.router-transition-f7-circle-forward .page{pointer-events:none}.router-transition-f7-circle-forward:after{transform:scale(0);border-radius:50%;animation:f7-circle-circle-in .4s forwards}.ios .router-transition-f7-circle-forward .page-next,.md .router-transition-f7-circle-forward .page-next{opacity:0;transform:scale(.9);animation:f7-circle-next-to-current .3s forwards;animation-delay:.3s;z-index:150}.router-transition-f7-circle-backward:after{animation:f7-circle-circle-out .3s forwards;animation-delay:350ms}.ios .router-transition-f7-circle-backward .page-current,.md .router-transition-f7-circle-backward .page-current{animation:f7-circle-current-to-next .7s forwards;z-index:150}@keyframes f7-circle-circle-in{from{transform:scale(0);border-radius:50%}50%{border-radius:50%}to{transform:scale(1);border-radius:0%}}@keyframes f7-circle-circle-out{from{transform:scale(1);border-radius:0%}50%{border-radius:50%}to{transform:scale(0);border-radius:50%}}@keyframes f7-circle-next-to-current{from{transform:scale(.9);opacity:0}40%{transform:scale(1.035);opacity:1}to{transform:scale(1);opacity:1}}@keyframes f7-circle-current-to-next{from{transform:scale(1);opacity:1}34%{transform:scale(1.035);opacity:1}57%{transform:scale(.9);opacity:0}to{transform:scale(.9);opacity:0}}.router-transition-f7-cover-v-backward,.router-transition-f7-cover-v-forward{background:#000;perspective:1200px}.router-transition-f7-cover-v-backward .page,.router-transition-f7-cover-v-forward .page{pointer-events:none}.router-transition-f7-cover-v-forward .page-next{animation:f7-cover-v-next-to-current var(--f7-page-cover-transition-duration) forwards}.router-transition-f7-cover-v-forward .page-current{animation:f7-cover-v-current-to-prev var(--f7-page-cover-transition-duration) forwards}.router-transition-f7-cover-v-backward .page-current{animation:f7-cover-v-current-to-next var(--f7-page-cover-transition-duration) forwards}.router-transition-f7-cover-v-backward .page-previous{animation:f7-cover-v-prev-to-current var(--f7-page-cover-transition-duration) forwards}@keyframes f7-cover-v-next-to-current{from{transform:translateY(100%)}to{transform:translateY(0%)}}@keyframes f7-cover-v-current-to-next{from{transform:translateY(0%)}to{transform:translateY(100%)}}@keyframes f7-cover-v-current-to-prev{from{transform:translateZ(0);opacity:1}to{transform:translateZ(-300px);opacity:.5}}@keyframes f7-cover-v-prev-to-current{from{transform:translateZ(-300px);opacity:.5}to{transform:translateZ(0);opacity:1}}.router-transition-f7-cover-backward,.router-transition-f7-cover-forward{background:#000;perspective:1200px}.router-transition-f7-cover-backward .page,.router-transition-f7-cover-forward .page{pointer-events:none}.router-transition-f7-cover-forward .page-next{animation:f7-cover-next-to-current var(--f7-page-cover-transition-duration) forwards}.router-transition-f7-cover-forward .page-current{animation:f7-cover-current-to-prev var(--f7-page-cover-transition-duration) forwards}.router-transition-f7-cover-backward .page-current{animation:f7-cover-current-to-next var(--f7-page-cover-transition-duration) forwards}.router-transition-f7-cover-backward .page-previous{animation:f7-cover-prev-to-current var(--f7-page-cover-transition-duration) forwards}@keyframes f7-cover-next-to-current{from{transform:translateX(100%)}to{transform:translateX(0%)}}@keyframes f7-cover-current-to-next{from{transform:translateX(0%)}to{transform:translateX(100%)}}@keyframes f7-cover-current-to-prev{from{transform:translateZ(0);opacity:1}to{transform:translateZ(-300px);opacity:.5}}@keyframes f7-cover-prev-to-current{from{transform:translateZ(-300px);opacity:.5}to{transform:translateZ(0);opacity:1}}.router-transition-f7-dive-backward,.router-transition-f7-dive-forward{background:var(--f7-page-bg-color);perspective:1200px}.router-transition-f7-dive-backward .page,.router-transition-f7-dive-forward .page{pointer-events:none}.router-transition-f7-dive-forward .page-next{animation:f7-dive-next-to-current var(--f7-page-dive-transition-duration) forwards}.router-transition-f7-dive-forward .page-current{animation:f7-dive-current-to-prev var(--f7-page-dive-transition-duration) forwards}.router-transition-f7-dive-backward .page-current{animation:f7-dive-current-to-next var(--f7-page-dive-transition-duration) forwards}.router-transition-f7-dive-backward .page-previous{animation:f7-dive-prev-to-current var(--f7-page-dive-transition-duration) forwards}@keyframes f7-dive-next-to-current{from{opacity:0;transform:translateZ(-150px)}50%{opacity:0}to{opacity:1;transform:translateZ(0px)}}@keyframes f7-dive-current-to-next{from{opacity:1;transform:translateZ(0px)}50%{opacity:0}to{opacity:0;transform:translateZ(-150px)}}@keyframes f7-dive-current-to-prev{from{transform:translateZ(0px);opacity:1}50%{opacity:0}to{opacity:0;transform:translateZ(150px)}}@keyframes f7-dive-prev-to-current{from{opacity:0;transform:translateZ(150px)}50%{opacity:0}to{opacity:1;transform:translateZ(0px)}}.router-transition-f7-fade-backward,.router-transition-f7-fade-forward{background:var(--f7-page-bg-color)}.router-transition-f7-fade-backward .page,.router-transition-f7-fade-forward .page{pointer-events:none}.ios .router-transition-f7-fade-forward .page-next,.md .router-transition-f7-fade-forward .page-next{opacity:0;animation:f7-fade-in var(--f7-page-fade-transition-duration) forwards}.ios .router-transition-f7-fade-forward .page-current,.md .router-transition-f7-fade-forward .page-current{animation:f7-fade-out var(--f7-page-fade-transition-duration) forwards}.ios .router-transition-f7-fade-backward .page-current,.md .router-transition-f7-fade-backward .page-current{animation:f7-fade-out var(--f7-page-fade-transition-duration) forwards}.ios .router-transition-f7-fade-backward .page-previous,.md .router-transition-f7-fade-backward .page-previous{animation:f7-fade-in var(--f7-page-fade-transition-duration) forwards}@keyframes f7-fade-in{from{opacity:0}50%{opacity:0}to{opacity:1}}@keyframes f7-fade-out{from{opacity:1}50%{opacity:0}to{opacity:0}}.router-transition-f7-flip-backward,.router-transition-f7-flip-forward{background:#000;perspective:1200px}.router-transition-f7-flip-backward .page,.router-transition-f7-flip-forward .page{backface-visibility:hidden;overflow:hidden;pointer-events:none}.router-transition-f7-flip-forward .page-next{transform-style:preserve-3d;animation:f7-flip-next-to-current var(--f7-page-flip-transition-duration) forwards}.router-transition-f7-flip-forward .page-current{transform-style:preserve-3d;animation:f7-flip-current-to-prev var(--f7-page-flip-transition-duration) forwards}.router-transition-f7-flip-backward .page-current{transform-style:preserve-3d;animation:f7-flip-current-to-next var(--f7-page-flip-transition-duration) forwards}.router-transition-f7-flip-backward .page-previous{transform-style:preserve-3d;animation:f7-flip-prev-to-current var(--f7-page-flip-transition-duration) forwards}@keyframes f7-flip-next-to-current{from{border-radius:32px;transform:translateZ(-100vmax) rotateY(180deg)}to{border-radius:0;transform:translateZ(0px) rotateY(0deg)}}@keyframes f7-flip-current-to-next{from{border-radius:0px;transform:translateZ(0px) rotateY(0deg)}to{border-radius:32px;transform:translateZ(-100vmax) rotateY(180deg)}}@keyframes f7-flip-current-to-prev{from{border-radius:0px;transform:translateZ(0px) rotateY(0deg)}to{border-radius:32px;transform:translateZ(-100vmax) rotateY(-180deg)}}@keyframes f7-flip-prev-to-current{from{border-radius:32px;transform:translateZ(-100vmax) rotateY(-180deg)}to{border-radius:0px;transform:translateZ(0px) rotateY(0deg)}}.router-transition-f7-parallax-forward .page{pointer-events:none}.router-transition-f7-parallax-forward .page-next{animation:f7-parallax-next-to-current var(--f7-page-parallax-transition-duration) forwards}.router-transition-f7-parallax-forward .page-current{animation:f7-parallax-current-to-prev var(--f7-page-parallax-transition-duration) forwards}.router-transition-f7-parallax-backward .page{pointer-events:none}.router-transition-f7-parallax-backward .page-current{animation:f7-parallax-current-to-next var(--f7-page-parallax-transition-duration) forwards}.router-transition-f7-parallax-backward .page-previous{animation:f7-parallax-prev-to-current var(--f7-page-parallax-transition-duration) forwards}@keyframes f7-parallax-next-to-current{from{transform:translateX(100%)}to{transform:translateX(0%)}}@keyframes f7-parallax-current-to-next{from{transform:translateX(0%)}to{transform:translateX(100%)}}@keyframes f7-parallax-current-to-prev{from{transform:translateX(0%)}to{transform:translateX(-20%)}}@keyframes f7-parallax-prev-to-current{from{transform:translateX(-20%)}to{transform:translateX(0%)}}.router-transition-f7-push-forward .page{pointer-events:none}.router-transition-f7-push-forward .page-next{animation:f7-push-next-to-current var(--f7-page-push-transition-duration) forwards}.router-transition-f7-push-forward .page-current{animation:f7-push-current-to-prev var(--f7-page-push-transition-duration) forwards}.router-transition-f7-push-backward .page{pointer-events:none}.router-transition-f7-push-backward .page-current{animation:f7-push-current-to-next var(--f7-page-push-transition-duration) forwards}.router-transition-f7-push-backward .page-previous{animation:f7-push-prev-to-current var(--f7-page-push-transition-duration) forwards}@keyframes f7-push-next-to-current{from{transform:translateX(100%)}to{transform:translateX(0%)}}@keyframes f7-push-current-to-next{from{transform:translateX(0%)}to{transform:translateX(100%)}}@keyframes f7-push-current-to-prev{from{transform:translateX(0%)}to{transform:translateX(-100%)}}@keyframes f7-push-prev-to-current{from{transform:translateX(-100%)}to{transform:translateX(0%)}}:root{--f7-link-highlight-black:rgba(0, 0, 0, 0.1);--f7-link-highlight-white:rgba(255, 255, 255, 0.15);--f7-link-highlight-color:rgba(var(--f7-theme-color-rgb), 0.15)}.ios{--f7-link-pressed-opacity:0.3}.link,.tab-link{display:inline-flex;align-items:center;align-content:center;justify-content:center;position:relative;box-sizing:border-box;z-index:1;--f7-touch-ripple-color:var(--f7-link-touch-ripple-color, rgba(var(--f7-theme-color-rgb), 0.25))}.link i+i,.link i+span,.link span+i,.link span+span{margin-left:4px}.link[class*=color-]{color:var(--f7-theme-color)}.ios .link{transition:opacity .3s}.ios .link.active-state{opacity:var(--f7-link-pressed-opacity);transition-duration:0s}:root{--f7-navbar-hide-show-transition-duration:400ms;--f7-navbar-title-line-height:1.2;--f7-navbar-subtitle-text-align:inherit;--f7-navbar-large-title-line-height:1.2;--f7-navbar-large-title-text-color:inherit;--f7-navbar-large-title-padding-left:16px;--f7-navbar-large-title-padding-right:16px}.ios{--f7-navbar-height:44px;--f7-navbar-font-size:17px;--f7-navbar-title-font-size:inherit;--f7-navbar-inner-padding-left:8px;--f7-navbar-inner-padding-right:8px;--f7-navbar-title-font-weight:600;--f7-navbar-title-margin-left:0;--f7-navbar-title-margin-right:0;--f7-navbar-title-text-align:center;--f7-navbar-subtitle-font-size:10px;--f7-navbar-subtitle-line-height:1;--f7-navbar-large-title-height:52px;--f7-navbar-large-title-font-size:34px;--f7-navbar-large-title-font-weight:700;--f7-navbar-large-title-letter-spacing:-0.03em;--f7-navbar-large-title-padding-vertical:6px;--f7-navbar-subtitle-text-color:rgba(0, 0, 0, 0.55)}.ios .dark,.ios.dark{--f7-navbar-subtitle-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-navbar-height:64px;--f7-navbar-font-size:16px;--f7-navbar-title-font-size:22px;--f7-navbar-inner-padding-left:0px;--f7-navbar-inner-padding-right:0px;--f7-navbar-title-font-weight:400;--f7-navbar-title-margin-left:0px;--f7-navbar-title-margin-right:16px;--f7-navbar-title-text-align:left;--f7-navbar-subtitle-font-size:14px;--f7-navbar-subtitle-line-height:1.2;--f7-navbar-large-title-font-size:28px;--f7-navbar-large-title-height:88px;--f7-navbar-large-title-font-weight:400;--f7-navbar-large-title-letter-spacing:0;--f7-navbar-large-title-padding-vertical:8px;--f7-navbar-link-height:48px;--f7-navbar-link-line-height:48px}.md,.md .dark,.md [class*=color-]{--f7-navbar-link-color:var(--f7-md-on-surface);--f7-navbar-text-color:var(--f7-md-on-surface);--f7-navbar-subtitle-text-color:var(--f7-md-on-surface-variant)}.navbar,.navbars{z-index:500;left:0;top:0;width:100%}.navbars{position:absolute}.navbars .navbar{z-index:auto}.navbars .navbar-transitioning{z-index:500}.navbar{--f7-navbar-large-collapse-progress:0;position:relative;backface-visibility:hidden;box-sizing:border-box;margin:0;height:calc(var(--f7-navbar-height) + var(--f7-safe-area-top));color:var(--f7-navbar-text-color,var(--f7-bars-text-color));font-size:var(--f7-navbar-font-size)}.navbar b{font-weight:500}.navbar a{color:var(--f7-navbar-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.navbar a.link{display:flex;justify-content:flex-start;line-height:var(--f7-navbar-link-line-height, var(--f7-navbar-height));height:var(--f7-navbar-link-height,var(--f7-navbar-height))}.navbar .left,.navbar .right,.navbar .title{position:relative;z-index:10}.navbar .title{position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:10;font-weight:var(--f7-navbar-title-font-weight);display:inline-block;line-height:var(--f7-navbar-title-line-height);text-align:var(--f7-navbar-title-text-align);font-size:var(--f7-navbar-title-font-size);margin-left:var(--f7-navbar-title-margin-left);margin-right:var(--f7-navbar-title-margin-left)}.navbar .subtitle{display:block;color:var(--f7-navbar-subtitle-text-color);font-weight:400;font-size:var(--f7-navbar-subtitle-font-size);line-height:var(--f7-navbar-subtitle-line-height);text-align:var(--f7-navbar-subtitle-text-align)}.navbar .left,.navbar .right{flex-shrink:0;display:flex;justify-content:flex-start;align-items:center}.navbar .right:first-child{position:absolute;height:100%}.navbar .no-outline .navbar-bg:after,.navbar.no-outline .navbar-bg:after{display:none!important}.navbar .no-outline .title-large:after,.navbar.no-outline .title-large:after{display:none!important}.navbar-hidden .navbar .navbar-bg:before,.navbar.navbar-hidden .navbar-bg:before{opacity:0!important}.navbar-bg{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:0;background:var(--f7-navbar-bg-color);background-color:var(--f7-navbar-bg-color,var(--f7-bars-bg-color));transition-property:transform}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .navbar-bg{background-color:rgba(var(--f7-navbar-bg-color-rgb,var(--f7-bars-bg-color-rgb)),var(--f7-bars-translucent-opacity));-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.navbar-bg:after,.navbar-bg:before{backface-visibility:hidden}.navbar-bg:after{content:'';position:absolute;background-color:var(--f7-navbar-border-color,var(--f7-bars-border-color));display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.navbar-bg:after{z-index:1}.navbar-transitioning,.navbar-transitioning .left,.navbar-transitioning .navbar-bg,.navbar-transitioning .navbar-bg:before,.navbar-transitioning .right,.navbar-transitioning .subnavbar,.navbar-transitioning .title,.navbar-transitioning .title-large-text{transition-duration:var(--f7-navbar-hide-show-transition-duration)}.navbar-page-transitioning{transition-duration:var(--f7-page-swipeback-transition-duration)!important}.navbar-page-transitioning .navbar-bg,.navbar-page-transitioning .title-large-text{transition-duration:var(--f7-page-swipeback-transition-duration)!important}.navbar-hidden{transform:translate3d(0,calc(-1 * var(--f7-navbar-height)),0)}.navbar-hidden .navbar-inner{pointer-events:none}.navbar-hidden .navbar-inner>.left,.navbar-hidden .navbar-inner>.right,.navbar-hidden .navbar-inner>.title{opacity:0!important}.navbar-hidden .subnavbar{pointer-events:auto}.navbar-hidden-statusbar{transform:translate3d(0,calc(-1 * var(--f7-navbar-height) - var(--f7-safe-area-top)),0)}.navbar-large-hidden .navbar-large{--f7-navbar-large-collapse-progress:1}.navbar-inner{position:absolute;left:0;bottom:0;width:100%;height:100%;display:flex;align-items:center;box-sizing:border-box;padding:var(--f7-safe-area-top) calc(var(--f7-navbar-inner-padding-right) + var(--f7-safe-area-right)) 0 calc(var(--f7-navbar-inner-padding-left) + var(--f7-safe-area-left));transform:translate3d(0,0,0);z-index:10}.navbars>.navbar,.page>.navbar,.view>.navbar,.views>.navbar{position:absolute}.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible):not(\n.with-searchbar-expandable-enabled\n) .navbar-bg,.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible):not(\n.with-searchbar-expandable-enabled\n) .title{opacity:0}.navbar-large .navbar-bg{height:calc(100% + var(--f7-navbar-large-title-height));transform:translate3d(0px,calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)),0)}.navbar-large-transparent .navbar-bg,.navbar-large.navbar-transparent .navbar-bg{opacity:var(--f7-navbar-large-collapse-progress)}.ios .router-navbar-transition-from-large .navbar-bg,.ios .router-navbar-transition-to-large .navbar-bg,.navbar-bg.ios-swipeback-navbar-bg-large,.navbar-large-transparent .navbar-bg.ios-swipeback-navbar-bg-large,.navbar-large.navbar-transparent .navbar-bg.ios-swipeback-navbar-bg-large{height:calc(100% + var(--f7-navbar-large-title-height));transform:translate3d(0px,calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)),0)}.ios .navbar:not(.navbar-large) .navbar-bg{--f7-navbar-large-collapse-progress:1}.navbar-large .title{opacity:var(--f7-navbar-large-collapse-progress)}.navbar-large-collapsed{--f7-navbar-large-collapse-progress:1}.navbar-large-collapsed .title-large{pointer-events:none}.navbar .title-large{box-sizing:border-box;position:absolute;left:0;right:0;top:100%;display:flex;white-space:nowrap;overflow:hidden;height:var(--f7-navbar-large-title-height);z-index:5}.navbar .title-large-text{text-overflow:ellipsis;white-space:nowrap;color:var(--f7-navbar-large-title-text-color);letter-spacing:var(--f7-navbar-large-title-letter-spacing);font-size:var(--f7-navbar-large-title-font-size);font-weight:var(--f7-navbar-large-title-font-weight);line-height:var(--f7-navbar-large-title-line-height);padding-left:calc(var(--f7-navbar-large-title-padding-left) + var(--f7-safe-area-left));padding-right:calc(var(--f7-navbar-large-title-padding-right) + var(--f7-safe-area-right));padding-top:var(--f7-navbar-large-title-padding-vertical);padding-bottom:var(--f7-navbar-large-title-padding-vertical);box-sizing:border-box;overflow:hidden;width:100%;transform:translate3d(0px,calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)),0);transform-origin:calc(var(--f7-navbar-large-title-padding-left) + var(--f7-safe-area-left)) center}.navbar-no-title-large-transition .title-large-text{transition-duration:0s}.navbars~*,.navbar~*{--f7-page-navbar-offset:calc(var(--f7-navbar-height) + var(--f7-safe-area-top))}.navbars~* .page-with-navbar-large,.navbars~.page-with-navbar-large,.navbar~* .page-with-navbar-large,.navbar~.page-with-navbar-large,.page-with-navbar-large .navbar~*{--f7-page-navbar-offset:calc(var(--f7-navbar-height) + var(--f7-navbar-large-title-height) + var(--f7-safe-area-top))}.page.no-navbar,.page.no-navbar .navbar~*{--f7-page-navbar-offset:var(--f7-safe-area-top)}.ios{--f7-navbarLeftTextOffset:calc(4px + 12px + var(--f7-navbar-inner-padding-left));--f7-navbarTitleLargeOffset:var(--f7-navbar-large-title-padding-left);--f7-navbar-large-bg-center-top:translateX(0) translateY(calc(-1 * var(--f7-navbar-large-title-height)));--f7-navbar-large-bg-center-bottom:translateX(0) translateY(0);--f7-navbar-large-bg-left-top:translateX(-100%) translateY(calc(-1 * var(--f7-navbar-large-title-height)));--f7-navbar-large-bg-left-bottom:translateX(-100%) translateY(0);--f7-navbar-large-bg-right-top:translateX(100%) translateY(calc(-1 * var(--f7-navbar-large-title-height)));--f7-navbar-large-bg-right-bottom:translateX(100%) translateY(0)}.ios .navbar .title-large{align-items:flex-end}.ios .navbar a.icon-only{width:44px;margin:0;justify-content:center}.ios .navbar .left a+a,.ios .navbar .right a+a{margin-left:16px}.ios .navbar b{font-weight:600}.ios .navbar .left{margin-right:10px}.ios .navbar .right{margin-left:10px}.ios .navbar .right:first-child{right:calc(8px + var(--f7-safe-area-right))}.ios .navbar-inner{justify-content:space-between}.ios .navbar-inner-left-title{justify-content:flex-start}.ios .navbar-inner-left-title .right{margin-left:auto}.ios .navbar-inner-left-title .title{text-align:left;margin-right:10px}.ios .navbar-next .fading,.ios .navbar-next .left,.ios .navbar-next .right,.ios .navbar-next .subnavbar,.ios .navbar-next .title,.ios .view-master-detail .navbar-previous:not(.navbar-master) .fading,.ios .view-master-detail .navbar-previous:not(.navbar-master) .left,.ios .view-master-detail .navbar-previous:not(.navbar-master) .right,.ios .view-master-detail .navbar-previous:not(.navbar-master) .subnavbar,.ios .view-master-detail .navbar-previous:not(.navbar-master) .title,.ios .view:not(.view-master-detail) .navbar-previous .fading,.ios .view:not(.view-master-detail) .navbar-previous .left,.ios .view:not(.view-master-detail) .navbar-previous .right,.ios .view:not(.view-master-detail) .navbar-previous .subnavbar,.ios .view:not(.view-master-detail) .navbar-previous .title{opacity:0}.ios .view-master-detail .navbar-previous:not(.navbar-master),.ios .view:not(.view-master-detail) .navbar-previous{pointer-events:none}.ios .view-master-detail .navbar-previous:not(.navbar-master) .title-large,.ios .view:not(.view-master-detail) .navbar-previous .title-large{opacity:0;transition-duration:0s}.ios .view-master-detail .navbar-previous:not(.navbar-master) .title-large .title-large-text,.ios .view:not(.view-master-detail) .navbar-previous .title-large .title-large-text{transform:scale(.5);transition-duration:0s}.ios .view-master-detail .navbar-previous:not(.navbar-master) .sliding .subnavbar,.ios .view-master-detail .navbar-previous:not(.navbar-master) .subnavbar.sliding,.ios .view:not(.view-master-detail) .navbar-previous .sliding .subnavbar,.ios .view:not(.view-master-detail) .navbar-previous .subnavbar.sliding{opacity:1;transform:translate3d(-100%,0,0)}.ios .view-master-detail .navbar-previous:not(.navbar-master) .navbar-bg,.ios .view:not(.view-master-detail) .navbar-previous .navbar-bg{transform:translateX(-100%)}.ios .navbar-next{pointer-events:none}.ios .navbar-next .navbar-bg{transform:translateX(100%)}.ios .navbar-next .title-large .title-large-text{transition-duration:0s;transform:translateX(100%) translateY(calc(-1 * var(--f7-navbar-large-title-height)))}.ios .navbar-next .sliding .subnavbar,.ios .navbar-next .subnavbar.sliding{opacity:1;transform:translate3d(100%,0,0)}.ios .router-transition .navbar,.ios .router-transition .navbar-bg{transition-duration:var(--f7-page-transition-duration)}.ios .router-transition .navbar-bg{animation-duration:var(--f7-page-transition-duration);animation-fill-mode:forwards}.ios .router-transition .title-large,.ios .router-transition .title-large-text{transition-duration:0s}.ios .router-transition .navbar-current .left,.ios .router-transition .navbar-current .right,.ios .router-transition .navbar-current .subnavbar,.ios .router-transition .navbar-current .title{animation:ios-navbar-element-fade-out var(--f7-page-transition-duration) forwards}.ios .router-transition .navbar-current .sliding .left,.ios .router-transition .navbar-current .sliding .left .icon+span,.ios .router-transition .navbar-current .sliding .right,.ios .router-transition .navbar-current .sliding .title,.ios .router-transition .navbar-current .sliding.left,.ios .router-transition .navbar-current .sliding.left .icon+span,.ios .router-transition .navbar-current .sliding.right,.ios .router-transition .navbar-current .sliding.title{transition-duration:var(--f7-page-transition-duration);opacity:0!important;animation:none}.ios .router-transition .navbar-current .sliding .subnavbar,.ios .router-transition .navbar-current .sliding.subnavbar{transition-duration:var(--f7-page-transition-duration);animation:none;opacity:1}.ios .router-transition-backward .navbar-previous .left,.ios .router-transition-backward .navbar-previous .right,.ios .router-transition-backward .navbar-previous .subnavbar,.ios .router-transition-backward .navbar-previous .title,.ios .router-transition-forward .navbar-next .left,.ios .router-transition-forward .navbar-next .right,.ios .router-transition-forward .navbar-next .subnavbar,.ios .router-transition-forward .navbar-next .title{animation:ios-navbar-element-fade-in var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .navbar-previous .sliding .left,.ios .router-transition-backward .navbar-previous .sliding .left .icon+span,.ios .router-transition-backward .navbar-previous .sliding .right,.ios .router-transition-backward .navbar-previous .sliding .subnavbar,.ios .router-transition-backward .navbar-previous .sliding .title,.ios .router-transition-backward .navbar-previous .sliding.left,.ios .router-transition-backward .navbar-previous .sliding.left .icon+span,.ios .router-transition-backward .navbar-previous .sliding.right,.ios .router-transition-backward .navbar-previous .sliding.title,.ios .router-transition-forward .navbar-next .sliding .left,.ios .router-transition-forward .navbar-next .sliding .left .icon+span,.ios .router-transition-forward .navbar-next .sliding .right,.ios .router-transition-forward .navbar-next .sliding .subnavbar,.ios .router-transition-forward .navbar-next .sliding .title,.ios .router-transition-forward .navbar-next .sliding.left,.ios .router-transition-forward .navbar-next .sliding.left .icon+span,.ios .router-transition-forward .navbar-next .sliding.right,.ios .router-transition-forward .navbar-next .sliding.title{transition-duration:var(--f7-page-transition-duration);animation:none;transform:translate3d(0,0,0)!important;opacity:1!important}.ios .router-transition-backward .navbar-previous.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible) .title,.ios .router-transition-forward .navbar-next.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible) .title{animation:none}.ios .router-transition-backward .navbar-previous.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible) .sliding .title,.ios .router-transition-backward .navbar-previous.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible) .sliding.title,.ios .router-transition-forward .navbar-next.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible) .sliding .title,.ios .router-transition-forward .navbar-next.navbar-transparent:not(.navbar-large):not(.navbar-transparent-visible) .sliding.title{opacity:0!important}.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled .left,.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled .right,.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled .subnavbar,.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled .title,.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled-no-transition .left,.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled-no-transition .right,.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled-no-transition .subnavbar,.ios .router-transition-backward .navbar-previous.with-searchbar-expandable-enabled-no-transition .title{animation:none}.ios .router-transition-forward .navbar-current.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large,.ios .router-transition-forward .navbar-current.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) .title-large{overflow:visible}.ios .router-transition-forward .navbar-current.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large .title-large-text,.ios .router-transition-forward .navbar-current.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) .title-large .title-large-text{animation:ios-navbar-large-title-text-slide-up var(--f7-page-transition-duration) forwards,ios-navbar-large-title-text-fade-out var(--f7-page-transition-duration) forwards}.ios .router-transition-forward .navbar-next.router-navbar-transition-from-large .left .back span{animation:ios-navbar-back-text-next-to-current var(--f7-page-transition-duration) forwards;transition:none;transform-origin:left center}.ios .router-transition-forward .navbar-next.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large{overflow:visible}.ios .router-transition-forward .navbar-next.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large .title-large-text{animation:ios-navbar-large-title-text-slide-left var(--f7-page-transition-duration) forwards}.ios .router-transition-forward .navbar-next.router-navbar-transition-to-large:not(.router-navbar-transition-from-large) .title-large .title-large-text{animation:ios-navbar-large-title-text-slide-left var(--f7-page-transition-duration) forwards}.ios .router-transition-forward .navbar-current.navbar-large:not(.navbar-large-collapsed) .title,.ios .router-transition-forward .navbar-next.navbar-large:not(.navbar-large-collapsed) .title{animation:none;opacity:0!important;transition-duration:0}.ios .router-transition-backward .navbar-current.router-navbar-transition-to-large .left .back span{animation:ios-navbar-back-text-current-to-previous var(--f7-page-transition-duration) forwards;transition:none;transform-origin:left center}.ios .router-transition-backward .navbar-current.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large{overflow:visible}.ios .router-transition-backward .navbar-current.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large .title-large-text{animation:ios-navbar-large-title-text-slide-right var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .navbar-current.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) .title-large .title-large-text{animation:ios-navbar-large-title-text-slide-right var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .navbar-current.router-navbar-transition-to-large:not(.router-navbar-transition-from-large) .title-large{opacity:0}.ios .router-transition-backward .navbar-previous.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large,.ios .router-transition-backward .navbar-previous.router-navbar-transition-to-large:not(.router-navbar-transition-from-large) .title-large{overflow:visible;opacity:1}.ios .router-transition-backward .navbar-previous.router-navbar-transition-from-large.router-navbar-transition-to-large .title-large .title-large-text,.ios .router-transition-backward .navbar-previous.router-navbar-transition-to-large:not(.router-navbar-transition-from-large) .title-large .title-large-text{animation:ios-navbar-large-title-text-slide-down var(--f7-page-transition-duration) forwards,ios-navbar-large-title-text-fade-in var(--f7-page-transition-duration) forwards}.ios .router-transition-backward .navbar-current.navbar-large:not(.navbar-large-collapsed) .title,.ios .router-transition-backward .navbar-previous.navbar-large:not(.navbar-large-collapsed) .title{animation:none;opacity:0!important;transition-duration:0}.ios .router-transition-forward .navbar-current .navbar-bg{animation-name:ios-navbar-bg-from-cb-to-lb}.ios .router-transition-forward .navbar-current.router-navbar-transition-from-large.router-navbar-transition-to-large .navbar-bg{animation-name:ios-navbar-bg-from-cb-to-lb}.ios .router-transition-forward .navbar-current.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) .navbar-bg{animation-name:ios-navbar-bg-from-cb-to-lt}.ios .router-transition-forward .navbar-current:not(.router-navbar-transition-from-large).router-navbar-transition-to-large .navbar-bg{animation-name:ios-navbar-bg-from-ct-to-lb}.ios .router-transition-forward .navbar-current.navbar-large-collapsed:not(.router-navbar-transition-to-large) .navbar-bg{animation-name:ios-navbar-bg-from-ct-to-lt}.ios .router-transition-forward .navbar-next .navbar-bg{animation-name:ios-navbar-bg-from-rb-to-cb}.ios .router-transition-forward .navbar-next.router-navbar-transition-from-large.router-navbar-transition-to-large .navbar-bg{animation-name:ios-navbar-bg-from-rb-to-cb}.ios .router-transition-forward .navbar-next.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) .navbar-bg{animation-name:ios-navbar-bg-from-rb-to-ct}.ios .router-transition-forward .navbar-next:not(.router-navbar-transition-from-large).router-navbar-transition-to-large .navbar-bg{animation-name:ios-navbar-bg-from-rt-to-cb}.ios .router-transition-backward .navbar-current .navbar-bg{animation-name:ios-navbar-bg-from-cb-to-rb}.ios .router-transition-backward .navbar-current:not(.router-navbar-transition-from-large).router-navbar-transition-to-large .navbar-bg{animation-name:ios-navbar-bg-from-ct-to-rb}.ios .router-transition-backward .navbar-current.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) .navbar-bg{animation-name:ios-navbar-bg-from-cb-to-rt}.ios .router-transition-backward .navbar-current.navbar-large-collapsed .navbar-bg{animation-name:ios-navbar-bg-from-ct-to-rt}.ios .router-transition-backward .navbar-current.navbar-large-collapsed.router-navbar-transition-to-large .navbar-bg{animation-name:ios-navbar-bg-from-ct-to-rb}.ios .router-transition-backward .navbar-previous .navbar-bg{animation-name:ios-navbar-bg-from-lb-to-cb}.ios .router-transition-backward .navbar-previous:not(.router-navbar-transition-from-large).router-navbar-transition-to-large .navbar-bg{animation-name:ios-navbar-bg-from-lt-to-cb}.ios .router-transition-backward .navbar-previous.router-navbar-transition-from-large:not(.router-navbar-transition-to-large) .navbar-bg{animation-name:ios-navbar-bg-from-lb-to-ct}.ios .router-transition-backward .navbar-previous.navbar-large-collapsed .navbar-bg{animation-name:ios-navbar-bg-from-lt-to-ct}.view-master-detail .navbars{z-index:auto}.view-master-detail .page-master{z-index:525}.view-master-detail .navbar-master .navbar-bg,.view-master-detail .navbar-master .navbar-inner{z-index:550}.view-master-detail .navbar-master-detail .navbar-bg,.view-master-detail .navbar-master-detail .navbar-inner{z-index:500}.view-master-detail .navbar-master.navbar-previous{pointer-events:auto}.view-master-detail .navbar-master.navbar-previous .left,.view-master-detail .navbar-master.navbar-previous .right,.view-master-detail .navbar-master.navbar-previous .subnavbar,.view-master-detail .navbar-master.navbar-previous:not(.navbar-large) .title{opacity:1}.view-master-detail.router-transition .navbar-master .fading,.view-master-detail.router-transition .navbar-master .left,.view-master-detail.router-transition .navbar-master .left .icon+span,.view-master-detail.router-transition .navbar-master .right,.view-master-detail.router-transition .navbar-master .subnavbar,.view-master-detail.router-transition .navbar-master:not(.navbar-large) .title{opacity:1!important;transition-duration:0s;transform:none!important;animation:none!important}.view-master-detail.router-transition .navbar-master .navbar-bg{transition-duration:0s;animation:none!important}.view-master-detail.router-transition .navbar-master.navbar-large .title{opacity:calc(-1 + 2 * var(--f7-navbar-large-collapse-progress))!important;transition-duration:0s;transform:none!important;animation:none!important}.view-master-detail.router-transition .navbar-master.navbar-large .title-large,.view-master-detail.router-transition .navbar-master.navbar-large .title-large-text{transition-duration:0s;animation:none!important}.view-master-detail.router-transition .navbar-master.navbar-large-transparent .navbar-bg,.view-master-detail.router-transition .navbar-master.navbar-large.navbar-transparent .navbar-bg{height:100%!important;opacity:var(--f7-navbar-large-collapse-progress)!important}@keyframes ios-navbar-element-fade-in{0%{opacity:0}25%{opacity:0}to{opacity:1}}@keyframes ios-navbar-element-fade-out{from{opacity:1}75%{opacity:0}to{opacity:0}}@keyframes ios-navbar-large-title-text-slide-up{0%{transform:translateX(0px) translateY(0%) scale(1)}100%{transform:translateX(calc(var(--f7-navbarLeftTextOffset) - var(--f7-navbarTitleLargeOffset))) translateY(calc(-1 * var(--f7-navbar-large-title-height) + var(--f7-navbar-large-title-padding-vertical))) scale(.5)}}@keyframes ios-navbar-large-title-text-slide-down{0%{transform:translateX(calc(var(--f7-navbarLeftTextOffset) - var(--f7-navbarTitleLargeOffset))) translateY(calc(-1 * var(--f7-navbar-large-title-height) + var(--f7-navbar-large-title-padding-vertical)/ 2)) scale(.5)}100%{transform:translateX(0px) translateY(0%) scale(1)}}@keyframes ios-navbar-large-title-text-slide-left{0%{transform:translateX(100%)}100%{transform:translateX(0%)}}@keyframes ios-navbar-large-title-text-slide-right{0%{transform:translateX(0%)}100%{transform:translateX(100%)}}@keyframes ios-navbar-large-title-text-fade-out{0%{opacity:1}80%{opacity:0}100%{opacity:0}}@keyframes ios-navbar-large-title-text-fade-in{0%{opacity:0}20%{opacity:0}100%{opacity:1}}@keyframes ios-navbar-back-text-current-to-previous{0%{opacity:1;transform:translateY(0px) translateX(0px) scale(1)}80%{opacity:0}100%{opacity:0;transform:translateX(calc(var(--f7-navbarTitleLargeOffset) - var(--f7-navbarLeftTextOffset))) translateY(calc(1 * var(--f7-navbar-large-title-height) - var(--f7-navbar-large-title-padding-vertical)/ 2)) scale(2)}}@keyframes ios-navbar-back-text-next-to-current{0%{opacity:0;transform:translateX(calc(var(--f7-navbarTitleLargeOffset) - var(--f7-navbarLeftTextOffset))) translateY(calc(1 * var(--f7-navbar-large-title-height) + var(--f7-navbar-large-title-padding-vertical)/ 2)) scale(2)}20%{opacity:0}100%{opacity:1;transform:translateX(0px) translateY(0px) scale(1)}}@keyframes ios-navbar-bg-from-cb-to-lb{from{transform:var(--f7-navbar-large-bg-center-bottom)}to{transform:var(--f7-navbar-large-bg-left-bottom)}}@keyframes ios-navbar-bg-from-cb-to-lt{from{transform:var(--f7-navbar-large-bg-center-bottom)}to{transform:var(--f7-navbar-large-bg-left-top)}}@keyframes ios-navbar-bg-from-ct-to-lb{from{transform:var(--f7-navbar-large-bg-center-top)}to{transform:var(--f7-navbar-large-bg-left-bottom)}}@keyframes ios-navbar-bg-from-ct-to-lt{from{transform:var(--f7-navbar-large-bg-center-top)}to{transform:var(--f7-navbar-large-bg-left-top)}}@keyframes ios-navbar-bg-from-rb-to-cb{from{transform:var(--f7-navbar-large-bg-right-bottom)}to{transform:var(--f7-navbar-large-bg-center-bottom)}}@keyframes ios-navbar-bg-from-rb-to-ct{from{transform:var(--f7-navbar-large-bg-right-bottom)}to{transform:var(--f7-navbar-large-bg-center-top)}}@keyframes ios-navbar-bg-from-rt-to-cb{from{transform:var(--f7-navbar-large-bg-right-top)}to{transform:var(--f7-navbar-large-bg-center-bottom)}}@keyframes ios-navbar-bg-from-cb-to-rb{from{transform:var(--f7-navbar-large-bg-center-bottom)}to{transform:var(--f7-navbar-large-bg-right-bottom)}}@keyframes ios-navbar-bg-from-ct-to-rb{from{transform:var(--f7-navbar-large-bg-center-top)}to{transform:var(--f7-navbar-large-bg-right-bottom)}}@keyframes ios-navbar-bg-from-cb-to-rt{from{transform:var(--f7-navbar-large-bg-center-bottom)}to{transform:var(--f7-navbar-large-bg-right-top)}}@keyframes ios-navbar-bg-from-ct-to-rt{from{transform:var(--f7-navbar-large-bg-center-top)}to{transform:var(--f7-navbar-large-bg-right-top)}}@keyframes ios-navbar-bg-from-lb-to-cb{from{transform:var(--f7-navbar-large-bg-left-bottom)}to{transform:var(--f7-navbar-large-bg-center-bottom)}}@keyframes ios-navbar-bg-from-lt-to-cb{from{transform:var(--f7-navbar-large-bg-left-top)}to{transform:var(--f7-navbar-large-bg-center-bottom)}}@keyframes ios-navbar-bg-from-lb-to-ct{from{transform:var(--f7-navbar-large-bg-left-bottom)}to{transform:var(--f7-navbar-large-bg-center-top)}}@keyframes ios-navbar-bg-from-lt-to-ct{from{transform:var(--f7-navbar-large-bg-left-top)}to{transform:var(--f7-navbar-large-bg-center-top)}}.md .navbar .title-large{align-items:center}.md .navbar .left{margin-left:4px;margin-right:4px}.md .navbar a.link{padding:0 12px;min-width:48px}.md .navbar a.icon-only{min-width:0;flex-shrink:0;width:48px}.md .navbar .right{margin-left:auto;margin-right:4px}.md .navbar .right:first-child{right:var(--f7-safe-area-right)}.md .navbar-inner{justify-content:flex-start;overflow:hidden}.md .navbar-large:not(.navbar-large-collapsed) .navbar-inner{overflow:visible}.md .page.page-with-subnavbar .navbar-inner{overflow:visible}.md .navbar-inner:not(.navbar-inner-centered-title) .title:first-child{margin-left:16px}.md .navbar-inner-centered-title{justify-content:space-between}.md .navbar-inner-centered-title .right{margin-left:0}.md .navbar-inner-centered-title .title{text-align:center}:root{--f7-tabbar-link-active-bg-color:transparent;--f7-tabbar-label-text-transform:none;--f7-toolbar-hide-show-transition-duration:400ms}.ios{--f7-toolbar-height:44px;--f7-toolbar-font-size:17px;--f7-toolbar-inner-padding-left:8px;--f7-toolbar-inner-padding-right:8px;--f7-toolbar-link-font-weight:400;--f7-tabbar-icons-height:50px;--f7-tabbar-icons-tablet-height:50px;--f7-tabbar-icon-size:28px;--f7-tabbar-link-text-transform:none;--f7-tabbar-link-font-weight:400;--f7-tabbar-link-letter-spacing:0;--f7-tabbar-label-font-size:12px;--f7-tabbar-label-tablet-font-size:14px;--f7-tabbar-label-font-weight:500;--f7-tabbar-label-letter-spacing:0.01;--f7-tabbar-link-inactive-color:rgba(0, 0, 0, 0.4)}.ios .dark,.ios.dark{--f7-tabbar-link-inactive-color:rgba(255, 255, 255, 0.54)}.md{--f7-toolbar-height:56px;--f7-toolbar-font-size:14px;--f7-toolbar-inner-padding-left:0px;--f7-toolbar-inner-padding-right:0px;--f7-tabbar-icons-height:80px;--f7-tabbar-icons-tablet-height:80px;--f7-tabbar-icon-size:24px;--f7-tabbar-link-text-transform:none;--f7-tabbar-link-font-weight:500;--f7-tabbar-link-letter-spacing:0;--f7-toolbar-link-font-weight:500;--f7-tabbar-label-font-size:12px;--f7-tabbar-label-tablet-font-size:12px;--f7-tabbar-label-font-weight:500;--f7-tabbar-label-letter-spacing:0}.md,.md .dark,.md [class*=color-]{--f7-tabbar-link-active-color:var(--f7-md-on-secondary-container);--f7-tabbar-link-active-border-color:var(--f7-md-primary);--f7-tabbar-link-inactive-color:var(--f7-md-on-surface-variant);--f7-tabbar-link-active-icon-bg-color:var(--f7-md-secondary-container)}.toolbar{width:100%;position:relative;margin:0;transform:translate3d(0,0,0);backface-visibility:hidden;z-index:600;box-sizing:border-box;left:0;height:var(--f7-toolbar-height);background-color:var(--f7-toolbar-bg-color,var(--f7-bars-bg-color));color:var(--f7-toolbar-text-color,var(--f7-bars-text-color));font-size:var(--f7-toolbar-font-size)}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .toolbar{background-color:rgba(var(--f7-toolbar-bg-color-rgb,var(--f7-bars-bg-color-rgb)),var(--f7-bars-translucent-opacity));-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.toolbar b{font-weight:600}.toolbar a{color:var(--f7-toolbar-link-color,var(--f7-bars-link-color,var(--f7-theme-color)));box-sizing:border-box;flex-shrink:1;position:relative;white-space:nowrap;text-overflow:ellipsis}.toolbar .link{display:flex;line-height:var(--f7-toolbar-link-line-height, var(--f7-toolbar-height));height:var(--f7-toolbar-link-height,var(--f7-toolbar-height));font-weight:var(--f7-toolbar-link-font-weight)}.toolbar i.icon{display:block}.toolbar:after,.toolbar:before{backface-visibility:hidden}.page>.toolbar,.view>.toolbar,.views>.toolbar{position:absolute}.ios .toolbar-top-ios,.md .toolbar-top-md,.toolbar-top{top:0}.ios .toolbar-top-ios .tab-link-highlight,.md .toolbar-top-md .tab-link-highlight,.toolbar-top .tab-link-highlight{bottom:0}.ios .toolbar-top-ios.no-outline:after,.md .toolbar-top-md.no-outline:after,.toolbar-top.no-outline:after{display:none!important}.ios .toolbar-top-ios.toolbar-hidden:before,.md .toolbar-top-md.toolbar-hidden:before,.toolbar-top.toolbar-hidden:before{display:none!important}.ios .toolbar-top-ios:after,.ios .toolbar-top-ios:before,.md .toolbar-top-md:after,.md .toolbar-top-md:before,.toolbar-top:after,.toolbar-top:before{backface-visibility:hidden}.ios .toolbar-top-ios:after,.md .toolbar-top-md:after,.toolbar-top:after{content:'';position:absolute;background-color:var(--f7-toolbar-border-color,var(--f7-bars-border-color));display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.ios .toolbar-bottom-ios,.md .toolbar-bottom-md,.toolbar-bottom{bottom:0;height:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom))}.ios .toolbar-bottom-ios .tab-link-highlight,.md .toolbar-bottom-md .tab-link-highlight,.toolbar-bottom .tab-link-highlight{top:0}.ios .toolbar-bottom-ios .toolbar-inner,.md .toolbar-bottom-md .toolbar-inner,.toolbar-bottom .toolbar-inner{height:auto;top:0;bottom:var(--f7-safe-area-bottom)}.ios .toolbar-bottom-ios.no-outline:before,.md .toolbar-bottom-md.no-outline:before,.toolbar-bottom.no-outline:before{display:none!important}.ios .toolbar-bottom-ios.toolbar-hidden:after,.md .toolbar-bottom-md.toolbar-hidden:after,.toolbar-bottom.toolbar-hidden:after{display:none!important}.ios .toolbar-bottom-ios:before,.md .toolbar-bottom-md:before,.toolbar-bottom:before{content:'';position:absolute;background-color:var(--f7-toolbar-border-color,var(--f7-bars-border-color));display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.toolbar-inner{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;justify-content:space-between;box-sizing:border-box;align-items:center;align-content:center;overflow:hidden;padding:0 calc(var(--f7-toolbar-inner-padding-right) + var(--f7-safe-area-right)) 0 calc(var(--f7-toolbar-inner-padding-left) + var(--f7-safe-area-left))}.views>.tabbar,.views>.tabbar-icons{z-index:5001}.tabbar a,.tabbar-icons a{color:var(--f7-tabbar-link-inactive-color)}.tabbar .link,.tabbar-icons .link{line-height:1.4}.tabbar .link,.tabbar .tab-link,.tabbar-icons .link,.tabbar-icons .tab-link{height:100%;width:100%;box-sizing:border-box;display:flex;justify-content:center;align-items:center;flex-direction:column;text-transform:var(--f7-tabbar-link-text-transform);font-weight:var(--f7-tabbar-link-font-weight);letter-spacing:var(--f7-tabbar-link-letter-spacing);overflow:hidden}.tabbar .tab-link-active,.tabbar-icons .tab-link-active{color:var(--f7-tabbar-link-active-color,var(--f7-theme-color));background-color:var(--f7-tabbar-link-active-bg-color,transparent)}.tabbar i.icon,.tabbar-icons i.icon{font-size:var(--f7-tabbar-icon-size);height:var(--f7-tabbar-icon-size);line-height:var(--f7-tabbar-icon-size)}.md .tabbar-icons.tabbar-icons .tab-link-highlight,.md .tabbar.tabbar-icons .tab-link-highlight{display:none}.md .tabbar-icons:not(.tabbar-icons) .tab-link-highlight,.md .tabbar:not(.tabbar-icons) .tab-link-highlight{position:absolute;height:2px;background:var(--f7-tabbar-link-active-border-color,var(--f7-theme-color));transition-duration:.3s;left:0}.tabbar-icons{--f7-toolbar-height:var(--f7-tabbar-icons-height)}.tabbar-icons .link,.tabbar-icons .tab-link{height:100%;justify-content:center;align-items:center}.tabbar-icons .tabbar-label{display:block;line-height:1;margin:0;position:relative;text-overflow:ellipsis;white-space:nowrap;font-size:var(--f7-tabbar-label-font-size);text-transform:var(--f7-tabbar-label-text-transform);font-weight:var(--f7-tabbar-label-font-weight);letter-spacing:var(--f7-tabbar-label-letter-spacing)}@media (min-width:768px) and (min-height:600px){:root{--f7-tabbar-icons-height:var(--f7-tabbar-icons-tablet-height);--f7-tabbar-label-font-size:var(--f7-tabbar-label-tablet-font-size)}}.tabbar-scrollable .toolbar-inner{justify-content:flex-start;overflow:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;scrollbar-color:transparent}.tabbar-scrollable .toolbar-inner::-webkit-scrollbar{-webkit-appearance:none;appearance:none;width:0px;display:none;opacity:0;background:0 0}.tabbar-scrollable .toolbar-inner::-webkit-scrollbar-track{box-shadow:none;background:0 0}.tabbar-scrollable .toolbar-inner::-webkit-scrollbar-thumb{background-color:transparent;outline:0;border-radius:9999px;position:relative}.tabbar-scrollable .link,.tabbar-scrollable .tab-link{width:auto;flex-shrink:0}.navbar-transitioning+.toolbar,.navbar-transitioning~* .toolbar,.toolbar-transitioning{transition-duration:var(--f7-toolbar-hide-show-transition-duration)}.ios .toolbar-bottom-ios~*,.md .toolbar-bottom-md~*,.toolbar-bottom~*{--f7-page-toolbar-bottom-offset:var(--f7-toolbar-height)}.ios .toolbar-bottom-ios.tabbar-icons~*,.md .toolbar-bottom-md.tabbar-icons~*,.toolbar-bottom.tabbar-icons~*{--f7-page-toolbar-bottom-offset:var(--f7-tabbar-icons-height)}.ios .toolbar-bottom-ios.toolbar-hidden,.md .toolbar-bottom-md.toolbar-hidden,.toolbar-bottom.toolbar-hidden{transform:translate3d(0,100%,0)}.ios .toolbar-top-ios~*,.md .toolbar-top-md~*,.toolbar-top~*{--f7-page-toolbar-top-offset:var(--f7-toolbar-height)}.ios .toolbar-top-ios.tabbar-icons~*,.md .toolbar-top-md.tabbar-icons~*,.toolbar-top.tabbar-icons~*{--f7-page-toolbar-top-offset:var(--f7-tabbar-icons-height)}.ios .toolbar-top-ios.toolbar-hidden,.md .toolbar-top-md.toolbar-hidden,.toolbar-top.toolbar-hidden{transform:translate3d(0,-100%,0)}.ios .navbars~* .toolbar-top-ios,.ios .navbars~.page:not(.no-navbar) .toolbar-top-ios,.ios .navbars~.toolbar-top-ios,.ios .navbar~* .toolbar-top-ios,.ios .navbar~.page:not(.no-navbar) .toolbar-top-ios,.ios .navbar~.toolbar-top-ios,.md .navbar~* .toolbar-top-md,.md .navbar~.page:not(.no-navbar) .toolbar-top-md,.md .navbar~.toolbar-top-md,.navbars~* .toolbar-top,.navbars~.page:not(.no-navbar) .toolbar-top,.navbars~.toolbar-top,.navbar~* .toolbar-top,.navbar~.page:not(.no-navbar) .toolbar-top,.navbar~.toolbar-top{top:calc(var(--f7-navbar-height) + var(--f7-safe-area-top))}.ios .navbars~* .toolbar-top-ios.toolbar-hidden,.ios .navbars~.page:not(.no-navbar) .toolbar-top-ios.toolbar-hidden,.ios .navbars~.toolbar-top-ios.toolbar-hidden,.ios .navbar~* .toolbar-top-ios.toolbar-hidden,.ios .navbar~.page:not(.no-navbar) .toolbar-top-ios.toolbar-hidden,.ios .navbar~.toolbar-top-ios.toolbar-hidden,.md .navbar~* .toolbar-top-md.toolbar-hidden,.md .navbar~.page:not(.no-navbar) .toolbar-top-md.toolbar-hidden,.md .navbar~.toolbar-top-md.toolbar-hidden,.navbars~* .toolbar-top.toolbar-hidden,.navbars~.page:not(.no-navbar) .toolbar-top.toolbar-hidden,.navbars~.toolbar-top.toolbar-hidden,.navbar~* .toolbar-top.toolbar-hidden,.navbar~.page:not(.no-navbar) .toolbar-top.toolbar-hidden,.navbar~.toolbar-top.toolbar-hidden{transform:translate3d(0,calc(-1 * (var(--f7-navbar-height) + var(--f7-toolbar-height) + var(--f7-safe-area-top))),0)}.ios .navbars~* .toolbar-top-ios.toolbar-hidden.tabbar-icons,.ios .navbars~.page:not(.no-navbar) .toolbar-top-ios.toolbar-hidden.tabbar-icons,.ios .navbars~.toolbar-top-ios.toolbar-hidden.tabbar-icons,.ios .navbar~* .toolbar-top-ios.toolbar-hidden.tabbar-icons,.ios .navbar~.page:not(.no-navbar) .toolbar-top-ios.toolbar-hidden.tabbar-icons,.ios .navbar~.toolbar-top-ios.toolbar-hidden.tabbar-icons,.md .navbar~* .toolbar-top-md.toolbar-hidden.tabbar-icons,.md .navbar~.page:not(.no-navbar) .toolbar-top-md.toolbar-hidden.tabbar-icons,.md .navbar~.toolbar-top-md.toolbar-hidden.tabbar-icons,.navbars~* .toolbar-top.toolbar-hidden.tabbar-icons,.navbars~.page:not(.no-navbar) .toolbar-top.toolbar-hidden.tabbar-icons,.navbars~.toolbar-top.toolbar-hidden.tabbar-icons,.navbar~* .toolbar-top.toolbar-hidden.tabbar-icons,.navbar~.page:not(.no-navbar) .toolbar-top.toolbar-hidden.tabbar-icons,.navbar~.toolbar-top.toolbar-hidden.tabbar-icons{transform:translate3d(0,calc(-1 * (var(--f7-navbar-height) + var(--f7-tabbar-icons-height) + var(--f7-safe-area-top))),0)}.ios .navbar-hidden+.toolbar-top-ios:not(.toolbar-hidden),.ios .navbar-hidden~* .toolbar-top-ios:not(.toolbar-hidden),.md .navbar-hidden+.toolbar-top-md:not(.toolbar-hidden),.md .navbar-hidden~* .toolbar-top-md:not(.toolbar-hidden),.navbar-hidden+.toolbar-top:not(.toolbar-hidden),.navbar-hidden~* .toolbar-top:not(.toolbar-hidden){transform:translate3d(0,calc(0px - var(--f7-navbar-height)),0)}.ios .navbar-large-hidden+.toolbar-top-ios:not(.toolbar-hidden),.ios .navbar-large-hidden~* .toolbar-top-ios:not(.toolbar-hidden),.md .navbar-large-hidden+.toolbar-top-md:not(.toolbar-hidden),.md .navbar-large-hidden~* .toolbar-top-md:not(.toolbar-hidden),.navbar-large-hidden+.toolbar-top:not(.toolbar-hidden),.navbar-large-hidden~* .toolbar-top:not(.toolbar-hidden){transform:translate3d(0,calc(0px - var(--f7-navbar-height) - var(--f7-navbar-large-title-height)),0)}.ios .toolbar a.icon-only{min-height:var(--f7-toolbar-height);display:flex;justify-content:center;align-items:center;margin:0;min-width:44px}.ios .tabbar-icons .link,.ios .tabbar-icons .tab-link{padding-top:4px;padding-bottom:4px}.ios .tabbar-icons .link i+span,.ios .tabbar-icons .tab-link i+span{margin:0;margin-top:4px}@media (min-width:768px) and (min-height:600px){.ios .tabbar .link,.ios .tabbar .tab-link,.ios .tabbar-icons .link,.ios .tabbar-icons .tab-link{justify-content:center;flex-direction:row}.ios .tabbar .link i+span,.ios .tabbar .tab-link i+span,.ios .tabbar-icons .link i+span,.ios .tabbar-icons .tab-link i+span{margin-left:5px}}.ios .tabbar-scrollable .toolbar-inner{justify-content:flex-start}.ios .tabbar-scrollable .link,.ios .tabbar-scrollable .tab-link{padding:0 8px}.md .toolbar .link{justify-content:center;padding:0 12px;min-width:48px}.md .toolbar a.icon-only{min-width:0;flex-shrink:0}.md .tabbar .link,.md .tabbar .tab-link,.md .tabbar-icons .link,.md .tabbar-icons .tab-link{padding-left:0;padding-right:0}.md .tabbar a.icon-only,.md .tabbar-icons a.icon-only{flex-shrink:initial}.md .tabbar .tab-link,.md .tabbar-icons .tab-link{transition-duration:.3s;overflow:hidden;position:relative}.md .tabbar i.icon,.md .tabbar-icons i.icon{position:relative}.md .tabbar i.icon::before,.md .tabbar-icons i.icon::before{content:'';width:64px;height:32px;border-radius:32px;position:absolute;left:50%;top:50%;transform:translateX(-50%) translateY(-50%) scaleX(.5);background:var(--f7-tabbar-link-active-icon-bg-color);opacity:0;transition-duration:.2s;z-index:-1}.md .tabbar i.icon+.tabbar-label,.md .tabbar-icons i.icon+.tabbar-label{margin-top:8px}.md .tabbar .tab-link-active i.icon::before,.md .tabbar-icons .tab-link-active i.icon::before{opacity:1;transform:translateX(-50%) translateY(-50%) scaleX(1)}.md .tabbar-icons .link,.md .tabbar-icons .tab-link{padding-top:8px;padding-bottom:8px}.md .tabbar-label{max-width:100%;overflow:hidden;line-height:1.2}.md .tabbar-scrollable .toolbar-inner{overflow:auto}.md .tabbar-scrollable .link,.md .tabbar-scrollable .tab-link{padding:0 12px}:root{--f7-subnavbar-title-line-height:1.2}.ios{--f7-subnavbar-height:44px;--f7-subnavbar-inner-padding-left:8px;--f7-subnavbar-inner-padding-right:8px;--f7-subnavbar-title-font-size:34px;--f7-subnavbar-title-font-weight:700;--f7-subnavbar-title-letter-spacing:-0.03em;--f7-subnavbar-title-margin-left:8px}.md{--f7-subnavbar-height:64px;--f7-subnavbar-inner-padding-left:16px;--f7-subnavbar-inner-padding-right:16px;--f7-subnavbar-title-font-size:22px;--f7-subnavbar-title-font-weight:400;--f7-subnavbar-title-letter-spacing:0;--f7-subnavbar-title-margin-left:0px}.subnavbar{width:100%;position:absolute;left:0;top:0;z-index:600;box-sizing:border-box;display:flex;justify-content:space-between;align-items:center;background-color:var(--f7-subnavbar-bg-color,var(--f7-bars-bg-color));color:var(--f7-subnavbar-text-color,var(--f7-bars-text-color))}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .subnavbar{background-color:rgba(var(--f7-subnavbar-bg-color-rgb,var(--f7-bars-bg-color-rgb)),var(--f7-bars-translucent-opacity));-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.subnavbar .subnavbar-title{position:relative;overflow:hidden;text-overflow:ellpsis;white-space:nowrap;font-size:var(--f7-subnavbar-title-font-size);font-weight:var(--f7-subnavbar-title-font-weight);text-align:left;display:inline-block;line-height:var(--f7-subnavbar-title-line-height);letter-spacing:var(--f7-subnavbar-title-letter-spacing);margin-left:var(--f7-subnavbar-title-margin-left)}.subnavbar .left,.subnavbar .right{flex-shrink:0;display:flex;justify-content:flex-start;align-items:center}.subnavbar .right:first-child{position:absolute;height:100%}.subnavbar a{color:var(--f7-subnavbar-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.subnavbar a.link{line-height:var(--f7-subnavbar-link-line-height, var(--f7-subnavbar-height));height:var(--f7-subnavbar-link-height,var(--f7-subnavbar-height))}.subnavbar a.icon-only{min-width:var(--f7-subnavbar-height)}.subnavbar.no-outline:after{display:none!important}.subnavbar.navbar-hidden:before{display:none!important}.subnavbar:after,.subnavbar:before{backface-visibility:hidden}.subnavbar:after{content:'';position:absolute;background-color:var(--f7-subnavbar-border-color,var(--f7-bars-border-color));display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.subnavbar-inner{width:100%;height:100%;display:flex;align-items:center;box-sizing:border-box;justify-content:space-between;overflow:hidden;padding:0 calc(var(--f7-subnavbar-inner-padding-left) + var(--f7-safe-area-right)) 0 calc(var(--f7-subnavbar-inner-padding-right) + var(--f7-safe-area-left))}.navbar .subnavbar{top:100%}.page>.subnavbar,.view>.subnavbar,.views>.subnavbar{position:absolute}.navbars~* .subnavbar,.navbars~.page-with-subnavbar:not(.no-navbar) .subnavbar,.navbars~.subnavbar,.navbar~* .subnavbar,.navbar~.page-with-subnavbar:not(.no-navbar) .subnavbar,.navbar~.subnavbar,.page-with-subnavbar .navbar~* .subnavbar,.page-with-subnavbar .navbar~.subnavbar{top:calc(var(--f7-navbar-height) + var(--f7-safe-area-top))}.navbar .title-large~.subnavbar,.navbars~.page-with-navbar-large:not(.no-navbar) .subnavbar,.navbar~.page-with-navbar-large:not(.no-navbar) .subnavbar,.page-with-subnavbar.page-with-navbar-large .navbar~* .subnavbar,.page-with-subnavbar.page-with-navbar-large .navbar~.subnavbar{top:calc(var(--f7-navbar-height) + var(--f7-navbar-large-title-height) + var(--f7-safe-area-top));transform:translate3d(0,calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)),0)}.page-with-subnavbar,.subnavbar~*{--f7-page-subnavbar-offset:var(--f7-subnavbar-height)}.ios .subnavbar{height:calc(var(--f7-subnavbar-height) + 1px);margin-top:-1px;padding-top:1px}.ios .subnavbar .title{align-self:flex-start;flex-shrink:10}.ios .subnavbar .left a+a,.ios .subnavbar .right a+a{margin-left:16px}.ios .subnavbar .left{margin-right:10px}.ios .subnavbar .right{margin-left:10px}.ios .subnavbar .right:first-child{right:8px}.ios .subnavbar a.link{justify-content:flex-start}.ios .subnavbar a.icon-only{justify-content:center;margin:0}.md .subnavbar{height:var(--f7-subnavbar-height)}.md .subnavbar .right{margin-left:auto}.md .subnavbar .right:first-child{right:16px}.md .subnavbar a.link{justify-content:center;padding:0 12px}.md .subnavbar a.icon-only{flex-shrink:0;padding:0 12px}.md .subnavbar-inner>a.link:first-child{margin-left:calc(-1 * var(--f7-subnavbar-inner-padding-left))}.md .subnavbar-inner>a.link:last-child{margin-right:calc(-1 * var(--f7-subnavbar-inner-padding-right))}:root{--f7-block-padding-horizontal:16px;--f7-block-padding-vertical:16px;--f7-block-font-size:inherit;--f7-block-header-margin:10px;--f7-block-footer-margin:10px;--f7-block-header-font-size:14px;--f7-block-footer-font-size:14px;--f7-block-title-text-transform:none;--f7-block-title-white-space:nowrap;--f7-block-title-medium-text-transform:none;--f7-block-title-large-text-transform:none;--f7-block-inset-side-margin:16px}:root .dark,:root.dark{--f7-block-outline-border-color:rgba(255, 255, 255, 0.15)}.ios{--f7-block-text-color:inherit;--f7-block-margin-vertical:35px;--f7-block-outline-border-color:rgba(0, 0, 0, 0.22);--f7-block-title-font-size:16px;--f7-block-title-font-weight:600;--f7-block-title-line-height:20px;--f7-block-title-margin-bottom:10px;--f7-block-title-medium-font-size:22px;--f7-block-title-medium-font-weight:bold;--f7-block-title-medium-line-height:1.4;--f7-block-title-large-font-size:30px;--f7-block-title-large-font-weight:bold;--f7-block-title-large-line-height:1.3;--f7-block-inset-border-radius:8px;--f7-block-title-text-color:#000;--f7-block-strong-text-color:#000;--f7-block-header-text-color:rgba(0, 0, 0, 0.45);--f7-block-footer-text-color:rgba(0, 0, 0, 0.45);--f7-block-strong-bg-color:#fff;--f7-block-title-medium-text-color:#000;--f7-block-title-large-text-color:#000}.ios .dark,.ios.dark{--f7-block-title-text-color:#fff;--f7-block-header-text-color:rgba(255, 255, 255, 0.55);--f7-block-footer-text-color:rgba(255, 255, 255, 0.55);--f7-block-strong-text-color:#fff;--f7-block-strong-bg-color:#1c1c1d;--f7-block-title-medium-text-color:#fff;--f7-block-title-large-text-color:#fff}.md{--f7-block-margin-vertical:32px;--f7-block-title-font-size:inherit;--f7-block-title-font-weight:500;--f7-block-title-line-height:16px;--f7-block-title-margin-bottom:16px;--f7-block-title-medium-font-size:16px;--f7-block-title-medium-font-weight:500;--f7-block-title-medium-line-height:1.3;--f7-block-title-large-font-size:22px;--f7-block-title-large-font-weight:500;--f7-block-title-large-line-height:1.2;--f7-block-inset-border-radius:16px}.md,.md .dark,.md [class*=color-]{--f7-block-text-color:var(--f7-md-on-surface);--f7-block-strong-text-color:var(--f7-md-on-surface);--f7-block-outline-border-color:var(--f7-md-outline);--f7-block-title-text-color:var(--f7-theme-color);--f7-block-title-medium-text-color:var(--f7-theme-color);--f7-block-title-large-text-color:var(--f7-theme-color);--f7-block-strong-bg-color:var(--f7-md-surface-1);--f7-block-header-text-color:var(--f7-md-on-surface-variant);--f7-block-footer-text-color:var(--f7-md-on-surface-variant)}.block{box-sizing:border-box;position:relative;z-index:1;color:var(--f7-block-text-color);margin:var(--f7-block-margin-vertical) 0;padding-top:0;padding-bottom:0;padding-left:calc(var(--f7-block-padding-horizontal) + var(--f7-safe-area-left));padding-right:calc(var(--f7-block-padding-horizontal) + var(--f7-safe-area-right));font-size:var(--f7-block-font-size)}.block>h1:first-child,.block>h2:first-child,.block>h3:first-child,.block>h4:first-child,.block>p:first-child{margin-top:0}.block>h1:last-child,.block>h2:last-child,.block>h3:last-child,.block>h4:last-child,.block>p:last-child{margin-bottom:0}.block-strong,.ios .block-strong-ios,.md .block-strong-md{color:var(--f7-block-strong-text-color);padding-top:var(--f7-block-padding-vertical);padding-bottom:var(--f7-block-padding-vertical);background-color:var(--f7-block-strong-bg-color)}.block-outline:not(.inset):before,.ios .block-outline-ios:not(.inset):not(.inset-ios):before,.md .block-outline-md:not(.inset):not(.inset-md):before{content:'';position:absolute;background-color:var(--f7-block-outline-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.block-outline:not(.inset):after,.ios .block-outline-ios:not(.inset):not(.inset-ios):after,.md .block-outline-md:not(.inset):not(.inset-md):after{content:'';position:absolute;background-color:var(--f7-block-outline-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.block-outline.inset,.ios .block-outline-ios.inset,.ios .block-outline-ios.inset-ios,.md .block-outline-md.inset,.md .block-outline-md.inset-md{border:1px solid var(--f7-block-outline-border-color)}.block-title{position:relative;overflow:hidden;margin:0;white-space:var(--f7-block-title-white-space);text-overflow:ellipsis;text-transform:var(--f7-block-title-text-transform);color:var(--f7-block-title-text-color);font-size:var(--f7-block-title-font-size, inherit);font-weight:var(--f7-block-title-font-weight);line-height:var(--f7-block-title-line-height);margin-top:var(--f7-block-margin-vertical);margin-bottom:var(--f7-block-title-margin-bottom);margin-left:calc(var(--f7-block-padding-horizontal) + var(--f7-safe-area-left));margin-right:calc(var(--f7-block-padding-horizontal) + var(--f7-safe-area-right))}.block-title+.block,.block-title+.block-header,.block-title+.card,.block-title+.list,.block-title+.timeline{margin-top:0px}.block-title-medium{font-size:var(--f7-block-title-medium-font-size);text-transform:var(--f7-block-title-medium-text-transform);color:var(--f7-block-title-medium-text-color);font-weight:var(--f7-block-title-medium-font-weight);line-height:var(--f7-block-title-medium-line-height)}.block-title-large{font-size:var(--f7-block-title-large-font-size);text-transform:var(--f7-block-title-large-text-transform);color:var(--f7-block-title-large-text-color);font-weight:var(--f7-block-title-large-font-weight);line-height:var(--f7-block-title-large-line-height)}.block>.block-title:first-child,.list>.block-title:first-child{margin-top:0;margin-left:0;margin-right:0}.block-header{color:var(--f7-block-header-text-color);font-size:var(--f7-block-header-font-size);margin-bottom:var(--f7-block-header-margin);margin-top:var(--f7-block-margin-vertical)}.block-header+.block,.block-header+.card,.block-header+.list,.block-header+.timeline{margin-top:var(--f7-block-header-margin)}.block-footer{color:var(--f7-block-footer-text-color);font-size:var(--f7-block-footer-font-size);margin-top:var(--f7-block-footer-margin);margin-bottom:var(--f7-block-margin-vertical)}.block-footer,.block-header{padding-top:0;padding-bottom:0;padding-left:calc(var(--f7-block-padding-horizontal) + var(--f7-safe-area-left));padding-right:calc(var(--f7-block-padding-horizontal) + var(--f7-safe-area-right))}.block-footer h1:first-child,.block-footer h2:first-child,.block-footer h3:first-child,.block-footer h4:first-child,.block-footer p:first-child,.block-footer ul:first-child,.block-header h1:first-child,.block-header h2:first-child,.block-header h3:first-child,.block-header h4:first-child,.block-header p:first-child,.block-header ul:first-child{margin-top:0}.block-footer h1:last-child,.block-footer h2:last-child,.block-footer h3:last-child,.block-footer h4:last-child,.block-footer p:last-child,.block-footer ul:last-child,.block-header h1:last-child,.block-header h2:last-child,.block-header h3:last-child,.block-header h4:last-child,.block-header p:last-child,.block-header ul:last-child{margin-bottom:0}.block-footer h1:first-child:last-child,.block-footer h2:first-child:last-child,.block-footer h3:first-child:last-child,.block-footer h4:first-child:last-child,.block-footer p:first-child:last-child,.block-footer ul:first-child:last-child,.block-header h1:first-child:last-child,.block-header h2:first-child:last-child,.block-header h3:first-child:last-child,.block-header h4:first-child:last-child,.block-header p:first-child:last-child,.block-header ul:first-child:last-child{margin-top:0;margin-bottom:0}.block .block-header,.card .block-header,.list .block-header,.timeline .block-header{margin-top:0}.block .block-footer,.card .block-footer,.list .block-footer,.timeline .block-footer{margin-bottom:0}.block+.block-footer,.card+.block-footer,.list+.block-footer,.timeline+.block-footer{margin-top:calc(-1 * (var(--f7-block-margin-vertical) - var(--f7-block-footer-margin)))}.block+.block-footer{margin-top:calc(-1 * (var(--f7-block-margin-vertical) - var(--f7-block-footer-margin)));margin-bottom:var(--f7-block-margin-vertical)}.block .block-footer,.block .block-header{padding:0}.block.inset,.ios .block.inset-ios,.md .block.inset-md{border-radius:var(--f7-block-inset-border-radius);margin-left:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-right));--f7-safe-area-left:0px;--f7-safe-area-right:0px}.block-strong.inset:after,.block-strong.inset:before,.ios .block-strong-ios.inset-ios:after,.ios .block-strong-ios.inset-ios:before,.ios .block-strong-ios.inset:after,.ios .block-strong-ios.inset:before,.ios .block-strong.inset-ios:after,.ios .block-strong.inset-ios:before,.md .block-strong-md.inset-md:after,.md .block-strong-md.inset-md:before,.md .block-strong-md.inset:after,.md .block-strong-md.inset:before,.md .block-strong.inset-md:after,.md .block-strong.inset-md:before{display:none!important}@media (min-width:480px){.block.xsmall-inset,.ios .block.xsmall-inset-ios,.md .block.xsmall-inset-md{border-radius:var(--f7-block-inset-border-radius);margin-left:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-right));--f7-safe-area-left:0px;--f7-safe-area-right:0px}.block.xsmall-inset:after,.block.xsmall-inset:before,.ios .block.xsmall-inset-ios:after,.ios .block.xsmall-inset-ios:before,.md .block.xsmall-inset-md:after,.md .block.xsmall-inset-md:before{display:none!important}.block.xsmall-inset.block-outline,.ios .block.xsmall-inset-ios.block-outline,.ios .block.xsmall-inset-ios.block-outline-ios,.md .block.xsmall-inset-md.block-outline,.md .block.xsmall-inset-md.block-outline-md{border:1px solid var(--f7-block-outline-border-color)}}@media (min-width:568px){.block.small-inset,.ios .block.small-inset-ios,.md .block.small-inset-md{border-radius:var(--f7-block-inset-border-radius);margin-left:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-right));--f7-safe-area-left:0px;--f7-safe-area-right:0px}.block.small-inset:after,.block.small-inset:before,.ios .block.small-inset-ios:after,.ios .block.small-inset-ios:before,.md .block.small-inset-md:after,.md .block.small-inset-md:before{display:none!important}.block.small-inset.block-outline,.ios .block.small-inset-ios.block-outline,.ios .block.small-inset-ios.block-outline-ios,.md .block.small-inset-md.block-outline,.md .block.small-inset-md.block-outline-md{border:1px solid var(--f7-block-outline-border-color)}}@media (min-width:768px){.block.medium-inset,.ios .block.medium-inset-ios,.md .block.medium-inset-md{border-radius:var(--f7-block-inset-border-radius);margin-left:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-right));--f7-safe-area-left:0px;--f7-safe-area-right:0px}.block.medium-inset:after,.block.medium-inset:before,.ios .block.medium-inset-ios:after,.ios .block.medium-inset-ios:before,.md .block.medium-inset-md:after,.md .block.medium-inset-md:before{display:none!important}.block.medium-inset.block-outline,.ios .block.medium-inset-ios.block-outline,.ios .block.medium-inset-ios.block-outline-ios,.md .block.medium-inset-md.block-outline,.md .block.medium-inset-md.block-outline-md{border:1px solid var(--f7-block-outline-border-color)}}@media (min-width:1024px){.block.large-inset,.ios .block.large-inset-ios,.md .block.large-inset-md{border-radius:var(--f7-block-inset-border-radius);margin-left:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-right));--f7-safe-area-left:0px;--f7-safe-area-right:0px}.block.large-inset:after,.block.large-inset:before,.ios .block.large-inset-ios:after,.ios .block.large-inset-ios:before,.md .block.large-inset-md:after,.md .block.large-inset-md:before{display:none!important}.block.large-inset.block-outline,.ios .block.large-inset-ios.block-outline,.ios .block.large-inset-ios.block-outline-ios,.md .block.large-inset-md.block-outline,.md .block.large-inset-md.block-outline-md{border:1px solid var(--f7-block-outline-border-color)}}@media (min-width:1200px){.block.xlarge-inset,.ios .block.xlarge-inset-ios,.md .block.xlarge-inset-md{border-radius:var(--f7-block-inset-border-radius);margin-left:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-block-inset-side-margin) + var(--f7-safe-area-outer-right));--f7-safe-area-left:0px;--f7-safe-area-right:0px}.block.xlarge-inset:after,.block.xlarge-inset:before,.ios .block.xlarge-inset-ios:after,.ios .block.xlarge-inset-ios:before,.md .block.xlarge-inset-md:after,.md .block.xlarge-inset-md:before{display:none!important}.block.xlarge-inset.block-outline,.ios .block.xlarge-inset-ios.block-outline,.ios .block.xlarge-inset-ios.block-outline-ios,.md .block.xlarge-inset-md.block-outline,.md .block.xlarge-inset-md.block-outline-md{border:1px solid var(--f7-block-outline-border-color)}}:root{--f7-list-inset-side-margin:16px;--f7-list-item-padding-horizontal:16px;--f7-list-item-padding-vertical:8px;--f7-list-media-item-padding-horizontal:16px;--f7-list-item-text-max-lines:2;--f7-list-chevron-icon-font-size:20px;--f7-list-item-media-margin:16px;--f7-list-item-title-font-size:inherit;--f7-list-item-title-font-weight:400;--f7-list-item-title-line-height:inherit;--f7-list-item-title-white-space:nowrap;--f7-list-item-subtitle-font-weight:400;--f7-list-item-subtitle-line-height:inherit;--f7-list-item-text-font-weight:400;--f7-list-item-after-font-weight:400;--f7-list-item-after-line-height:inherit;--f7-list-item-header-font-size:12px;--f7-list-item-header-font-weight:400;--f7-list-item-header-line-height:1.2;--f7-list-item-footer-font-size:12px;--f7-list-item-footer-font-weight:400;--f7-list-item-footer-line-height:1.2;--f7-list-button-font-size:inherit;--f7-list-button-font-weight:400;--f7-list-button-text-align:center;--f7-list-group-title-line-height:inherit;--f7-menu-list-font-size:14px;--f7-menu-list-item-title-font-size:14px;--f7-menu-list-item-title-font-weight:500;--f7-menu-list-item-subtitle-font-size:14px;--f7-menu-list-item-text-font-size:14px;--f7-menu-list-item-after-font-size:14px;--f7-list-outline-border-color:rgba(0, 0, 0, 0.22);--f7-list-chevron-icon-color:rgba(0, 0, 0, 0.2)}:root .dark,:root.dark{--f7-list-button-border-color:rgba(255, 255, 255, 0.15);--f7-list-outline-border-color:rgba(255, 255, 255, 0.15);--f7-list-group-title-border-color:rgba(255, 255, 255, 0.15);--f7-list-chevron-icon-color:rgba(255, 255, 255, 0.3)}.ios{--f7-list-in-list-padding-left:30px;--f7-list-inset-border-radius:8px;--f7-list-margin-vertical:35px;--f7-list-font-size:17px;--f7-list-chevron-icon-area:20px;--f7-list-item-title-text-color:inherit;--f7-list-item-subtitle-text-color:inherit;--f7-list-link-pressed-bg-color:rgba(0, 0, 0, 0.15);--f7-list-item-subtitle-font-size:15px;--f7-list-item-text-font-size:15px;--f7-list-item-text-line-height:21px;--f7-list-item-after-font-size:inherit;--f7-list-item-after-padding:5px;--f7-list-item-min-height:44px;--f7-list-item-media-icons-margin:5px;--f7-list-media-item-padding-vertical:10px;--f7-list-media-item-title-font-weight:600;--f7-list-button-border-color:rgba(0, 0, 0, 0.22);--f7-list-group-title-border-color:rgba(0, 0, 0, 0.22);--f7-list-group-title-height:31px;--f7-list-group-title-font-size:inherit;--f7-list-group-title-font-weight:400;--f7-menu-list-offset:8px;--f7-menu-list-border-radius:8px;--f7-menu-list-item-bg-color:transparent;--f7-menu-list-item-text-color:inherit;--f7-menu-list-item-min-height:44px;--f7-list-item-border-color:rgba(0, 0, 0, 0.22);--f7-list-outline-inset-border-color:rgba(0, 0, 0, 0.22);--f7-list-strong-bg-color:#fff;--f7-list-item-after-text-color:rgba(0, 0, 0, 0.45);--f7-list-item-header-text-color:inherit;--f7-list-item-footer-text-color:rgba(0, 0, 0, 0.45);--f7-list-item-text-text-color:rgba(0, 0, 0, 0.45);--f7-list-group-title-text-color:rgba(0, 0, 0, 0.45);--f7-list-group-title-bg-color:#f7f7f7;--f7-menu-list-item-selected-text-color:var(--f7-theme-color);--f7-menu-list-item-selected-bg-color:rgba(var(--f7-theme-color-rgb), 0.15)}.ios .dark,.ios.dark{--f7-list-item-border-color:rgba(255, 255, 255, 0.15);--f7-list-outline-inset-color:rgba(255, 255, 255, 0.15);--f7-list-strong-bg-color:#1c1c1d;--f7-list-item-after-text-color:rgba(255, 255, 255, 0.55);--f7-list-item-header-text-color:rgba(255, 255, 255, 0.55);--f7-list-item-footer-text-color:rgba(255, 255, 255, 0.55);--f7-list-item-text-text-color:rgba(255, 255, 255, 0.55);--f7-list-group-title-text-color:rgba(255, 255, 255, 0.55);--f7-list-group-title-bg-color:#232323;--f7-list-link-pressed-bg-color:rgba(255, 255, 255, 0.08);--f7-menu-list-item-selected-text-color:inherit;--f7-menu-list-item-selected-bg-color:var(--f7-theme-color)}.md{--f7-list-in-list-padding-left:24px;--f7-list-inset-border-radius:16px;--f7-list-margin-vertical:32px;--f7-list-font-size:16px;--f7-list-chevron-icon-area:26px;--f7-list-item-subtitle-font-size:14px;--f7-list-item-text-font-size:14px;--f7-list-item-text-line-height:20px;--f7-list-item-after-font-size:14px;--f7-list-item-after-padding:8px;--f7-list-item-min-height:48px;--f7-list-item-media-icons-margin:8px;--f7-list-media-item-padding-vertical:12px;--f7-list-media-item-title-font-weight:500;--f7-list-button-border-color:transparent;--f7-list-group-title-border-color:transparent;--f7-list-group-title-height:48px;--f7-list-group-title-font-size:16px;--f7-list-group-title-font-weight:400;--f7-menu-list-offset:16px;--f7-menu-list-border-radius:999px;--f7-menu-list-item-min-height:56px;--f7-list-link-pressed-bg-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-list-outline-inset-border-color:var(--f7-md-outline);--f7-list-item-border-color:var(--f7-md-outline);--f7-list-item-title-text-color:var(--f7-md-on-surface);--f7-list-item-subtitle-text-color:var(--f7-md-on-surface);--f7-list-group-title-bg-color:var(--f7-md-surface-2);--f7-list-group-title-text-color:var(--f7-md-on-surface-variant);--f7-list-strong-bg-color:var(--f7-md-surface-1);--f7-list-item-after-text-color:var(--f7-md-on-surface-variant);--f7-list-item-text-text-color:var(--f7-md-on-surface-variant);--f7-list-item-header-text-color:var(--f7-md-on-surface-variant);--f7-list-item-footer-text-color:var(--f7-md-on-surface-variant);--f7-menu-list-item-text-color:var(--f7-md-on-surface-variant);--f7-menu-list-item-bg-color:var(--f7-md-surface-1);--f7-menu-list-item-selected-text-color:var(--f7-md-on-secondary-container);--f7-menu-list-item-selected-bg-color:var(--f7-md-secondary-container)}:root{--f7-list-chevron-icon-left:'chevron_left';--f7-list-chevron-icon-right:'chevron_right'}.list{position:relative;z-index:1;font-size:var(--f7-list-font-size);margin:var(--f7-list-margin-vertical) 0}.ios .list-strong-ios ul,.list-strong ul,.md .list-strong-md ul{background:var(--f7-list-strong-bg-color)}.ios .list-outline-ios ul:before,.list-outline ul:before,.md .list-outline-md ul:before{content:'';position:absolute;background-color:var(--f7-list-outline-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.ios .list-outline-ios ul:after,.list-outline ul:after,.md .list-outline-md ul:after{content:'';position:absolute;background-color:var(--f7-list-outline-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.ios .list-outline-ios.inset,.ios .list-outline-ios.inset-ios,.list-outline.inset,.md .list-outline-md.inset,.md .list-outline-md.inset-md{border:1px solid var(--f7-list-outline-inset-border-color)}.list ul{list-style:none;margin:0;padding:0;position:relative}.list ul ul{padding-left:calc(var(--f7-list-item-padding-horizontal) + var(--f7-list-in-list-padding-left))}.list ul ul:after,.list ul ul:before{display:none!important}.list li{position:relative;box-sizing:border-box}.list .item-media{display:flex;flex-shrink:0;flex-wrap:nowrap;align-items:center;box-sizing:border-box;padding-bottom:var(--f7-list-item-padding-vertical);padding-top:var(--f7-list-item-padding-vertical);position:relative}.list .item-media+.item-inner{margin-left:var(--f7-list-item-media-margin)}.list .item-media i+i,.list .item-media i+img{margin-left:var(--f7-list-item-media-icons-margin)}.list .item-after{padding-left:var(--f7-list-item-after-padding)}.list .item-inner{position:relative;width:100%;min-width:0;display:flex;justify-content:space-between;box-sizing:border-box;align-items:center;align-self:stretch;padding-top:var(--f7-list-item-padding-vertical);padding-bottom:var(--f7-list-item-padding-vertical);min-height:calc(var(--f7-list-item-min-height));padding-right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.list .item-title{min-width:0;flex-shrink:1;white-space:var(--f7-list-item-title-white-space);position:relative;overflow:hidden;text-overflow:ellipsis;max-width:100%;font-size:var(--f7-list-item-title-font-size);font-weight:var(--f7-list-item-title-font-weight);color:var(--f7-list-item-title-text-color);line-height:var(--f7-list-item-title-line-height)}.list .item-after{white-space:nowrap;flex-shrink:0;display:flex;font-size:var(--f7-list-item-after-font-size);font-weight:var(--f7-list-item-after-font-weight);color:var(--f7-list-item-after-text-color);line-height:var(--f7-list-item-after-line-height);margin-left:auto}.list .item-footer,.list .item-header{white-space:normal}.list .item-header{color:var(--f7-list-item-header-text-color);font-size:var(--f7-list-item-header-font-size);font-weight:var(--f7-list-item-header-font-weight);line-height:var(--f7-list-item-header-line-height)}.list .item-footer{color:var(--f7-list-item-footer-text-color);font-size:var(--f7-list-item-footer-font-size);font-weight:var(--f7-list-item-footer-font-weight);line-height:var(--f7-list-item-footer-line-height)}.list .item-link,.list .list-button,.list label.item-content{transition-duration:.3s;transition-property:background-color,color;position:relative;overflow:hidden;z-index:0;cursor:pointer}.list .item-link,.list .list-button{display:block}.list .item-link,.list label.item-content{color:inherit}.list .item-link.active-state,.list label.item-content.active-state{background-color:var(--f7-list-link-pressed-bg-color)}.list .item-link .item-inner{padding-right:calc(var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.list .item-content{display:flex;justify-content:space-between;box-sizing:border-box;align-items:center;min-height:calc(var(--f7-list-item-min-height));padding-left:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-left))}.list .item-subtitle{position:relative;overflow:hidden;white-space:nowrap;max-width:100%;text-overflow:ellipsis;font-size:var(--f7-list-item-subtitle-font-size);font-weight:var(--f7-list-item-subtitle-font-weight);color:var(--f7-list-item-subtitle-text-color);line-height:var(--f7-list-item-subtitle-line-height)}.list .item-text{position:relative;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:var(--f7-list-item-text-max-lines);-webkit-box-orient:vertical;display:-webkit-box;font-size:var(--f7-list-item-text-font-size);font-weight:var(--f7-list-item-text-font-weight);color:var(--f7-list-item-text-text-color);line-height:var(--f7-list-item-text-line-height);max-height:calc(var(--f7-list-item-text-line-height) * var(--f7-list-item-text-max-lines))}.list .item-title-row{position:relative;display:flex;justify-content:space-between;box-sizing:border-box}.list .item-title-row .item-after{align-self:center}.list li:last-child .list-button:after{display:none!important}.list li:last-child li:last-child>.item-content>.item-inner:after,.list li:last-child li:last-child>.item-inner:after,.list li:last-child li:last-child>.item-link>.item-content>.item-inner:after,.list li:last-child li:last-child>.swipeout-content>.item-content>.item-inner:after,.list li:last-child>.item-content>.item-inner:after,.list li:last-child>.item-inner:after,.list li:last-child>.item-link>.item-content>.item-inner:after,.list li:last-child>.swipeout-content>.item-content>.item-inner:after{display:none!important}.list li li:last-child .item-inner:after,.list li:last-child li .item-inner:after{content:'';position:absolute;background-color:var(--f7-list-item-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.list-button{--f7-touch-ripple-color:var(--f7-link-touch-ripple-color, rgba(var(--f7-theme-color-rgb), 0.25));padding:0 var(--f7-list-item-padding-horizontal);line-height:var(--f7-list-item-min-height);color:var(--f7-list-button-text-color,var(--f7-theme-color));font-size:var(--f7-list-button-font-size);font-weight:var(--f7-list-button-font-weight);text-align:var(--f7-list-button-text-align)}.ios .list-button.active-state{background-color:var(--f7-list-button-pressed-bg-color,rgba(var(--f7-theme-color-rgb),.15))}.md .list-button.active-state{background-color:var(--f7-list-button-pressed-bg-color,transparent)}.ios .list-dividers-ios .list-button:after,.list-dividers .list-button:after,.md .list-dividers-md .list-button:after{content:'';position:absolute;background-color:var(--f7-list-button-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.list-button[class*=color-]{--f7-list-button-text-color:var(--f7-theme-color)}.simple-list li{position:relative;white-space:nowrap;text-overflow:ellipsis;max-width:100%;box-sizing:border-box;display:flex;justify-content:space-between;align-items:center;align-content:center;line-height:var(--f7-list-item-min-height);height:var(--f7-list-item-min-height);padding-left:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-left));padding-right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.simple-list li:after{left:var(--f7-list-item-padding-horizontal);width:auto;left:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-left));right:0}.simple-list li:last-child:after{display:none!important}.links-list li{z-index:1}.links-list a{transition-duration:.3s;transition-property:background-color;display:block;position:relative;overflow:hidden;display:flex;align-items:center;align-content:center;justify-content:space-between;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;max-width:100%;height:var(--f7-list-item-min-height);color:inherit}.links-list a .ripple-wave{z-index:0}.links-list a:after{width:auto}.links-list a.active-state{background-color:var(--f7-list-link-pressed-bg-color)}.links-list a{padding-left:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-left));padding-right:calc(var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.links-list a:after{left:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-left));right:0}.links-list li:last-child a:after{display:none!important}.ios .list-dividers-ios .item-inner:after,.ios .list-dividers-ios.links-list a:after,.ios .list-dividers-ios.simple-list li:after,.list-dividers .item-inner:after,.list-dividers.links-list a:after,.list-dividers.simple-list li:after,.md .list-dividers-md .item-inner:after,.md .list-dividers-md.links-list a:after,.md .list-dividers-md.simple-list li:after{content:'';position:absolute;background-color:var(--f7-list-item-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.md .list:not(.inset):not(.inset-md):not(.menu-list) .media-item .item-content,.md .list:not(.inset):not(.inset-md):not(.menu-list) .media-item>.item-link,.md .media-list:not(.inset):not(.inset-md):not(.menu-list) .item-content,.md .media-list:not(.inset):not(.inset-md):not(.menu-list) li>.item-link{margin-left:calc(var(--f7-list-item-padding-horizontal)/ 2);margin-right:calc(var(--f7-list-item-padding-horizontal)/ 2);border-radius:16px}.md .list:not(.inset):not(.inset-md):not(.menu-list) .media-item>.item-link>.item-content,.md .media-list:not(.inset):not(.inset-md):not(.menu-list) li>.item-link>.item-content{margin-left:0;margin-right:0}.md .list:not(.inset):not(.inset-md):not(.menu-list) .media-item .item-content,.md .media-list:not(.inset):not(.inset-md):not(.menu-list) .item-content{padding-left:calc(var(--f7-list-item-padding-horizontal)/ 2 + var(--f7-safe-area-left))}.media-list,li.media-item{--f7-list-item-padding-vertical:var(--f7-list-media-item-padding-vertical);--f7-list-item-padding-horizontal:var(--f7-list-media-item-padding-horizontal)}.media-list .item-title,li.media-item .item-title{font-weight:var(--f7-list-media-item-title-font-weight,var(--f7-list-item-title-font-weight,inherit))}.media-list .item-inner,li.media-item .item-inner{display:block;align-self:stretch}.media-list .item-media img,li.media-item .item-media img{display:block}.media-list .item-link .item-inner,li.media-item .item-link .item-inner{padding-right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.media-list .item-link .item-title-row,li.media-item .item-link .item-title-row{padding-right:calc(var(--f7-list-chevron-icon-area))}.media-list .chevron-center .item-link .item-inner,.media-list .item-link.chevron-center .item-inner,.media-list.chevron-center .item-link .item-inner,li.media-item .chevron-center .item-link .item-inner,li.media-item .item-link.chevron-center .item-inner,li.media-item.chevron-center .item-link .item-inner{padding-right:calc(var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.media-list .chevron-center .item-title-row,.media-list.chevron-center .item-title-row,li.media-item .chevron-center .item-title-row,li.media-item.chevron-center .item-title-row{padding-right:0}.links-list a:before,.list .item-link .item-inner:before,.media-list .chevron-center .item-link .item-inner:before,.media-list .item-link .item-title-row:before,.media-list .item-link.chevron-center .item-inner:before,.media-list.chevron-center .item-link .item-inner:before,li.media-item .chevron-center .item-link .item-inner:before,li.media-item .item-link .item-title-row:before,li.media-item .item-link.chevron-center .item-inner:before,li.media-item.chevron-center .item-link .item-inner:before{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;position:absolute;top:50%;width:8px;height:14px;margin-top:-7px;font-size:var(--f7-list-chevron-icon-font-size);line-height:14px;color:var(--f7-list-chevron-icon-color);pointer-events:none;right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right));content:var(--f7-list-chevron-icon-right)}.media-list .chevron-center .item-title-row:before,.media-list.chevron-center .item-title-row:before,li.media-item .chevron-center .item-title-row:before,li.media-item.chevron-center .item-title-row:before{display:none}.media-list .item-link .item-inner:before,li.media-item .item-link .item-inner:before{display:none}.media-list .item-link .item-title-row:before,li.media-item .item-link .item-title-row:before{right:0}.list-group ul:after,.list-group ul:before{z-index:25!important}.list-group+.list-group ul:before{display:none!important}.list-group-title,li.list-group-title{margin-top:-1px;white-space:nowrap;position:relative;max-width:100%;text-overflow:ellipsis;overflow:hidden;z-index:15;padding-top:0;padding-bottom:0;padding-left:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-left));padding-right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right));box-sizing:border-box;display:flex;align-items:center;align-content:center;height:var(--f7-list-group-title-height);color:var(--f7-list-group-title-text-color);font-size:var(--f7-list-group-title-font-size);font-weight:var(--f7-list-group-title-font-weight);background-color:var(--f7-list-group-title-bg-color);line-height:var(--f7-list-group-title-line-height)}.list-group-title:before,li.list-group-title:before{content:'';position:absolute;background-color:var(--f7-list-group-title-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.list-group-title:after,li.list-group-title:after{display:none!important}.list-group>.list-group-title,.list-group>ul>.list-group-title{top:0;margin-top:0;position:sticky;z-index:20}.page-with-navbar-large .list-group>.list-group-title,.page-with-navbar-large .list-group>ul>.list-group-title{top:calc(-1 * var(--f7-navbar-large-title-height))}.ios .list.inset-ios,.list.inset,.md .list.inset-md{margin-left:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-right));border-radius:var(--f7-list-inset-border-radius);--f7-safe-area-left:0px;--f7-safe-area-right:0px}.ios .list.inset-ios .block-title,.list.inset .block-title,.md .list.inset-md .block-title{margin-left:0;margin-right:0}.ios .list.inset-ios ul,.list.inset ul,.md .list.inset-md ul{border-radius:var(--f7-list-inset-border-radius)}.ios .list.inset-ios ul:after,.ios .list.inset-ios ul:before,.list.inset ul:after,.list.inset ul:before,.md .list.inset-md ul:after,.md .list.inset-md ul:before{display:none!important}.ios .list.inset-ios li.swipeout:first-child,.ios .list.inset-ios li:first-child>a,.list.inset li.swipeout:first-child,.list.inset li:first-child>a,.md .list.inset-md li.swipeout:first-child,.md .list.inset-md li:first-child>a{border-radius:var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0}.ios .list.inset-ios li.swipeout:last-child,.ios .list.inset-ios li:last-child>a,.list.inset li.swipeout:last-child,.list.inset li:last-child>a,.md .list.inset-md li.swipeout:last-child,.md .list.inset-md li:last-child>a{border-radius:0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius)}.ios .list.inset-ios li.swipeout:first-child:last-child,.ios .list.inset-ios li:first-child:last-child>a,.list.inset li.swipeout:first-child:last-child,.list.inset li:first-child:last-child>a,.md .list.inset-md li.swipeout:first-child:last-child,.md .list.inset-md li:first-child:last-child>a{border-radius:var(--f7-list-inset-border-radius)}@media (min-width:480px){.ios .list.xsmall-inset-ios,.list.xsmall-inset,.md .list.xsmall-inset-md{margin-left:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-right));border-radius:var(--f7-list-inset-border-radius);--f7-safe-area-left:0px;--f7-safe-area-right:0px}.ios .list.xsmall-inset-ios .block-title,.list.xsmall-inset .block-title,.md .list.xsmall-inset-md .block-title{margin-left:0;margin-right:0}.ios .list.xsmall-inset-ios ul,.list.xsmall-inset ul,.md .list.xsmall-inset-md ul{border-radius:var(--f7-list-inset-border-radius)}.ios .list.xsmall-inset-ios ul:after,.ios .list.xsmall-inset-ios ul:before,.list.xsmall-inset ul:after,.list.xsmall-inset ul:before,.md .list.xsmall-inset-md ul:after,.md .list.xsmall-inset-md ul:before{display:none!important}.ios .list.xsmall-inset-ios li:first-child>a,.list.xsmall-inset li:first-child>a,.md .list.xsmall-inset-md li:first-child>a{border-radius:var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0}.ios .list.xsmall-inset-ios li:last-child>a,.list.xsmall-inset li:last-child>a,.md .list.xsmall-inset-md li:last-child>a{border-radius:0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius)}.ios .list.xsmall-inset-ios li:first-child:last-child>a,.list.xsmall-inset li:first-child:last-child>a,.md .list.xsmall-inset-md li:first-child:last-child>a{border-radius:var(--f7-list-inset-border-radius)}.ios .list.xsmall-inset-ios.list-outline ul,.ios .list.xsmall-inset-ios.list-outline-ios ul,.list.xsmall-inset.list-outline ul,.md .list.xsmall-inset-md.list-outline ul,.md .list.xsmall-inset-md.list-outline-md ul{border:1px solid var(--f7-list-outline-inset-border-color)}}@media (min-width:568px){.ios .list.small-inset-ios,.list.small-inset,.md .list.small-inset-md{margin-left:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-right));border-radius:var(--f7-list-inset-border-radius);--f7-safe-area-left:0px;--f7-safe-area-right:0px}.ios .list.small-inset-ios .block-title,.list.small-inset .block-title,.md .list.small-inset-md .block-title{margin-left:0;margin-right:0}.ios .list.small-inset-ios ul,.list.small-inset ul,.md .list.small-inset-md ul{border-radius:var(--f7-list-inset-border-radius)}.ios .list.small-inset-ios ul:after,.ios .list.small-inset-ios ul:before,.list.small-inset ul:after,.list.small-inset ul:before,.md .list.small-inset-md ul:after,.md .list.small-inset-md ul:before{display:none!important}.ios .list.small-inset-ios li:first-child>a,.list.small-inset li:first-child>a,.md .list.small-inset-md li:first-child>a{border-radius:var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0}.ios .list.small-inset-ios li:last-child>a,.list.small-inset li:last-child>a,.md .list.small-inset-md li:last-child>a{border-radius:0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius)}.ios .list.small-inset-ios li:first-child:last-child>a,.list.small-inset li:first-child:last-child>a,.md .list.small-inset-md li:first-child:last-child>a{border-radius:var(--f7-list-inset-border-radius)}.ios .list.small-inset-ios.list-outline ul,.ios .list.small-inset-ios.list-outline-ios ul,.list.small-inset.list-outline ul,.md .list.small-inset-md.list-outline ul,.md .list.small-inset-md.list-outline-md ul{border:1px solid var(--f7-list-outline-inset-border-color)}}@media (min-width:768px){.ios .list.medium-inset-ios,.list.medium-inset,.md .list.medium-inset-md{margin-left:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-right));border-radius:var(--f7-list-inset-border-radius);--f7-safe-area-left:0px;--f7-safe-area-right:0px}.ios .list.medium-inset-ios .block-title,.list.medium-inset .block-title,.md .list.medium-inset-md .block-title{margin-left:0;margin-right:0}.ios .list.medium-inset-ios ul,.list.medium-inset ul,.md .list.medium-inset-md ul{border-radius:var(--f7-list-inset-border-radius)}.ios .list.medium-inset-ios ul:after,.ios .list.medium-inset-ios ul:before,.list.medium-inset ul:after,.list.medium-inset ul:before,.md .list.medium-inset-md ul:after,.md .list.medium-inset-md ul:before{display:none!important}.ios .list.medium-inset-ios li:first-child>a,.list.medium-inset li:first-child>a,.md .list.medium-inset-md li:first-child>a{border-radius:var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0}.ios .list.medium-inset-ios li:last-child>a,.list.medium-inset li:last-child>a,.md .list.medium-inset-md li:last-child>a{border-radius:0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius)}.ios .list.medium-inset-ios li:first-child:last-child>a,.list.medium-inset li:first-child:last-child>a,.md .list.medium-inset-md li:first-child:last-child>a{border-radius:var(--f7-list-inset-border-radius)}.ios .list.medium-inset-ios.list-outline ul,.ios .list.medium-inset-ios.list-outline-ios ul,.list.medium-inset.list-outline ul,.md .list.medium-inset-md.list-outline ul,.md .list.medium-inset-md.list-outline-md ul{border:1px solid var(--f7-list-outline-inset-border-color)}}@media (min-width:1024px){.ios .list.large-inset-ios,.list.large-inset,.md .list.large-inset-md{margin-left:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-right));border-radius:var(--f7-list-inset-border-radius);--f7-safe-area-left:0px;--f7-safe-area-right:0px}.ios .list.large-inset-ios .block-title,.list.large-inset .block-title,.md .list.large-inset-md .block-title{margin-left:0;margin-right:0}.ios .list.large-inset-ios ul,.list.large-inset ul,.md .list.large-inset-md ul{border-radius:var(--f7-list-inset-border-radius)}.ios .list.large-inset-ios ul:after,.ios .list.large-inset-ios ul:before,.list.large-inset ul:after,.list.large-inset ul:before,.md .list.large-inset-md ul:after,.md .list.large-inset-md ul:before{display:none!important}.ios .list.large-inset-ios li:first-child>a,.list.large-inset li:first-child>a,.md .list.large-inset-md li:first-child>a{border-radius:var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0}.ios .list.large-inset-ios li:last-child>a,.list.large-inset li:last-child>a,.md .list.large-inset-md li:last-child>a{border-radius:0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius)}.ios .list.large-inset-ios li:first-child:last-child>a,.list.large-inset li:first-child:last-child>a,.md .list.large-inset-md li:first-child:last-child>a{border-radius:var(--f7-list-inset-border-radius)}.ios .list.large-inset-ios.list-outline ul,.ios .list.large-inset-ios.list-outline-ios ul,.list.large-inset.list-outline ul,.md .list.large-inset-md.list-outline ul,.md .list.large-inset-md.list-outline-md ul{border:1px solid var(--f7-list-outline-inset-border-color)}}@media (min-width:1200px){.ios .list.xlarge-inset-ios,.list.xlarge-inset,.md .list.xlarge-inset-md{margin-left:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-left));margin-right:calc(var(--f7-list-inset-side-margin) + var(--f7-safe-area-outer-right));border-radius:var(--f7-list-inset-border-radius);--f7-safe-area-left:0px;--f7-safe-area-right:0px}.ios .list.xlarge-inset-ios .block-title,.list.xlarge-inset .block-title,.md .list.xlarge-inset-md .block-title{margin-left:0;margin-right:0}.ios .list.xlarge-inset-ios ul,.list.xlarge-inset ul,.md .list.xlarge-inset-md ul{border-radius:var(--f7-list-inset-border-radius)}.ios .list.xlarge-inset-ios ul:after,.ios .list.xlarge-inset-ios ul:before,.list.xlarge-inset ul:after,.list.xlarge-inset ul:before,.md .list.xlarge-inset-md ul:after,.md .list.xlarge-inset-md ul:before{display:none!important}.ios .list.xlarge-inset-ios li:first-child>a,.list.xlarge-inset li:first-child>a,.md .list.xlarge-inset-md li:first-child>a{border-radius:var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0}.ios .list.xlarge-inset-ios li:last-child>a,.list.xlarge-inset li:last-child>a,.md .list.xlarge-inset-md li:last-child>a{border-radius:0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius)}.ios .list.xlarge-inset-ios li:first-child:last-child>a,.list.xlarge-inset li:first-child:last-child>a,.md .list.xlarge-inset-md li:first-child:last-child>a{border-radius:var(--f7-list-inset-border-radius)}.ios .list.xlarge-inset-ios.list-outline ul,.ios .list.xlarge-inset-ios.list-outline-ios ul,.list.xlarge-inset.list-outline ul,.md .list.xlarge-inset-md.list-outline ul,.md .list.xlarge-inset-md.list-outline-md ul{border:1px solid var(--f7-list-outline-inset-border-color)}}.list .no-chevron,.list.no-chevron,.menu-list{--f7-list-chevron-icon-color:transparent;--f7-list-chevron-icon-area:0px}.menu-list{--f7-list-font-size:var(--f7-menu-list-font-size);--f7-list-item-title-font-size:var(--f7-menu-list-item-title-font-size);--f7-list-item-title-font-weight:var(--f7-menu-list-item-title-font-weight);--f7-list-item-subtitle-font-size:var(--f7-menu-list-item-subtitle-font-size);--f7-list-item-text-font-size:var(--f7-menu-list-item-text-font-size);--f7-list-item-after-font-size:var(--f7-menu-list-item-after-font-size);--f7-list-item-min-height:var(--f7-menu-list-item-min-height)}.menu-list .item-after,.menu-list .item-footer,.menu-list .item-header,.menu-list .item-subtitle,.menu-list .item-text,.menu-list .item-title{transition-duration:.3s}.menu-list li:not(.list-group-title){padding-top:4px;padding-bottom:4px}.menu-list li:not(.list-group-title):first-child{padding-top:4px}.menu-list li:not(.list-group-title):last-child{padding-bottom:4px}.menu-list .item-link{margin-left:var(--f7-menu-list-offset);margin-right:var(--f7-menu-list-offset);border-radius:var(--f7-menu-list-border-radius)!important;color:var(--f7-menu-list-item-text-color);background-color:var(--f7-menu-list-item-bg-color)}.menu-list .item-inner:after{display:none}.menu-list .item-selected .item-link,.menu-list .item-selected.item-link,.menu-list .tab-link-active .item-link,.menu-list .tab-link-active.item-link{color:var(--f7-menu-list-item-selected-text-color);background-color:var(--f7-menu-list-item-selected-bg-color)}.menu-list .item-selected .item-after,.menu-list .item-selected .item-footer,.menu-list .item-selected .item-header,.menu-list .item-selected .item-subtitle,.menu-list .item-selected .item-text,.menu-list .item-selected .item-title{color:var(--f7-menu-list-item-selected-text-color)}.ios .item-link.active-state .item-inner:after,.ios .links-list a.active-state:after,.ios .list-button.active-state:after{background-color:transparent}.ios .links-list a.active-state,.ios .list .item-link.active-state,.ios .list .list-button.active-state{transition-duration:0s}.md .menu-list .item-link.active-state{background-color:var(--f7-menu-list-item-bg-color)}:root{--f7-badge-text-color:#fff;--f7-badge-bg-color:#8e8e93;--f7-badge-in-icon-size:16px;--f7-badge-in-icon-font-size:10px;--f7-badge-font-weight:normal;--f7-badge-font-size:12px}.ios{--f7-badge-padding:0 4px;--f7-badge-size:20px;--f7-badge-font-weight:600}.md{--f7-badge-padding:2px 6px;--f7-badge-size:20px;--f7-badge-font-weight:500}.badge{display:inline-flex;align-items:center;align-content:center;justify-content:center;color:var(--f7-badge-text-color);background:var(--f7-badge-bg-color);position:relative;box-sizing:border-box;text-align:center;vertical-align:middle;font-weight:var(--f7-badge-font-weight);font-size:var(--f7-badge-font-size);border-radius:var(--f7-badge-size);padding:var(--f7-badge-padding);height:var(--f7-badge-size);min-width:var(--f7-badge-size)}.f7-icons .badge,.framework7-icons .badge,.icon .badge,.material-icons .badge{position:absolute;left:100%;margin-left:-10px;top:-2px;font-family:var(--f7-font-family);--f7-badge-font-size:var(--f7-badge-in-icon-font-size);--f7-badge-size:var(--f7-badge-in-icon-size);--f7-badge-padding:0px 2px}.badge[class*=color-]{--f7-badge-bg-color:var(--f7-theme-color)}:root{--f7-button-font-size:14px;--f7-button-min-width:32px;--f7-button-bg-color:transparent;--f7-button-border-width:0px;--f7-button-raised-box-shadow:0 1px 3px rgba(0, 0, 0, 0.12),0 1px 2px rgba(0, 0, 0, 0.24);--f7-button-raised-pressed-box-shadow:0 3px 6px rgba(0, 0, 0, 0.16),0 3px 6px rgba(0, 0, 0, 0.23);--f7-segmented-raised-divider-color:rgba(0, 0, 0, 0.1);--f7-segmented-strong-padding:2px;--f7-segmented-strong-between-buttons:4px;--f7-segmented-strong-button-font-weight:500;--f7-segmented-strong-button-active-box-shadow:0px 2px 2px rgba(0, 0, 0, 0.25);--f7-segmented-strong-button-text-color:#000;--f7-segmented-strong-button-hover-bg-color:rgba(0, 0, 0, 0.04);--f7-segmented-strong-button-active-text-color:#000;--f7-segmented-strong-button-active-bg-color:#fff}:root .dark,:root.dark{--f7-segmented-strong-button-hover-bg-color:rgba(255, 255, 255, 0.02);--f7-segmented-strong-button-active-bg-color:rgba(255, 255, 255, 0.14);--f7-segmented-strong-button-text-color:#fff;--f7-segmented-strong-button-active-text-color:#fff}.ios{--f7-button-fill-text-color:#fff;--f7-button-text-transform:uppercase;--f7-button-height:28px;--f7-button-padding-horizontal:10px;--f7-button-border-radius:4px;--f7-button-font-weight:600;--f7-button-letter-spacing:0;--f7-button-outline-border-width:2px;--f7-button-large-text-transform:uppercase;--f7-button-large-height:44px;--f7-button-large-font-size:17px;--f7-button-large-font-weight:500;--f7-button-small-outline-border-width:2px;--f7-button-small-text-transform:uppercase;--f7-button-small-height:26px;--f7-button-small-font-size:13px;--f7-button-small-font-weight:600;--f7-segmented-strong-button-text-transform:none;--f7-segmented-strong-button-active-font-weight:600;--f7-button-tonal-bg-color:rgba(var(--f7-theme-color-rgb), 0.15);--f7-button-tonal-pressed-bg-color:rgba(var(--f7-theme-color-rgb), 0.25);--f7-button-tonal-text-color:var(--f7-theme-color);--f7-segmented-strong-bg-color:rgba(0, 0, 0, 0.07);--f7-segmented-strong-button-pressed-bg-color:rgba(0, 0, 0, 0.07)}.ios .dark,.ios.dark{--f7-segmented-strong-bg-color:rgba(255, 255, 255, 0.1);--f7-segmented-strong-button-pressed-bg-color:rgba(255, 255, 255, 0.04)}.md{--f7-button-text-transform:none;--f7-button-height:40px;--f7-button-padding-horizontal:16px;--f7-button-border-radius:8px;--f7-button-font-weight:500;--f7-button-letter-spacing:normal;--f7-button-outline-border-width:1px;--f7-button-large-text-transform:none;--f7-button-large-height:48px;--f7-button-large-font-size:14px;--f7-button-large-font-weight:500;--f7-button-small-text-transform:none;--f7-button-small-outline-border-width:1px;--f7-button-small-height:32px;--f7-button-small-font-size:14px;--f7-button-small-font-weight:500;--f7-segmented-strong-button-text-transform:none;--f7-segmented-strong-button-active-font-weight:500;--f7-segmented-strong-button-pressed-bg-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-button-fill-pressed-bg-color:transparent;--f7-button-fill-text-color:var(--f7-md-on-primary);--f7-button-outline-border-color:var(--f7-md-outline);--f7-segmented-strong-bg-color:var(--f7-md-surface-variant);--f7-button-tonal-bg-color:var(--f7-md-secondary-container);--f7-button-tonal-pressed-bg-color:transparent;--f7-button-tonal-text-color:var(--f7-md-on-secondary-container)}button{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%}.button{--f7-touch-ripple-color:rgba(var(--f7-theme-color-rgb), 0.25);text-decoration:none;text-align:center;display:flex;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;margin:0;white-space:nowrap;text-overflow:ellipsis;position:relative;overflow:hidden;font-family:inherit;cursor:pointer;outline:0;box-sizing:border-box;vertical-align:middle;justify-content:center;align-items:center;border:var(--f7-button-border-width,0px) solid var(--f7-button-border-color,var(--f7-theme-color));font-size:var(--f7-button-font-size);color:var(--f7-button-text-color,var(--f7-theme-color));height:var(--f7-button-height);line-height:calc(var(--f7-button-height) - var(--f7-button-border-width, 0) * 2);padding:var(--f7-button-padding-vertical,0px) var(--f7-button-padding-horizontal);border-radius:var(--f7-button-border-radius);min-width:var(--f7-button-min-width);font-weight:var(--f7-button-font-weight);letter-spacing:var(--f7-button-letter-spacing);text-transform:var(--f7-button-text-transform);background-color:var(--f7-button-bg-color);box-shadow:var(--f7-button-box-shadow)}.button.active-state{color:var(--f7-button-pressed-text-color,var(--f7-button-text-color,var(--f7-theme-color)))}input[type=button].button,input[type=reset].button,input[type=submit].button{width:100%}.button>i+span,.button>span+span,.button>span~i{margin-left:4px}.navbar .button,.searchbar .button,.subnavbar .button,.toolbar .button{color:var(--f7-button-text-color,var(--f7-theme-color))}.button-round,.ios .button-round-ios,.md .button-round-md{--f7-button-border-radius:var(--f7-button-height)}.button-active,.button-fill,.button.tab-link-active,.ios .button-fill-ios,.md .button-fill-md{--f7-button-bg-color:var(--f7-button-fill-bg-color, var(--f7-theme-color));--f7-button-text-color:var(--f7-button-fill-text-color, #fff);--f7-touch-ripple-color:var(--f7-touch-ripple-white)}.ios .button-active.color-white,.ios .button-fill.color-white,.ios .button.tab-link-active.color-white,.ios .color-white .button-active,.ios .color-white .button-fill,.ios .color-white .button.tab-link-active,.ios .color-white .ios .button-fill-ios,.ios .color-white .md .button-fill-md,.ios .ios .button-fill-ios.color-white,.ios .md .button-fill-md.color-white{--f7-button-text-color:#000}.button-fill,.ios .button-fill-ios,.md .button-fill-md{--f7-button-pressed-bg-color:var(--f7-button-fill-pressed-bg-color)}.button-active,.button.tab-link-active{--f7-button-pressed-bg-color:var(--f7-button-bg-color)}.button-outline,.ios .button-outline-ios,.md .button-outline-md{--f7-button-border-color:var(--f7-button-outline-border-color, var(--f7-theme-color));--f7-button-border-width:var(--f7-button-outline-border-width)}.button-tonal,.ios .button-tonal-ios,.md .button-tonal-md{--f7-button-bg-color:var(--f7-button-tonal-bg-color);--f7-button-text-color:var(--f7-button-tonal-text-color);--f7-button-pressed-bg-color:var(--f7-button-tonal-pressed-bg-color)}.button-large,.ios .button-large-ios,.md .button-large-md{--f7-button-height:var(--f7-button-large-height);--f7-button-font-size:var(--f7-button-large-font-size);--f7-button-font-weight:var(--f7-button-large-font-weight);--f7-button-text-transform:var(--f7-button-large-text-transform)}.button-small,.ios .button-small-ios,.md .button-small-md{--f7-button-outline-border-width:var(--f7-button-small-outline-border-width);--f7-button-height:var(--f7-button-small-height);--f7-button-font-size:var(--f7-button-small-font-size);--f7-button-font-weight:var(--f7-button-small-font-weight);--f7-button-text-transform:var(--f7-button-small-text-transform)}.ios .button-small-ios.button-fill,.ios .button-small.button-fill,.ios .button-small.button-fill-ios{--f7-button-border-width:var(--f7-button-small-outline-border-width);--f7-button-pressed-text-color:var(--f7-theme-color);--f7-button-pressed-bg-color:transparent}.segmented{align-self:center;display:flex;flex-wrap:nowrap;border-radius:var(--f7-button-border-radius);box-shadow:var(--f7-button-box-shadow);box-sizing:border-box}.segmented .button,.segmented button{width:100%;flex-shrink:1;min-width:0;border-radius:0}.segmented .button:first-child{border-radius:var(--f7-button-border-radius) 0 0 var(--f7-button-border-radius)}.segmented .button:not(.button-outline):first-child{border-left:none}.segmented .button.button-outline:nth-child(n+2){border-left:none}.segmented .button:last-child{border-radius:0 var(--f7-button-border-radius) var(--f7-button-border-radius) 0}.segmented .button-round:first-child{border-radius:var(--f7-button-height) 0 0 var(--f7-button-height)}.segmented .button-round:last-child{border-radius:0 var(--f7-button-height) var(--f7-button-height) 0}.segmented .button:first-child:last-child{border-radius:var(--f7-button-border-radius)}.ios .segmented-raised-ios,.md .segmented-raised-md,.segmented-raised{box-shadow:var(--f7-button-raised-box-shadow)}.ios .segmented-raised-ios .button:not(.button-outline),.md .segmented-raised-md .button:not(.button-outline),.segmented-raised .button:not(.button-outline){border-left:1px solid var(--f7-segmented-raised-divider-color)}.button-raised,.ios .button-raised-ios,.md .button-raised-md{--f7-button-box-shadow:var(--f7-button-raised-box-shadow)}.button-raised.active-state,.ios .button-raised-ios.active-state,.md .button-raised-md.active-state{--f7-button-box-shadow:var(--f7-button-raised-pressed-box-shadow)}.ios .segmented-strong-ios,.md .segmented-strong-md,.segmented-strong{--f7-button-bg-color:transparent;--f7-button-hover-bg-color:var(--f7-segmented-strong-button-hover-bg-color);--f7-button-text-color:var(--f7-segmented-strong-button-text-color);--f7-button-font-weight:var(--f7-segmented-strong-button-font-weight);--f7-button-text-transform:var(--f7-segmented-strong-button-text-transform);--f7-button-pressed-bg-color:var(--f7-segmented-strong-button-pressed-bg-color);position:relative;background:var(--f7-segmented-strong-bg-color);border-radius:calc(var(--f7-button-border-radius) + 2px);box-shadow:none;padding:var(--f7-segmented-strong-padding);overflow:hidden}.ios .segmented-strong-ios .button,.md .segmented-strong-md .button,.segmented-strong .button{z-index:1;transform:translate3d(0,0,0)}.ios .segmented-strong-ios .button,.ios .segmented-strong-ios .button:first-child,.ios .segmented-strong-ios .button:last-child,.md .segmented-strong-md .button,.md .segmented-strong-md .button:first-child,.md .segmented-strong-md .button:last-child,.segmented-strong .button,.segmented-strong .button:first-child,.segmented-strong .button:last-child{border-radius:var(--f7-button-border-radius)}.ios .segmented-strong-ios .button+.button,.md .segmented-strong-md .button+.button,.segmented-strong .button+.button{margin-left:var(--f7-segmented-strong-between-buttons)}.ios .segmented-strong-ios .button.button-active,.ios .segmented-strong-ios .button.tab-link-active,.md .segmented-strong-md .button.button-active,.md .segmented-strong-md .button.tab-link-active,.segmented-strong .button.button-active,.segmented-strong .button.tab-link-active{--f7-button-hover-bg-color:transparent;--f7-button-bg-color:transparent;--f7-button-text-color:var(--f7-segmented-strong-button-active-text-color);--f7-button-font-weight:var(--f7-segmented-strong-button-active-font-weight)}.ios .segmented-strong-ios .segmented-highlight,.md .segmented-strong-md .segmented-highlight,.segmented-strong .segmented-highlight{--f7-segmented-highlight-num:1;--f7-segmented-highlight-active:0;--f7-segmented-highlight-padding:calc(var(--f7-segmented-strong-padding) * 2);--f7-segmented-highlight-between:var(--f7-segmented-strong-between-buttons);--f7-segmented-highlight-width:calc((100% - var(--f7-segmented-highlight-padding) - var(--f7-segmented-highlight-between) * (var(--f7-segmented-highlight-num) - 1)) / var(--f7-segmented-highlight-num));position:absolute;background-color:var(--f7-segmented-strong-button-active-bg-color);border-radius:var(--f7-button-border-radius);box-shadow:var(--f7-segmented-strong-button-active-box-shadow);left:var(--f7-segmented-strong-padding);top:var(--f7-segmented-strong-padding);height:calc(100% - var(--f7-segmented-strong-padding) * 2);width:var(--f7-segmented-highlight-width);z-index:0;transform:translateX(calc(var(--f7-segmented-highlight-active) * 100% + var(--f7-segmented-highlight-active) * var(--f7-segmented-highlight-between)));transition:.2s}.button:nth-child(2)~.segmented-highlight{--f7-segmented-highlight-num:2}.button:nth-child(3)~.segmented-highlight{--f7-segmented-highlight-num:3}.button:nth-child(4)~.segmented-highlight{--f7-segmented-highlight-num:4}.button:nth-child(5)~.segmented-highlight{--f7-segmented-highlight-num:5}.button:nth-child(6)~.segmented-highlight{--f7-segmented-highlight-num:6}.button:nth-child(7)~.segmented-highlight{--f7-segmented-highlight-num:7}.button:nth-child(8)~.segmented-highlight{--f7-segmented-highlight-num:8}.button:nth-child(9)~.segmented-highlight{--f7-segmented-highlight-num:9}.button:nth-child(10)~.segmented-highlight{--f7-segmented-highlight-num:10}.button-active:nth-child(2)~.segmented-highlight,.tab-link-active:nth-child(2)~.segmented-highlight{--f7-segmented-highlight-active:1}.button-active:nth-child(3)~.segmented-highlight,.tab-link-active:nth-child(3)~.segmented-highlight{--f7-segmented-highlight-active:2}.button-active:nth-child(4)~.segmented-highlight,.tab-link-active:nth-child(4)~.segmented-highlight{--f7-segmented-highlight-active:3}.button-active:nth-child(5)~.segmented-highlight,.tab-link-active:nth-child(5)~.segmented-highlight{--f7-segmented-highlight-active:4}.button-active:nth-child(6)~.segmented-highlight,.tab-link-active:nth-child(6)~.segmented-highlight{--f7-segmented-highlight-active:5}.button-active:nth-child(7)~.segmented-highlight,.tab-link-active:nth-child(7)~.segmented-highlight{--f7-segmented-highlight-active:6}.button-active:nth-child(8)~.segmented-highlight,.tab-link-active:nth-child(8)~.segmented-highlight{--f7-segmented-highlight-active:7}.button-active:nth-child(9)~.segmented-highlight,.tab-link-active:nth-child(9)~.segmented-highlight{--f7-segmented-highlight-active:8}.button-active:nth-child(10)~.segmented-highlight,.tab-link-active:nth-child(10)~.segmented-highlight{--f7-segmented-highlight-active:9}.ios .segmented-round-ios,.md .segmented-round-md,.segmented-round{border-radius:var(--f7-button-height)}.ios .segmented-round-ios .segmented-highlight,.md .segmented-round-md .segmented-highlight,.segmented-round .segmented-highlight{border-radius:var(--f7-button-height)}.subnavbar .segmented{width:100%}.button-preloader{position:relative;--f7-preloader-color:var(--f7-button-text-color, var(--f7-theme-color))}.button-preloader:not(.button-large){--f7-preloader-size:calc(var(--f7-button-height) - 6px)}.button-preloader.button-fill{--f7-preloader-color:#fff}.button-preloader>span:not(.preloader){transition:.2s;display:inline-flex;align-items:center;align-content:center;justify-content:center;transform:scale(1)}.button-preloader>.preloader{position:absolute;left:50%;top:50%;transition:.2s;transition-property:opacity;opacity:0;visibility:hidden;margin-left:calc(-1 * var(--f7-preloader-size)/ 2);margin-top:calc(-1 * var(--f7-preloader-size)/ 2)}.button-preloader.button-loading>span:not(.preloader){opacity:0;transform:scale(0)}.button-preloader.button-loading>.preloader{opacity:1;visibility:visible}.ios .button{transition-duration:.1s}.ios .button.active-state{background-color:var(--f7-button-pressed-bg-color,rgba(var(--f7-theme-color-rgb),.15))}.ios .button-fill,.ios .button-fill-ios{--f7-button-pressed-bg-color:var(--f7-button-fill-pressed-bg-color, var(--f7-theme-color-tint))}.ios .button-small,.ios .button-small-ios{transition-duration:.2s}.md .button{transition-duration:.3s;transform:translate3d(0,0,0)}.md .button-fill,.md .button-fill-md{--f7-button-pressed-bg-color:var(--f7-button-fill-pressed-bg-color, transparent)}:root{--f7-touch-ripple-black:rgba(0, 0, 0, 0.1);--f7-touch-ripple-white:rgba(255, 255, 255, 0.15);--f7-touch-ripple-color:var(--f7-touch-ripple-black)}.dark{--f7-touch-ripple-color:var(--f7-touch-ripple-white)}.actions-button,.button,.checkbox,.dialog-button,.fab a,.item-link,.link,.list-button,.radio,.ripple,.speed-dial-buttons a,.tab-link{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ripple-wave{left:0;top:0;position:absolute!important;border-radius:50%;pointer-events:none;z-index:-1;padding:0;margin:0;font-size:0;transform:translate3d(0px,0px,0) scale(0);background-color:var(--f7-touch-ripple-color);animation:touch-ripple-in .2s forwards}.ripple-wave.ripple-wave-inset{background-image:none;background-color:var(--f7-touch-ripple-color)}.ripple-wave.ripple-wave-out{transform:var(--f7-ripple-transform);animation:touch-ripple-out 250ms forwards!important}.actions-button .ripple-wave,.button .ripple-wave,.dialog-button .ripple-wave,.fab a .ripple-wave,.item-checkbox .ripple-wave,.item-link .ripple-wave,.item-radio .ripple-wave,.links-list a .ripple-wave,.list label.item-content .ripple-wave,.list-button .ripple-wave,.list.accordion-list .accordion-item-toggle .ripple-wave,.photo-browser .toolbar .link .ripple-wave,.ripple-blur .ripple-wave,.stepper-button .ripple-wave,.stepper-button-minus .ripple-wave,.stepper-button-plus .ripple-wave,.tab-link .ripple-wave,button .ripple-wave{animation:touch-ripple-in-blurred 250ms forwards;background-image:radial-gradient(closest-side circle at 50% 50%,var(--f7-touch-ripple-color) 50%,rgba(255,255,255,0));background-color:transparent}.checkbox .ripple-wave,.data-table .sortable-cell .ripple-wave,.radio .ripple-wave{z-index:0}[class*=ripple-color-]{--f7-touch-ripple-color:var(--f7-theme-color-ripple-color)}@keyframes touch-ripple-in-blurred{from{transform:translate3d(0px,0px,0) scale(.5)}to{transform:var(--f7-ripple-transform)}}@keyframes touch-ripple-in{from{transform:translate3d(0px,0px,0) scale(0)}to{transform:var(--f7-ripple-transform)}}@keyframes touch-ripple-out{from{opacity:1}to{opacity:0}}.f7-icons,.material-icons{width:1em;height:1em}i.icon{display:inline-block;vertical-align:middle;background-size:100% auto;background-position:center;background-repeat:no-repeat;font-style:normal;position:relative}.icon-back:after,.icon-forward:after,.icon-next:after,.icon-prev:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px}.icon[class*=color-]{color:var(--f7-theme-color)}.ios .icon-back,.ios .icon-forward,.ios .icon-next,.ios .icon-prev{width:12px;height:20px;line-height:20px}.ios .icon-back:after,.ios .icon-forward:after,.ios .icon-next:after,.ios .icon-prev:after{line-height:inherit}.ios .icon-next:after,.ios .icon-prev:after{font-size:16px}.ios .icon-back:after,.ios .icon-prev:after{content:'chevron_left_ios'}.ios .icon-forward:after,.ios .icon-next:after{content:'chevron_right_ios'}.md .icon-back,.md .icon-forward,.md .icon-next,.md .icon-prev{width:24px;height:24px}.md .icon-back:after,.md .icon-forward:after,.md .icon-next:after,.md .icon-prev:after{line-height:1.2}.md .icon-back:after{content:'arrow_left_md'}.md .icon-forward:after{content:'arrow_right_md'}.md .icon-next:after{content:'chevron_right_md'}.md .icon-prev:after{content:'chevron_left_md'}.custom-modal-backdrop{z-index:10500}.actions-backdrop,.custom-modal-backdrop,.dialog-backdrop,.fab-backdrop,.popover-backdrop,.popup-backdrop,.preloader-backdrop,.sheet-backdrop{position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.4);z-index:13000;visibility:hidden;opacity:0;transition-duration:.4s}.actions-backdrop.not-animated,.custom-modal-backdrop.not-animated,.dialog-backdrop.not-animated,.fab-backdrop.not-animated,.popover-backdrop.not-animated,.popup-backdrop.not-animated,.preloader-backdrop.not-animated,.sheet-backdrop.not-animated{transition-duration:0s}.actions-backdrop.backdrop-in,.custom-modal-backdrop.backdrop-in,.dialog-backdrop.backdrop-in,.fab-backdrop.backdrop-in,.popover-backdrop.backdrop-in,.popup-backdrop.backdrop-in,.preloader-backdrop.backdrop-in,.sheet-backdrop.backdrop-in{visibility:visible;opacity:1}:root{--f7-dialog-button-text-color:var(--f7-theme-color);--f7-dialog-button-text-align:center}.ios{--f7-dialog-width:270px;--f7-dialog-inner-padding:16px;--f7-dialog-border-radius:13px;--f7-dialog-text-align:center;--f7-dialog-font-size:14px;--f7-dialog-title-text-color:inherit;--f7-dialog-title-font-size:18px;--f7-dialog-title-font-weight:600;--f7-dialog-title-line-height:inherit;--f7-dialog-button-font-size:17px;--f7-dialog-button-height:44px;--f7-dialog-button-letter-spacing:0;--f7-dialog-button-font-weight:400;--f7-dialog-button-text-transform:none;--f7-dialog-button-strong-bg-color:transparent;--f7-dialog-button-strong-text-color:var(--f7-theme-color);--f7-dialog-button-strong-font-weight:500;--f7-dialog-input-border-radius:4px;--f7-dialog-input-font-size:14px;--f7-dialog-input-height:32px;--f7-dialog-input-border-width:1px;--f7-dialog-input-placeholder-color:#a9a9a9;--f7-dialog-preloader-size:34px;--f7-dialog-input-bg-color:#fff;--f7-dialog-bg-color:rgba(255, 255, 255, 0.95);--f7-dialog-bg-color-rgb:255,255,255;--f7-dialog-text-color:#000;--f7-dialog-button-pressed-bg-color:rgba(0, 0, 0, 0.1);--f7-dialog-button-strong-pressed-bg-color:rgba(0, 0, 0, 0.1);--f7-dialog-input-border-color:rgba(0, 0, 0, 0.3);--f7-dialog-border-divider-color:rgba(0, 0, 0, 0.2)}.ios .dark,.ios.dark{--f7-dialog-text-color:#fff;--f7-dialog-bg-color:rgba(45, 45, 45, 0.95);--f7-dialog-bg-color-rgb:45,45,45;--f7-dialog-button-pressed-bg-color:rgba(0, 0, 0, 0.2);--f7-dialog-button-strong-pressed-bg-color:rgba(0, 0, 0, 0.2);--f7-dialog-border-divider-color:rgba(255, 255, 255, 0.15);--f7-dialog-input-border-color:rgba(255, 255, 255, 0.15);--f7-dialog-input-bg-color:rgba(0, 0, 0, 0.5)}.md{--f7-dialog-width:280px;--f7-dialog-inner-padding:24px;--f7-dialog-border-radius:28px;--f7-dialog-text-align:left;--f7-dialog-font-size:14px;--f7-dialog-title-font-size:24px;--f7-dialog-title-font-weight:400;--f7-dialog-title-line-height:1.3;--f7-dialog-button-font-size:14px;--f7-dialog-button-height:40px;--f7-dialog-button-letter-spacing:normal;--f7-dialog-button-font-weight:500;--f7-dialog-button-text-transform:none;--f7-dialog-button-strong-font-weight:500;--f7-dialog-input-border-radius:0px;--f7-dialog-input-font-size:16px;--f7-dialog-input-height:36px;--f7-dialog-input-border-color:transparent;--f7-dialog-input-border-width:0px;--f7-dialog-preloader-size:32px;--f7-dialog-input-bg-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-dialog-button-pressed-bg-color:transparent;--f7-dialog-button-strong-bg-color:var(--f7-theme-color);--f7-dialog-button-strong-text-color:var(--f7-md-on-primary);--f7-dialog-button-strong-pressed-bg-color:transparent;--f7-dialog-bg-color:var(--f7-md-surface-3);--f7-dialog-input-placeholder-color:var(--f7-md-on-surface-variant);--f7-dialog-text-color:var(--f7-md-on-surface-variant);--f7-dialog-title-text-color:var(--f7-md-on-surface)}.dialog{position:absolute;z-index:13500;left:50%;margin-top:0;top:50%;overflow:hidden;opacity:0;transform:translate3d(0,-50%,0) scale(1.185);transition-property:transform,opacity;display:none;transition-duration:.4s;width:var(--f7-dialog-width);margin-left:calc(-1 * var(--f7-dialog-width)/ 2);border-radius:var(--f7-dialog-border-radius);text-align:var(--f7-dialog-text-align);color:var(--f7-dialog-text-color);font-size:var(--f7-dialog-font-size);background:var(--f7-dialog-bg-color);will-change:transform,opacity}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-modals .dialog{background-color:rgba(var(--f7-dialog-bg-color-rgb),.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}.dialog.modal-in{opacity:1;transform:translate3d(0,-50%,0) scale(1)}.dialog.modal-out{opacity:0;z-index:13499}.dialog.not-animated{transition-duration:0s}.dialog-inner{position:relative;padding:var(--f7-dialog-inner-padding)}.dialog-title{color:var(--f7-dialog-title-text-color);font-size:var(--f7-dialog-title-font-size);font-weight:var(--f7-dialog-title-font-weight);line-height:var(--f7-dialog-title-line-height)}.dialog-buttons{position:relative;display:flex}.dialog-buttons-vertical .dialog-buttons{display:block;height:auto!important}.dialog-button{box-sizing:border-box;overflow:hidden;position:relative;white-space:nowrap;text-overflow:ellipsis;color:var(--f7-dialog-button-text-color);font-size:var(--f7-dialog-button-font-size);height:var(--f7-dialog-button-height);line-height:var(--f7-dialog-button-height);letter-spacing:var(--f7-dialog-button-letter-spacing);text-align:var(--f7-dialog-button-text-align);font-weight:var(--f7-dialog-button-font-weight);text-transform:var(--f7-dialog-button-text-transform);display:block;cursor:pointer}.dialog-button.active-state{background-color:var(--f7-dialog-button-pressed-bg-color)}.dialog-button-strong{background-color:var(--f7-dialog-button-strong-bg-color);color:var(--f7-dialog-button-strong-text-color);font-weight:var(--f7-dialog-button-strong-font-weight)}.dialog-button-strong.active-state{background-color:var(--f7-dialog-button-strong-pressed-bg-color)}.dialog-no-buttons .dialog-buttons{display:none}.dialog-input-field{position:relative}input.dialog-input[type]{box-sizing:border-box;margin:0;margin-top:15px;border-radius:var(--f7-dialog-input-border-radius);-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;display:block;font-family:inherit;box-shadow:none;font-size:var(--f7-dialog-input-font-size);height:var(--f7-dialog-input-height);background-color:var(--f7-dialog-input-bg-color);border:var(--f7-dialog-input-border-width) solid var(--f7-dialog-input-border-color)}input.dialog-input[type]::-moz-placeholder{color:var(--f7-dialog-input-placeholder-color)}input.dialog-input[type]::placeholder{color:var(--f7-dialog-input-placeholder-color)}.dialog-input-double input.dialog-input{border-radius:var(--f7-dialog-input-border-radius) var(--f7-dialog-input-border-radius) 0 0}.dialog-input-double+.dialog-input-double input.dialog-input{border-radius:0 0 var(--f7-dialog-input-border-radius) var(--f7-dialog-input-border-radius)}.dialog-preloader .preloader{--f7-preloader-size:var(--f7-dialog-preloader-size)}html.with-modal-dialog .page-content{overflow:hidden;-webkit-overflow-scrolling:auto}.ios .dialog.modal-out{transform:translate3d(0,-50%,0) scale(1)}.ios .dialog-inner{border-radius:var(--f7-dialog-border-radius) var(--f7-dialog-border-radius) 0 0}.ios .dialog-inner:after{content:'';position:absolute;background-color:var(--f7-dialog-border-divider-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.ios .dialog-title+.dialog-text{margin-top:5px}.ios .dialog-buttons{height:44px;justify-content:center}.ios .dialog-button{width:100%;padding:0 5px;-webkit-box-flex:1;-ms-flex:1}.ios .dialog-button:after{content:'';position:absolute;background-color:var(--f7-dialog-border-divider-color);display:block;z-index:15;top:0;right:0;bottom:auto;left:auto;width:1px;height:100%;transform-origin:100% 50%;transform:scaleX(calc(1 / var(--f7-device-pixel-ratio)))}.ios .dialog-button:first-child{border-radius:0 0 0 var(--f7-dialog-border-radius)}.ios .dialog-button:last-child{border-radius:0 0 var(--f7-dialog-border-radius) 0}.ios .dialog-button:last-child:after{display:none!important}.ios .dialog-button:first-child:last-child{border-radius:0 0 var(--f7-dialog-border-radius) var(--f7-dialog-border-radius)}.ios .dialog-button[class*=color-]{--f7-dialog-button-text-color:var(--f7-theme-color)}.ios .dialog-buttons-vertical .dialog-buttons{height:auto}.ios .dialog-buttons-vertical .dialog-button{border-radius:0}.ios .dialog-buttons-vertical .dialog-button:after{content:'';position:absolute;background-color:var(--f7-dialog-border-divider-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.ios .dialog-buttons-vertical .dialog-button:last-child{border-radius:0 0 var(--f7-dialog-border-radius) var(--f7-dialog-border-radius)}.ios .dialog-buttons-vertical .dialog-button:last-child:after{display:none!important}.ios .dialog-no-buttons .dialog-inner{border-radius:var(--f7-dialog-border-radius)}.ios .dialog-no-buttons .dialog-inner:after{display:none!important}.ios .dialog-input-field{margin-top:15px}.ios .dialog-input{padding:0 5px}.ios .dialog-input+.dialog-input{margin-top:5px}.ios .dialog-input-double+.dialog-input-double{margin-top:0}.ios .dialog-input-double+.dialog-input-double .dialog-input{border-top:0;margin-top:0}.ios .dialog-preloader .dialog-text~.preloader,.ios .dialog-preloader .dialog-title~.preloader{margin-top:15px}.ios .dialog-progress .dialog-text~.progressbar,.ios .dialog-progress .dialog-text~.progressbar-infinite,.ios .dialog-progress .dialog-title~.progressbar,.ios .dialog-progress .dialog-title~.progressbar-infinite{margin-top:15px}.md .dialog.modal-out{transform:translate3d(0,-50%,0) scale(.815)}.md .dialog-title+.dialog-text{margin-top:20px}.md .dialog-text{line-height:1.5}.md .dialog-buttons{height:64px;padding:0px 24px 24px;overflow:hidden;box-sizing:border-box;justify-content:flex-end}.md .dialog-button{--f7-touch-ripple-color:rgba(var(--f7-theme-color-rgb), 0.25);border-radius:99px;min-width:64px;padding:0px 16px;border:none;transition-duration:.3s;transform:translate3d(0,0,0)}.md .dialog-button+.dialog-button{margin-left:8px}.md .dialog-button-strong{--f7-touch-ripple-color:var(--f7-touch-ripple-white)}.md .dialog-button[class*=color-]{--f7-dialog-button-text-color:var(--f7-theme-color)}.md .dialog-buttons-vertical .dialog-buttons{display:flex;flex-direction:column;align-items:flex-end}.md .dialog-buttons-vertical .dialog-button+.dialog-button{margin-top:8px;margin-left:0}.md .dialog-input{padding:0;transition-duration:.2s;position:relative}.md .dialog-input+.dialog-input{margin-top:16px}.md .dialog-preloader .dialog-inner,.md .dialog-preloader .dialog-title,.md .dialog-progress .dialog-inner,.md .dialog-progress .dialog-title{text-align:center}.md .dialog-preloader .dialog-text~.preloader,.md .dialog-preloader .dialog-title~.preloader{margin-top:20px}.md .dialog-progress .dialog-text~.progressbar,.md .dialog-progress .dialog-text~.progressbar-infinite,.md .dialog-progress .dialog-title~.progressbar,.md .dialog-progress .dialog-title~.progressbar-infinite{margin-top:16px}:root{--f7-popup-border-radius:0px;--f7-popup-tablet-width:630px;--f7-popup-tablet-height:630px;--f7-popup-push-offset:var(--f7-safe-area-top)}.ios{--f7-popup-tablet-border-radius:5px;--f7-popup-transition-duration:400ms;--f7-popup-transition-timing-function:initial;--f7-popup-push-border-radius:10px}.md{--f7-popup-tablet-border-radius:28px;--f7-popup-transition-duration:600ms;--f7-popup-transition-timing-function:cubic-bezier(0, 1, 0.2, 1);--f7-popup-push-border-radius:28px}.popup-backdrop{z-index:10500}.popup-backdrop-unique{z-index:11000}.popup{position:absolute;left:0;top:0px;width:100%;height:100%;display:none;box-sizing:border-box;transition-property:transform;transition-timing-function:var(--f7-popup-transition-timing-function);transform:translate3d(0,100vh,0);background:#fff;z-index:11000;overflow:hidden;border-radius:var(--f7-popup-border-radius)}.dark .popup,.popup.dark{background:#000}.popup.modal-in,.popup.modal-out{transition-duration:var(--f7-popup-transition-duration)}.popup.not-animated{transition-duration:0s}.popup.modal-in{display:block;transform:translate3d(0,0,0)}.popup.modal-out{transform:translate3d(0,100vh,0)}.popup.swipe-close-to-top.modal-out{transform:translate3d(0,-100vh,0)}@media (min-width:630px) and (min-height:630px){.popup:not(.popup-tablet-fullscreen){--f7-safe-area-top:0px;--f7-safe-area-bottom:0px;width:var(--f7-popup-tablet-width);height:var(--f7-popup-tablet-height);left:50%;top:50%;margin-left:calc(-1 * var(--f7-popup-tablet-width)/ 2);margin-top:calc(-1 * var(--f7-popup-tablet-height)/ 2);transform:translate3d(0,100vh,0);border-radius:var(--f7-popup-tablet-border-radius,var(--f7-popup-border-radius))}.popup:not(.popup-tablet-fullscreen).modal-in{transform:translate3d(0,0,0)}.popup:not(.popup-tablet-fullscreen).modal-out{transform:translate3d(0,100vh,0)}.popup:not(.popup-tablet-fullscreen).swipe-close-to-top.modal-out{transform:translate3d(0,-100vh,0)}.popup:not(.popup-tablet-fullscreen).popup-behind{transform:translate3d(0,0,0) scale(.9);pointer-events:none}.popup:not(.popup-tablet-fullscreen).popup-behind.modal-out{transform:translate3d(0,100vh,0) scale(.9)}html.with-modal-popup-push .popup-push:not(.popup-tablet-fullscreen){margin-top:0}}html.with-modal-popup .framework7-root>.panel .page-content,html.with-modal-popup .framework7-root>.view .page-content,html.with-modal-popup .framework7-root>.views .page-content{overflow:hidden;-webkit-overflow-scrolling:auto}html.with-modal-popup-push .popup-push,html.with-modal-popup-push-closing .popup-push{top:calc(var(--f7-popup-push-offset) + 10px);height:calc(100% - var(--f7-popup-push-offset) - 10px);border-radius:var(--f7-popup-push-border-radius) var(--f7-popup-push-border-radius) 0 0;--f7-safe-area-top:0px}html.with-modal-popup-push .popup-push .page,html.with-modal-popup-push .popup-push .view,html.with-modal-popup-push-closing .popup-push .page,html.with-modal-popup-push-closing .popup-push .view{--f7-safe-area-top:0px}html.with-modal-popup-push .framework7-root,html.with-modal-popup-push-closing .framework7-root{background:#000}html.with-modal-popup-push .framework7-root>.view,html.with-modal-popup-push .framework7-root>.views,html.with-modal-popup-push-closing .framework7-root>.view,html.with-modal-popup-push-closing .framework7-root>.views{transition-duration:var(--f7-popup-transition-duration);transition-timing-function:var(--f7-popup-transition-timing-function)}html.with-modal-popup-push .dark .framework7-root>.view:after,html.with-modal-popup-push .dark .framework7-root>.views:after,html.with-modal-popup-push .dark.framework7-root>.view:after,html.with-modal-popup-push .dark.framework7-root>.views:after,html.with-modal-popup-push .framework7-root>.view.dark:after,html.with-modal-popup-push .framework7-root>.views.dark:after,html.with-modal-popup-push-closing .dark .framework7-root>.view:after,html.with-modal-popup-push-closing .dark .framework7-root>.views:after,html.with-modal-popup-push-closing .dark.framework7-root>.view:after,html.with-modal-popup-push-closing .dark.framework7-root>.views:after,html.with-modal-popup-push-closing .framework7-root>.view.dark:after,html.with-modal-popup-push-closing .framework7-root>.views.dark:after,html.with-modal-popup-push-closing.dark .framework7-root>.view:after,html.with-modal-popup-push-closing.dark .framework7-root>.views:after,html.with-modal-popup-push.dark .framework7-root>.view:after,html.with-modal-popup-push.dark .framework7-root>.views:after{content:'';position:absolute;pointer-events:none;left:0;top:0;width:100%;height:100%;background:rgba(255,255,255,.1);z-index:13000;border-radius:var(--f7-popup-push-border-radius) var(--f7-popup-push-border-radius) 0 0;opacity:1;animation:popup-dark-push-overlay-fade-in var(--f7-popup-transition-duration) forwards}html.with-modal-popup-push .framework7-root>.view,html.with-modal-popup-push .framework7-root>.views{border-radius:var(--f7-popup-push-border-radius) var(--f7-popup-push-border-radius) 0 0;transform:translate3d(0,0,0px) scale(var(--f7-popup-push-scale,1))!important}html.with-modal-popup-push .popup:after{content:'';pointer-events:none;position:absolute;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,.4);z-index:13000;transition-duration:var(--f7-popup-transition-duration);transition-timing-function:var(--f7-popup-transition-timing-function);border-radius:var(--f7-popup-push-border-radius) var(--f7-popup-push-border-radius) 0 0;opacity:0}html.with-modal-popup-push .dark .popup:after,html.with-modal-popup-push .dark.popup:after,html.with-modal-popup-push.dark .popup:after{background:rgba(255,255,255,.05)}html.with-modal-popup-push .popup-behind{transform:translate3d(0,0px,0px) scale(var(--f7-popup-push-scale,1))}html.with-modal-popup-push .popup-behind.modal-out{transform:translate3d(0,100vh,0) scale(var(--f7-popup-push-scale,1))}html.with-modal-popup-push .popup-behind:not(.popup-push){border-radius:var(--f7-popup-push-border-radius) var(--f7-popup-push-border-radius) 0 0}html.with-modal-popup-push .popup-behind.popup-push{transform:translate3d(0,calc(0px - var(--f7-popup-push-offset) - 10px),0px) scale(var(--f7-popup-push-scale,1))}html.with-modal-popup-push .popup-behind.popup-push.modal-out{transform:translate3d(0,calc(0px - var(--f7-popup-push-offset) - 10px + 100vh),0px) scale(var(--f7-popup-push-scale,1))}html.with-modal-popup-push .popup-behind:after{opacity:1;pointer-events:auto}html.with-modal-popup-push-closing .dark .framework7-root>.view:after,html.with-modal-popup-push-closing .dark .framework7-root>.views:after,html.with-modal-popup-push-closing .dark.framework7-root>.view:after,html.with-modal-popup-push-closing .dark.framework7-root>.views:after,html.with-modal-popup-push-closing .framework7-root>.view.dark:after,html.with-modal-popup-push-closing .framework7-root>.views.dark:after,html.with-modal-popup-push-closing.dark .framework7-root>.view:after,html.with-modal-popup-push-closing.dark .framework7-root>.views:after{animation:popup-dark-push-overlay-fade-out var(--f7-popup-transition-duration) forwards;animation-timing-function:var(--f7-popup-transition-timing-function)}@keyframes popup-dark-push-overlay-fade-in{from{opacity:0}to{opacity:1}}@keyframes popup-dark-push-overlay-fade-out{from{opacity:1}to{opacity:0}}:root{--f7-login-screen-blocks-max-width:480px;--f7-login-screen-title-text-align:center;--f7-login-screen-title-text-color:inherit;--f7-login-screen-title-letter-spacing:0}.ios{--f7-login-screen-blocks-margin-vertical:25px;--f7-login-screen-transition-timing-function:initial;--f7-login-screen-transition-duration:400ms;--f7-login-screen-title-font-weight:600;--f7-login-screen-title-font-size:28px;--f7-login-screen-content-bg-color:#fff;--f7-login-screen-bg-color:#fff}.ios .dark,.ios.dark{--f7-login-screen-bg-color:#000;--f7-login-screen-content-bg-color:#000}.md{--f7-login-screen-transition-duration:600ms;--f7-login-screen-transition-timing-function:cubic-bezier(0, 1, 0.2, 1);--f7-login-screen-blocks-margin-vertical:24px;--f7-login-screen-title-font-weight:400;--f7-login-screen-title-font-size:28px}.md,.md .dark,.md [class*=color-]{--f7-login-screen-content-bg-color:var(--f7-md-surface);--f7-login-screen-bg-color:var(--f7-md-surface)}.login-screen{position:absolute;left:0;top:0;width:100%;height:100%;display:none;box-sizing:border-box;transition-property:transform;transform:translate3d(0,100vh,0);background:var(--f7-login-screen-bg-color);transition-timing-function:var(--f7-login-screen-transition-timing-function);z-index:11000}.login-screen.modal-in,.login-screen.modal-out{transition-duration:var(--f7-login-screen-transition-duration)}.login-screen.not-animated{transition-duration:0s}.login-screen.modal-in{display:block;transform:translate3d(0,0,0)}.login-screen.modal-out{transform:translate3d(0,100%,0)}.login-screen .page,.login-screen-content,.login-screen-page{background:var(--f7-login-screen-content-bg-color)}.login-screen-content .block,.login-screen-content .list,.login-screen-content .login-screen-title,.login-screen-page .block,.login-screen-page .list,.login-screen-page .login-screen-title{margin:var(--f7-login-screen-blocks-margin-vertical) auto}.login-screen-content .block,.login-screen-content .block-footer,.login-screen-content .block-header,.login-screen-content .list,.login-screen-content .login-screen-title,.login-screen-page .block,.login-screen-page .block-footer,.login-screen-page .block-header,.login-screen-page .list,.login-screen-page .login-screen-title{max-width:var(--f7-login-screen-blocks-max-width)}.login-screen-content .list ul,.login-screen-page .list ul{background:0 0}.login-screen-content .list ul:after,.login-screen-content .list ul:before,.login-screen-page .list ul:after,.login-screen-page .list ul:before{display:none!important}.login-screen-content .block-footer,.login-screen-content .block-header,.login-screen-page .block-footer,.login-screen-page .block-header{text-align:center;margin-left:auto;margin-right:auto}.login-screen-title{text-align:var(--f7-login-screen-title-text-align);font-size:var(--f7-login-screen-title-font-size);font-weight:var(--f7-login-screen-title-font-weight);color:var(--f7-login-screen-title-text-color);letter-spacing:var(--f7-login-screen-title-letter-spacing)}.login-screen-page,.login-screen>.page,.login-screen>.view>.page{display:flex;flex-direction:column}.login-screen-page .login-screen-content,.login-screen-page .page-content,.login-screen>.page .login-screen-content,.login-screen>.page .page-content,.login-screen>.view>.page .login-screen-content,.login-screen>.view>.page .page-content{margin-top:auto;margin-bottom:auto;height:auto;max-height:100%;width:100%}.dark .login-screen-content .block-strong,.dark .login-screen-content .list ul,.dark .login-screen-page .block-strong,.dark .login-screen-page .list ul,.dark.login-screen-page .block-strong,.dark.login-screen-page .list ul{background-color:transparent}:root{--f7-popover-width:260px}.ios{--f7-popover-border-radius:13px;--f7-popover-actions-icon-size:28px;--f7-popover-transition-timing-function:initial;--f7-popover-bg-color:rgba(255, 255, 255, 0.95);--f7-popover-actions-label-text-color:rgba(0, 0, 0, 0.45)}.ios .dark,.ios.dark{--f7-popover-bg-color:rgba(30, 30, 30, 0.95);--f7-popover-actions-label-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-popover-transition-timing-function:cubic-bezier(0, 0.8, 0.34, 1);--f7-popover-border-radius:28px;--f7-popover-actions-icon-size:24px}.md,.md .dark,.md [class*=color-]{--f7-popover-bg-color:var(--f7-md-surface-3);--f7-popover-actions-label-text-color:var(--f7-md-on-surface-variant)}.popover-backdrop-unique{z-index:13500}.popover{width:var(--f7-popover-width);z-index:13500;margin:0;top:0;opacity:0;left:0;position:absolute;display:none;transition-duration:.3s;background-color:var(--f7-popover-bg-color);border-radius:var(--f7-popover-border-radius);will-change:transform,opacity;--f7-safe-area-top:0px;--f7-safe-area-left:0px;--f7-safe-area-right:0px;--f7-safe-area-bottom:0px}.popover .list{margin:0}.popover .list ul{background:0 0}.popover .list:first-child ul:before{display:none!important}.popover .list:last-child ul:after{display:none!important}.popover .list:first-child ul{border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0}.popover .list:first-child li:first-child,.popover .list:first-child li:first-child a,.popover .list:first-child li:first-child>label{border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0}.popover .list:last-child ul{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.popover .list:last-child li:last-child,.popover .list:last-child li:last-child a,.popover .list:last-child li:last-child>label{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.popover .list:first-child:last-child li:first-child:last-child,.popover .list:first-child:last-child li:first-child:last-child a,.popover .list:first-child:last-child li:first-child:last-child>label,.popover .list:first-child:last-child ul{border-radius:var(--f7-popover-border-radius)}.popover .list+.list{margin-top:var(--f7-list-margin-vertical)}.popover.modal-in{opacity:1}.popover.not-animated{transition-duration:0s}.popover,.popover-backdrop{transition-timing-function:var(--f7-popover-transition-timing-function)}.popover-inner{overflow:auto;-webkit-overflow-scrolling:touch}.popover-from-actions .item-link i.icon{width:var(--f7-popover-actions-icon-size);height:var(--f7-popover-actions-icon-size);font-size:var(--f7-popover-actions-icon-size)}.ios .popover-from-actions-strong{font-weight:600}.md .popover-from-actions-strong{font-weight:500}.popover-from-actions-label{line-height:1.3;position:relative;display:flex;align-items:center;padding:var(--f7-actions-label-padding);color:var(--f7-popover-actions-label-text-color);font-size:var(--f7-actions-label-font-size);justify-content:var(--f7-actions-label-justify-content)}.popover-from-actions-label:after{content:'';position:absolute;background-color:var(--f7-list-item-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.popover-from-actions-label:last-child:after{display:none!important}.md .popover-from-actions-label{justify-content:center}.popover-arrow{width:26px;height:26px;position:absolute;left:-26px;top:0;z-index:100;overflow:hidden}.popover-arrow:after{content:'';background:var(--f7-popover-bg-color);width:26px;height:26px;position:absolute;left:0;top:0;border-radius:3px;transform:rotate(45deg)}.popover-arrow.on-left{left:-26px}.popover-arrow.on-left:after{left:19px;top:0}.popover-arrow.on-right{left:100%}.popover-arrow.on-right:after{left:-19px;top:0}.popover-arrow.on-top{left:0;top:-26px}.popover-arrow.on-top:after{left:0;top:19px}.popover-arrow.on-bottom{left:0;top:100%}.popover-arrow.on-bottom:after{left:0;top:-19px}.ios .popover{transform:none;transition-property:opacity}.md .popover{transform:scale(.85,.6);transition-property:opacity,transform}.md .popover.modal-in{opacity:1;transform:scale(1)}.md .popover.modal-out{opacity:0;transform:scale(1)}.md .popover-on-top{transform-origin:center bottom}.md .popover-on-top.popover-on-right{transform-origin:left bottom}.md .popover-on-top.popover-on-left{transform-origin:right bottom}.md .popover-on-middle{transform-origin:center center}.md .popover-on-middle.popover-on-right{transform-origin:left center}.md .popover-on-middle.popover-on-left{transform-origin:right center}.md .popover-on-bottom{transform-origin:center top}.md .popover-on-bottom.popover-on-right{transform-origin:left top}.md .popover-on-bottom.popover-on-left{transform-origin:right top}:root{--f7-actions-grid-button-font-size:12px;--f7-actions-grid-button-icon-size:48px}.ios{--f7-actions-transition-timing-function:initial;--f7-actions-border-radius:13px;--f7-actions-grid-button-text-color:#757575;--f7-actions-button-padding:0px;--f7-actions-button-text-align:center;--f7-actions-button-height:57px;--f7-actions-button-height-landscape:44px;--f7-actions-button-font-size:20px;--f7-actions-button-icon-size:28px;--f7-actions-button-justify-content:center;--f7-actions-label-padding:8px 10px;--f7-actions-label-font-weight:400;--f7-actions-label-font-size:13px;--f7-actions-label-justify-content:center;--f7-actions-group-border-color:transparent;--f7-actions-group-margin:8px;--f7-actions-bg-color:rgba(255, 255, 255, 0.95);--f7-actions-bg-color-rgb:255,255,255;--f7-actions-button-border-color:rgba(0, 0, 0, 0.2);--f7-actions-button-pressed-bg-color:rgba(230, 230, 230, 0.9);--f7-actions-button-pressed-bg-color-rgb:230,230,230;--f7-actions-label-text-color:#8a8a8a}.ios .dark,.ios.dark{--f7-actions-bg-color:rgba(45, 45, 45, 0.95);--f7-actions-bg-color-rgb:45,45,45;--f7-actions-button-border-color:rgba(255, 255, 255, 0.15);--f7-actions-button-pressed-bg-color:rgba(50, 50, 50, 0.9);--f7-actions-button-pressed-bg-color-rgb:50,50,50;--f7-actions-label-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-actions-transition-timing-function:cubic-bezier(0, 0.8, 0.34, 1);--f7-actions-border-radius:16px;--f7-actions-button-border-color:transparent;--f7-actions-button-padding:0 16px;--f7-actions-button-text-align:left;--f7-actions-button-height:48px;--f7-actions-button-height-landscape:48px;--f7-actions-button-font-size:16px;--f7-actions-button-icon-size:24px;--f7-actions-button-justify-content:space-between;--f7-actions-label-padding:12px 16px;--f7-actions-label-font-size:14px;--f7-actions-label-font-weight:500;--f7-actions-label-justify-content:flex-start;--f7-actions-group-margin:0px;--f7-actions-button-pressed-bg-color:#e5e5e5}.md .dark,.md.dark{--f7-actions-button-pressed-bg-color:#2e2e2e}.md,.md .dark,.md [class*=color-]{--f7-actions-button-text-color:var(--f7-md-on-surface);--f7-actions-bg-color:var(--f7-md-surface-3);--f7-actions-group-border-color:var(--f7-md-outline);--f7-actions-label-text-color:var(--f7-theme-color);--f7-actions-grid-button-text-color:var(--f7-md-on-surface)}.actions-backdrop-unique{z-index:13500}.actions-modal{position:absolute;left:0;bottom:0;z-index:13500;width:100%;transform:translate3d(0,100%,0);display:none;max-height:100%;overflow:auto;-webkit-overflow-scrolling:touch;transition-property:transform;will-change:transform}.actions-modal.modal-in,.actions-modal.modal-out{transition-duration:.3s}.actions-modal.not-animated{transition-duration:0s}.ios .actions-modal.modal-in{transform:translate3d(0,calc(-1 * var(--f7-safe-area-bottom)),0)}.md .actions-modal.modal-in{transform:translate3d(0,0,0)}.actions-modal.modal-out{z-index:13499;transform:translate3d(0,100%,0)}@media (min-width:496px){.actions-modal{width:480px;left:50%;margin-left:-240px}}@media (orientation:landscape){.actions-modal{--f7-actions-button-height:var(--f7-actions-button-height-landscape)}}.actions-backdrop,.actions-modal{transition-timing-function:var(--f7-actions-transition-timing-function)}.actions-group{overflow:hidden;position:relative;margin:var(--f7-actions-group-margin);transform:translate3d(0,0,0)}.actions-group:after{content:'';position:absolute;background-color:var(--f7-actions-group-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.actions-group:last-child:after{display:none!important}.actions-button,.actions-label{width:100%;font-weight:400;margin:0;box-sizing:border-box;display:block;position:relative;overflow:hidden;text-align:var(--f7-actions-button-text-align)}.actions-button:after,.actions-label:after{content:'';position:absolute;background-color:var(--f7-actions-button-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.actions-button a,.actions-label a{text-decoration:none;color:inherit;display:block}.actions-button{cursor:pointer;display:flex;color:var(--f7-actions-button-text-color,var(--f7-theme-color));font-size:var(--f7-actions-button-font-size);height:var(--f7-actions-button-height);line-height:var(--f7-actions-button-height);padding:var(--f7-actions-button-padding);justify-content:var(--f7-actions-button-justify-content);z-index:10}.actions-button.active-state{background-color:var(--f7-actions-button-pressed-bg-color)!important}.actions-button[class*=color-]{color:var(--f7-theme-color)}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-modals .actions-button.active-state{background-color:rgba(var(--f7-actions-button-pressed-bg-color-rgb),.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}.actions-button-media{flex-shrink:0;display:flex;align-items:center}.actions-button-media i.icon{width:var(--f7-actions-button-icon-size);height:var(--f7-actions-button-icon-size);font-size:var(--f7-actions-button-icon-size)}.actions-button a,.actions-button-text{position:relative;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.actions-button-text{width:100%;flex-shrink:1;text-align:var(--f7-actions-button-text-align)}.actions-label{line-height:1.3;display:flex;align-items:center;font-size:var(--f7-actions-label-font-size);font-weight:var(--f7-actions-label-font-weight);color:var(--f7-actions-label-text-color);padding:var(--f7-actions-label-padding);justify-content:var(--f7-actions-label-justify-content);min-height:var(--f7-actions-label-min-height,var(--f7-actions-button-height))}.actions-label[class*=' color-']{--f7-actions-label-text-color:var(--f7-theme-color)}.actions-grid .actions-group{display:flex;flex-wrap:wrap;justify-content:flex-start;margin-top:0}.actions-grid .actions-group:not(:last-child){margin-bottom:0}.actions-grid .actions-button,.actions-grid .actions-label{background:0 0}.actions-grid .actions-button{width:33.33333333%;display:block;color:var(--f7-actions-grid-button-text-color);height:auto;line-height:1;padding:16px}.actions-grid .actions-button:after{display:none!important}.actions-grid .actions-button-media{margin-left:auto!important;margin-right:auto!important;width:var(--f7-actions-grid-button-icon-size);height:var(--f7-actions-grid-button-icon-size)}.actions-grid .actions-button-media i.icon{width:var(--f7-actions-grid-button-icon-size);height:var(--f7-actions-grid-button-icon-size);font-size:var(--f7-actions-grid-button-icon-size)}.actions-grid .actions-button-text{margin-left:0!important;text-align:center!important;margin-top:8px;line-height:1.33em;height:1.33em;font-size:var(--f7-actions-grid-button-font-size)}.ios .actions-group{border-radius:var(--f7-actions-border-radius)}.ios .actions-button,.ios .actions-label{background:var(--f7-actions-bg-color)}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-modals .ios .actions-button,.ios-translucent-modals .ios .actions-label{background-color:rgba(var(--f7-actions-bg-color-rgb),.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}.ios .actions-button:first-child,.ios .actions-label:first-child{border-radius:var(--f7-actions-border-radius) var(--f7-actions-border-radius) 0 0}.ios .actions-button:last-child,.ios .actions-label:last-child{border-radius:0 0 var(--f7-actions-border-radius) var(--f7-actions-border-radius)}.ios .actions-button:last-child:after,.ios .actions-label:last-child:after{display:none!important}.ios .actions-button:first-child:last-child,.ios .actions-label:first-child:last-child{border-radius:var(--f7-actions-border-radius)}.ios .actions-button b,.ios .actions-button.actions-button-strong,.ios .actions-label b,.ios .actions-label.actions-button-strong{font-weight:600}.ios .actions-grid .actions-group{border-radius:0;background:var(--f7-actions-bg-color)}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-modals .ios .actions-grid .actions-group{background-color:rgba(var(--f7-actions-bg-color-rgb),.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}.ios .actions-grid .actions-group:first-child{border-radius:var(--f7-actions-border-radius) var(--f7-actions-border-radius) 0 0}.ios .actions-grid .actions-group:last-child{border-radius:0 0 var(--f7-actions-border-radius) var(--f7-actions-border-radius)}.ios .actions-grid .actions-group:first-child:last-child{border-radius:var(--f7-actions-border-radius)}.ios .actions-grid .actions-button,.ios .actions-grid .actions-label{border-radius:0!important}.ios .actions-button-media{margin-left:16px}.ios .actions-button-media+.actions-button-text{text-align:left;margin-left:16px}.md .actions-modal{background-color:var(--f7-actions-bg-color);border-radius:var(--f7-actions-border-radius) var(--f7-actions-border-radius) 0 0;padding-bottom:var(--f7-safe-area-bottom)}.md .actions-button{transition-duration:.3s}.md .actions-button b,.md .actions-button.actions-button-strong,.md .actions-label b,.md .actions-label.actions-button-strong{font-weight:500}.md .actions-button-media{min-width:40px}.md .actions-button-media+.actions-button-text{margin-left:16px}:root{--f7-sheet-height:260px;--f7-sheet-push-offset:var(--f7-safe-area-top)}.ios{--f7-sheet-border-radius:0px;--f7-sheet-border-color:var(--f7-bars-border-color);--f7-sheet-transition-timing-function:initial;--f7-sheet-push-border-radius:10px;--f7-sheet-transition-duration:300ms;--f7-sheet-bg-color:#fff}.ios .dark,.ios.dark{--f7-sheet-bg-color:#202020}.md{--f7-sheet-border-radius:16px;--f7-sheet-push-border-radius:16px;--f7-sheet-border-color:transparent;--f7-sheet-transition-timing-function:cubic-bezier(0, 0.8, 0.34, 1);--f7-sheet-transition-duration:400ms}.md,.md .dark,.md [class*=color-]{--f7-sheet-bg-color:var(--f7-md-surface)}.sheet-backdrop{z-index:11000}.sheet-backdrop-unique{z-index:12500}.sheet-modal{overflow:hidden;position:absolute;left:0;bottom:0;width:100%;height:var(--f7-sheet-height);display:none;box-sizing:border-box;transition-property:transform;transform:translate3d(0,100%,0);background:var(--f7-sheet-bg-color);z-index:12500;will-change:transform,opacity}.sheet-modal.modal-in,.sheet-modal.modal-out{transition-duration:var(--f7-sheet-transition-duration)}.sheet-modal.not-animated{transition-duration:0s}.sheet-modal.modal-in{display:block;transform:translate3d(0,0,0)}.sheet-modal.modal-in-breakpoint,.sheet-modal.modal-in-swipe-step{display:block;transform:translate3d(0,var(--f7-sheet-breakpoint,var(--f7-sheet-swipe-step,0)),0)}.sheet-modal.modal-out{transform:translate3d(0,100%,0)}.sheet-modal .sheet-modal-inner{height:100%;position:relative;overflow:hidden}.sheet-modal .toolbar{--f7-safe-area-bottom:0px;position:relative;width:100%}.sheet-modal .toolbar:after,.sheet-modal .toolbar:before{display:none}.sheet-modal .toolbar+.sheet-modal-inner{height:calc(100% - var(--f7-toolbar-height))}.sheet-modal .toolbar+.sheet-modal-inner .page-content{--f7-page-toolbar-top-offset:0px;--f7-page-toolbar-bottom-offset:0px}.sheet-backdrop,.sheet-modal{transition-timing-function:var(--f7-sheet-transition-timing-function)}.sheet-modal-top{border-radius:0 0 var(--f7-sheet-border-radius) var(--f7-sheet-border-radius)}.sheet-modal-top:after{content:'';position:absolute;background-color:var(--f7-sheet-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.sheet-modal-top:after{z-index:700;backface-visibility:hidden;transform-style:preserve-3d}.sheet-modal-bottom,.sheet-modal:not(.sheet-modal-top){--f7-safe-area-top:0px;border-radius:var(--f7-sheet-border-radius) var(--f7-sheet-border-radius) 0 0}.sheet-modal-bottom:before,.sheet-modal:not(.sheet-modal-top):before{content:'';position:absolute;background-color:var(--f7-sheet-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.sheet-modal-bottom:before,.sheet-modal:not(.sheet-modal-top):before{z-index:700;backface-visibility:hidden;transform-style:preserve-3d}.sheet-modal-top{--f7-safe-area-bottom:0px;bottom:auto;top:0;transform:translate3d(0,-100%,0)}.sheet-modal-top.modal-out{transform:translate3d(0,-100%,0)}.sheet-modal-top .toolbar-bottom{position:absolute}.sheet-modal-top .page-content{padding-top:var(--f7-safe-area-top)}html.with-modal-sheet-push .sheet-modal-push,html.with-modal-sheet-push-closing .sheet-modal-push{--f7-sheet-border-color:transparent;border-radius:var(--f7-sheet-push-border-radius) var(--f7-sheet-push-border-radius) 0 0;overflow:hidden}html.with-modal-sheet-push .sheet-modal-push .page,html.with-modal-sheet-push .sheet-modal-push .view,html.with-modal-sheet-push-closing .sheet-modal-push .page,html.with-modal-sheet-push-closing .sheet-modal-push .view{--f7-safe-area-top:0px}html.with-modal-sheet-push .sheet-modal-push.sheet-modal-top,html.with-modal-sheet-push-closing .sheet-modal-push.sheet-modal-top{border-radius:0 0 var(--f7-sheet-push-border-radius) var(--f7-sheet-push-border-radius)}html.with-modal-sheet-push .framework7-root,html.with-modal-sheet-push-closing .framework7-root{background:#000}html.with-modal-sheet-push .framework7-root>.view,html.with-modal-sheet-push .framework7-root>.views,html.with-modal-sheet-push-closing .framework7-root>.view,html.with-modal-sheet-push-closing .framework7-root>.views{transition-duration:var(--f7-sheet-transition-duration);transition-timing-function:var(--f7-sheet-transition-timing-function)}html.with-modal-sheet-push .dark .framework7-root>.view:after,html.with-modal-sheet-push .dark .framework7-root>.views:after,html.with-modal-sheet-push .dark.framework7-root>.view:after,html.with-modal-sheet-push .dark.framework7-root>.views:after,html.with-modal-sheet-push .framework7-root>.view.dark:after,html.with-modal-sheet-push .framework7-root>.views.dark:after,html.with-modal-sheet-push-closing .dark .framework7-root>.view:after,html.with-modal-sheet-push-closing .dark .framework7-root>.views:after,html.with-modal-sheet-push-closing .dark.framework7-root>.view:after,html.with-modal-sheet-push-closing .dark.framework7-root>.views:after,html.with-modal-sheet-push-closing .framework7-root>.view.dark:after,html.with-modal-sheet-push-closing .framework7-root>.views.dark:after,html.with-modal-sheet-push-closing.dark .framework7-root>.view:after,html.with-modal-sheet-push-closing.dark .framework7-root>.views:after,html.with-modal-sheet-push.dark .framework7-root>.view:after,html.with-modal-sheet-push.dark .framework7-root>.views:after{content:'';position:absolute;pointer-events:none;left:0;top:0;width:100%;height:100%;background:rgba(255,255,255,.1);z-index:13000;opacity:1;transition-duration:var(--f7-sheet-transition-duration);transition-timing-function:var(--f7-sheet-transition-timing-function);animation:sheet-dark-push-overlay-fade-in var(--f7-sheet-transition-duration);animation-timing-function:var(--f7-sheet-transition-timing-function)}html.with-modal-sheet-push .framework7-root>.view,html.with-modal-sheet-push .framework7-root>.views{border-radius:var(--f7-sheet-push-border-radius);transform:translate3d(0,0,0px) scale(var(--f7-sheet-push-scale,1))!important}html.with-modal-sheet-push-closing .dark .framework7-root>.view:after,html.with-modal-sheet-push-closing .dark .framework7-root>.views:after,html.with-modal-sheet-push-closing .dark.framework7-root>.view:after,html.with-modal-sheet-push-closing .dark.framework7-root>.views:after,html.with-modal-sheet-push-closing .framework7-root>.view.dark:after,html.with-modal-sheet-push-closing .framework7-root>.views.dark:after,html.with-modal-sheet-push-closing.dark .framework7-root>.view:after,html.with-modal-sheet-push-closing.dark .framework7-root>.views:after{opacity:0;animation:none}@keyframes sheet-dark-push-overlay-fade-in{from{opacity:0}to{opacity:1}}.md .sheet-modal .toolbar a.link:not(.tab-link){flex-shrink:0}:root{--f7-toast-font-size:14px;--f7-toast-icon-size:48px;--f7-toast-max-width:568px}.ios{--f7-toast-text-color:#fff;--f7-toast-bg-color:rgba(0, 0, 0, 0.75);--f7-toast-bg-color-rgb:0,0,0;--f7-toast-padding-horizontal:16px;--f7-toast-padding-vertical:12px;--f7-toast-border-radius:8px;--f7-toast-button-min-width:64px}.md{--f7-toast-padding-horizontal:24px;--f7-toast-padding-vertical:14px;--f7-toast-border-radius:16px;--f7-toast-button-min-width:64px}.md,.md .dark,.md [class*=color-]{--f7-toast-text-color:var(--f7-md-on-surface);--f7-toast-bg-color:var(--f7-md-surface-5)}.toast{transition-property:transform,opacity;position:absolute;max-width:var(--f7-toast-max-width);z-index:20000;color:var(--f7-toast-text-color);font-size:var(--f7-toast-font-size);box-sizing:border-box;background-color:var(--f7-toast-bg-color);opacity:0}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-modals .toast{background-color:rgba(var(--f7-toast-bg-color-rgb),.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}.toast.modal-in{opacity:1}.toast .toast-content{display:flex;justify-content:space-between;align-items:center;box-sizing:border-box;padding:var(--f7-toast-padding-vertical) var(--f7-toast-padding-horizontal)}.toast .toast-text{line-height:20px;flex-shrink:1;min-width:0}.toast .toast-button{flex-shrink:0;min-width:var(--f7-toast-button-min-width);margin-top:-8px;margin-bottom:-8px}.toast.toast-with-icon .toast-content{display:block;text-align:center}.toast.toast-with-icon .toast-text{text-align:center}.toast.toast-with-icon .toast-icon .f7-icons,.toast.toast-with-icon .toast-icon .material-icons{font-size:var(--f7-toast-icon-size)}.toast.toast-center{top:50%}.toast.toast-top{margin-top:var(--f7-safe-area-top)}.ios .toast{transition-duration:.3s;width:100%;left:0}.ios .toast.toast-top{top:0;transform:translate3d(0,-100%,0)}.ios .toast.toast-top.modal-in{transform:translate3d(0,0%,0)}.ios .toast.toast-center{width:auto;left:50%;border-radius:var(--f7-toast-border-radius);transform:translate3d(-50%,-50%,0)}.ios .toast.toast-center.modal-in{transform:translate3d(-50%,-50%,0)}.ios .toast.toast-bottom{bottom:0;transform:translate3d(0,100%,0)}.ios .toast.toast-bottom.modal-in{transform:translate3d(0,0%,0)}@media (max-width:568px){.ios .toast.toast-top{margin-top:0}.ios .toast.toast-top .toast-content{padding-top:calc(var(--f7-toast-padding-vertical) + var(--f7-safe-area-top))}.ios .toast.toast-bottom .toast-content{padding-bottom:calc(var(--f7-toast-padding-vertical) + var(--f7-safe-area-bottom))}}@media (min-width:569px){.ios .toast{left:50%;margin-left:calc(-1 * var(--f7-toast-max-width)/ 2);border-radius:var(--f7-toast-border-radius)}.ios .toast.toast-top{top:16px}.ios .toast.toast-center{margin-left:0}.ios .toast.toast-bottom{margin-bottom:calc(16px + var(--f7-safe-area-bottom))}}@media (min-width:1024px){.ios .toast{margin-left:0;width:auto}.ios .toast.toast-horizontal-left{left:16px}.ios .toast.toast-horizontal-right{left:auto;right:16px}.ios .toast.toast-horizontal-center{left:50%;width:var(--f7-toast-max-width);margin-left:calc(-1 * var(--f7-toast-max-width)/ 2)}}.ios .toast-button{margin-left:16px;margin-right:calc(-1 * var(--f7-button-padding-horizontal))}.md .toast{transition-duration:.2s;border-radius:var(--f7-toast-border-radius);width:calc(100% - 16px);transform:scale(.9);left:8px}.md .toast.modal-in{transform:scale(1)}.md .toast.modal-out{transform:scale(1)}.md .toast.toast-top{top:8px}.md .toast.toast-center{left:50%;width:auto;transform:scale(.9) translate3d(-55%,-55%,0)}.md .toast.toast-center.modal-in{transform:scale(1) translate3d(-50%,-50%,0)}.md .toast.toast-center.modal-out{transform:scale(1) translate3d(-50%,-50%,0)}.md .toast.toast-bottom{bottom:calc(8px + var(--f7-safe-area-bottom))}@media (min-width:584px){.md .toast{left:50%;margin-left:calc(-1 * var(--f7-toast-max-width)/ 2)}.md .toast.toast-center{margin-left:0}}@media (min-width:1024px){.md .toast{margin-left:0;width:auto}.md .toast.toast-horizontal-left{left:24px}.md .toast.toast-horizontal-right{left:auto;right:24px}.md .toast.toast-horizontal-center{left:50%;width:var(--f7-toast-max-width);margin-left:calc(-1 * var(--f7-toast-max-width)/ 2)}.md .toast.toast-bottom{bottom:calc(24px + var(--f7-safe-area-bottom))}.md .toast.toast-top{top:24px}}.md .toast-button{margin-left:16px;margin-right:-8px}:root{--f7-preloader-modal-padding:8px;--f7-preloader-modal-bg-color:rgba(0, 0, 0, 0.8)}.ios{--f7-preloader-color:#6c6c6c;--f7-preloader-size:20px;--f7-preloader-modal-preloader-size:34px;--f7-preloader-modal-border-radius:5px}.md{--f7-preloader-color:#757575;--f7-preloader-size:32px;--f7-preloader-modal-preloader-size:32px;--f7-preloader-modal-border-radius:4px}.preloader{display:inline-block;vertical-align:middle;width:var(--f7-preloader-size);height:var(--f7-preloader-size);font-size:0;position:relative}.preloader .preloader-inner{width:100%;height:100%;display:block;position:relative}.preloader-backdrop{visibility:visible;opacity:0;background:0 0;z-index:14000}.preloader-modal{position:absolute;left:50%;top:50%;padding:var(--f7-preloader-modal-padding);background:var(--f7-preloader-modal-bg-color);z-index:14500;transform:translateX(-50%) translateY(-50%);border-radius:var(--f7-preloader-modal-border-radius)}.preloader-modal .preloader{--f7-preloader-size:var(--f7-preloader-modal-preloader-size);display:block!important}.with-modal-preloader .page-content,.with-modal-preloader.page-content,html.with-modal-preloader .page-content{overflow:hidden;-webkit-overflow-scrolling:auto}.preloader[class*=color-]{--f7-preloader-color:var(--f7-theme-color)}.preloader.color-white{--f7-preloader-color:#fff}.preloader.color-black{--f7-preloader-color:#000}.ios .preloader{color:var(--f7-preloader-color)}.ios .preloader-inner{animation:ios-preloader-spin 1s steps(8,end) infinite}.ios .preloader-inner-line{display:block;width:11.6%;height:33.33%;border-radius:100px;background:currentColor;position:absolute;left:50%;top:50%;transform-origin:center 150%}.ios .preloader-multi-color .preloader-inner-line,.ios .preloader.color-multi .preloader-inner-line{animation:ios-preloader-multicolor 3s linear infinite}.ios .preloader-inner-line:first-child{transform:translate(-50%,-150%) rotate(0deg);opacity:.27}.ios .preloader-inner-line:nth-child(2){transform:translate(-50%,-150%) rotate(45deg);opacity:.35285714}.ios .preloader-inner-line:nth-child(3){transform:translate(-50%,-150%) rotate(90deg);opacity:.43571429}.ios .preloader-inner-line:nth-child(4){transform:translate(-50%,-150%) rotate(135deg);opacity:.51857143}.ios .preloader-inner-line:nth-child(5){transform:translate(-50%,-150%) rotate(180deg);opacity:.60142857}.ios .preloader-inner-line:nth-child(6){transform:translate(-50%,-150%) rotate(225deg);opacity:.68428571}.ios .preloader-inner-line:nth-child(7){transform:translate(-50%,-150%) rotate(270deg);opacity:.76714286}.ios .preloader-inner-line:nth-child(8){transform:translate(-50%,-150%) rotate(315deg);opacity:.85}@keyframes ios-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes ios-preloader-multicolor{0%,100%{background-color:#2196f3}25%{background-color:#ff3b30}50%{background-color:#4cd964}75%{background-color:#ff9500}}.md .preloader{color:var(--f7-preloader-color)}.md .preloader-inner{animation:md-preloader-rotate 1.4s linear infinite}.md .preloader-inner circle{fill:none;stroke:currentColor;animation:md-preloader-circle-rotate 5.6s ease-in-out infinite;stroke-dasharray:100px;stroke-dashoffset:80px;stroke-width:4;transform:rotate(-90deg);transform-origin:18px 18px}.md .preloader-multi-color circle,.md .preloader.color-multi circle{animation:md-preloader-circle-rotate 5.6s ease-in-out infinite,md-preloader-multicolor 5.6s ease-in-out infinite}@keyframes md-preloader-multicolor{0%,100%{stroke:#4285f4}75%{stroke:#1b9a59}50%{stroke:#f7c223}25%{stroke:#de3e35}}@keyframes md-preloader-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes md-preloader-circle-rotate{0%{transform:rotate(-90deg);stroke-dashoffset:100px}12.5%{transform:rotate(-90deg);stroke-dashoffset:25px}25%{stroke-dashoffset:100px;transform:rotate(180deg)}25.1%{transform:rotate(-180deg);stroke-dashoffset:100px}37.5%{transform:rotate(-180deg);stroke-dashoffset:25px}50%{stroke-dashoffset:100px;transform:rotate(90deg)}50.1%{transform:rotate(90deg);stroke-dashoffset:100px}62.5%{transform:rotate(90deg);stroke-dashoffset:25px}75%{stroke-dashoffset:100px;transform:rotate(360deg)}75.1%{transform:rotate(0deg);stroke-dashoffset:100px}87.5%{transform:rotate(0deg);stroke-dashoffset:25px}100%{stroke-dashoffset:100px;transform:rotate(270deg)}}.ios{--f7-progressbar-height:4px;--f7-progressbar-border-radius:4px;--f7-progressbar-bg-color:rgba(0, 0, 0, 0.3)}.ios .dark,.ios.dark{--f7-progressbar-bg-color:rgba(255, 255, 255, 0.3)}.md{--f7-progressbar-height:4px;--f7-progressbar-border-radius:0px}.md,.md .dark,.md [class*=color-]{--f7-progressbar-bg-color:rgba(var(--f7-theme-color-rgb), 0.5)}.progressbar,.progressbar-infinite{width:100%;overflow:hidden;position:relative;display:block;transform-style:preserve-3d;background:var(--f7-progressbar-bg-color,rgba(var(--f7-theme-color-rgb),.5));transform-origin:center top;height:var(--f7-progressbar-height);border-radius:var(--f7-progressbar-border-radius)}.progressbar{vertical-align:middle}.progressbar span{background-color:var(--f7-progressbar-progress-color,var(--f7-theme-color));width:100%;height:100%;position:absolute;top:0;transition-duration:150ms;left:0;transform:translate3d(-100%,0,0)}.progressbar-infinite{z-index:15000}.progressbar-infinite:after,.progressbar-infinite:before{content:'';position:absolute;top:0;width:100%;height:100%;transform:translate3d(0,0,0);display:block;background-color:var(--f7-progressbar-progress-color,var(--f7-theme-color));left:0;transform-origin:left center}.progressbar-infinite.color-multi{background:0 0!important}.progressbar-in{animation:progressbar-in 150ms forwards}.progressbar-out{animation:progressbar-out 150ms forwards}.framework7-root>.progressbar,.framework7-root>.progressbar-infinite,.page>.progressbar,.page>.progressbar-infinite,.panel>.progressbar,.panel>.progressbar-infinite,.popup>.progressbar,.popup>.progressbar-infinite,.view>.progressbar,.view>.progressbar-infinite,.views>.progressbar,.views>.progressbar-infinite,body>.progressbar,body>.progressbar-infinite{position:absolute;left:0;top:0;z-index:15000;border-radius:0!important;transform-origin:center top!important}@keyframes progressbar-in{from{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes progressbar-out{from{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}.ios .progressbar-infinite:before{animation:ios-progressbar-infinite 1s linear infinite}.ios .progressbar-infinite:after{display:none}.ios .progressbar-infinite.color-multi:before{width:400%;background-image:linear-gradient(to right,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55,#5856d6,#34aadc,#007aff,#5ac8fa,#4cd964);background-size:25% 100%;background-repeat:repeat-x;animation:ios-progressbar-infinite-multicolor 3s linear infinite}@keyframes ios-progressbar-infinite{0%{transform:translate3d(-100%,0,0)}100%{transform:translate3d(100%,0,0)}}@keyframes ios-progressbar-infinite-multicolor{0%{transform:translate3d(0%,0,0)}100%{transform:translate3d(-50%,0,0)}}.md .progressbar-infinite:before{animation:md-progressbar-infinite-1 2s linear infinite}.md .progressbar-infinite:after{animation:md-progressbar-infinite-2 2s linear infinite}.md .progressbar-infinite.color-multi:before{background:0 0;animation:md-progressbar-infinite-multicolor-bg 3s step-end infinite}.md .progressbar-infinite.color-multi:after{background:0 0;animation:md-progressbar-infinite-multicolor-fill 3s linear infinite;transform-origin:center center}@keyframes md-progressbar-infinite-1{0%{transform:translateX(-10%) scaleX(.1)}25%{transform:translateX(30%) scaleX(.6)}50%{transform:translateX(100%) scaleX(1)}100%{transform:translateX(100%) scaleX(1)}}@keyframes md-progressbar-infinite-2{0%{transform:translateX(-100%) scaleX(1)}40%{transform:translateX(-100%) scaleX(1)}75%{transform:translateX(60%) scaleX(.35)}90%{transform:translateX(100%) scaleX(.1)}100%{transform:translateX(100%) scaleX(.1)}}@keyframes md-progressbar-infinite-multicolor-bg{0%{background-color:#4caf50}25%{background-color:#f44336}50%{background-color:#2196f3}75%{background-color:#ffeb3b}}@keyframes md-progressbar-infinite-multicolor-fill{0%{transform:scaleX(0);background-color:#f44336}24.9%{transform:scaleX(1);background-color:#f44336}25%{transform:scaleX(0);background-color:#2196f3}49.9%{transform:scaleX(1);background-color:#2196f3}50%{transform:scaleX(0);background-color:#ffeb3b}74.9%{transform:scaleX(1);background-color:#ffeb3b}75%{transform:scaleX(0);background-color:#4caf50}100%{transform:scaleX(1);background-color:#4caf50}}.ios{--f7-sortable-handler-width:36px;--f7-sortable-sorting-item-box-shadow:0px 2px 8px rgba(0, 0, 0, 0.6);--f7-sortable-handler-color:rgba(0, 0, 0, 0.22);--f7-sortable-sorting-item-bg-color:rgba(255, 255, 255, 0.8)}.ios .dark,.ios.dark{--f7-sortable-sorting-item-bg-color:rgba(50, 50, 50, 0.8);--f7-sortable-handler-color:rgba(255, 255, 255, 0.55)}.md{--f7-sortable-handler-width:42px;--f7-sortable-sorting-item-box-shadow:none}.md,.md .dark,.md [class*=color-]{--f7-sortable-handler-color:var(--f7-md-on-surface-variant);--f7-sortable-sorting-item-bg-color:var(--f7-md-surface-3)}.sortable .sortable-handler{width:var(--f7-sortable-handler-width);height:100%;position:absolute;top:0;z-index:10;opacity:0;pointer-events:none;cursor:move;transition-duration:.3s;display:flex;align-items:center;justify-content:center;overflow:hidden;right:var(--f7-safe-area-right)}.sortable .sortable-handler:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;transition-duration:.3s;transform:translateX(10px);color:var(--f7-sortable-handler-color);overflow:hidden;height:20px;width:18px}.sortable li.sorting{z-index:50;background:var(--f7-sortable-sorting-item-bg-color);transition-duration:0s;box-shadow:var(--f7-sortable-sorting-item-box-shadow)}.sortable li.sorting .item-inner:after{display:none!important}.sortable-opposite .sortable-handler{left:var(--f7-safe-area-right);right:auto}.sortable-opposite .sortable-handler:after{transform:translateX(-10px)}.sortable-opposite .item-content,.sortable-opposite.links-list li a,.sortable.simple-list li,.sortable:not(.sortable-opposite) .item-inner{transition-duration:.3s;transition-property:all}.sortable-sorting li{transition-duration:.3s}.sortable-enabled li:not(.no-sorting):not(.disallow-sorting) .sortable-handler{pointer-events:auto;touch-action:none;opacity:1}.sortable-enabled li:not(.no-sorting):not(.disallow-sorting) .sortable-handler:after{transform:translateX(0px)}.sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) .item-link .item-inner:before,.sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) .item-link .item-title-row:before,.sortable-enabled:not(.sortable-opposite).links-list li:not(.no-sorting):not(.disallow-sorting)>a:before{display:none}.links-list.sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) a,.no-chevron .sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) .item-link .item-inner,.simple-list.sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting),.sortable-enabled :not(.sortable-opposite).no-chevron .item-link .item-inner,.sortable-enabled.no-chevron:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) .item-link .item-inner,.sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) .item-inner,.sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) .item-link .item-inner,.sortable-enabled:not(.sortable-opposite) li:not(.no-sorting):not(.disallow-sorting) .item-link.no-chevron .item-inner{padding-right:calc(var(--f7-sortable-handler-width) + var(--f7-safe-area-right))}.links-list.sortable-opposite.sortable-enabled li:not(.no-sorting):not(.disallow-sorting) a,.simple-list.sortable-opposite.sortable-enabled li:not(.no-sorting):not(.disallow-sorting),.sortable-opposite.sortable-enabled li:not(.no-sorting):not(.disallow-sorting) .item-content{padding-left:calc(var(--f7-sortable-handler-width) + var(--f7-safe-area-right))}.ios .sortable-handler:after{content:'sort_ios'}.md .sortable-handler:after{content:'sort_md'}:root{--f7-swipeout-delete-button-bg-color:#ff3b30;--f7-swipeout-button-text-color:#fff;--f7-swipeout-button-padding-vertical:0px;--f7-swipeout-button-bg-color:rgba(0, 0, 0, 0.22)}:root .dark,:root.dark{--f7-swipeout-button-bg-color:rgba(255, 255, 255, 0.55)}.ios{--f7-swipeout-button-padding-horizontal:30px;--f7-swipeout-button-font-size:inherit;--f7-swipeout-button-font-weight:inherit}.md{--f7-swipeout-button-padding-horizontal:24px;--f7-swipeout-button-font-size:14px;--f7-swipeout-button-font-weight:500}.md .dark,.md.dark{--f7-swipeout-button-text-color:#000}.swipeout{overflow:hidden;transform-style:preserve-3d}.swipeout-deleting{transition-duration:.3s}.swipeout-deleting .swipeout-content{transform:translateX(-100%)}.swipeout-transitioning .swipeout-actions-left a,.swipeout-transitioning .swipeout-actions-right a,.swipeout-transitioning .swipeout-content,.swipeout-transitioning .swipeout-overswipe{transition-duration:.3s;transition-property:transform,left}.swipeout-content{position:relative;z-index:10}.swipeout-overswipe{transition-duration:.2s;transition-property:left}.swipeout-actions-left,.swipeout-actions-right{position:absolute;top:0;height:100%;display:flex;direction:ltr}.swipeout-actions-left>a,.swipeout-actions-left>button,.swipeout-actions-left>div,.swipeout-actions-left>span,.swipeout-actions-right>a,.swipeout-actions-right>button,.swipeout-actions-right>div,.swipeout-actions-right>span{color:var(--f7-swipeout-button-text-color);background:var(--f7-swipeout-button-bg-color);padding:var(--f7-swipeout-button-padding-vertical) var(--f7-swipeout-button-padding-horizontal);display:flex;align-items:center;position:relative;left:0;font-size:var(--f7-swipeout-button-font-size);font-weight:var(--f7-swipeout-button-font-weight)}.swipeout-actions-left>a:after,.swipeout-actions-left>button:after,.swipeout-actions-left>div:after,.swipeout-actions-left>span:after,.swipeout-actions-right>a:after,.swipeout-actions-right>button:after,.swipeout-actions-right>div:after,.swipeout-actions-right>span:after{content:'';position:absolute;top:0;width:600%;height:100%;background:inherit;z-index:-1;transform:translate3d(0,0,0);pointer-events:none}.swipeout-actions-left .swipeout-delete,.swipeout-actions-right .swipeout-delete{background:var(--f7-swipeout-delete-button-bg-color)}.swipeout-actions-right{right:0%;transform:translateX(calc(100% + 1px))}.swipeout-actions-right>a:after,.swipeout-actions-right>button:after,.swipeout-actions-right>div:after,.swipeout-actions-right>span:after{left:100%}.swipeout-actions-right>a:last-child,.swipeout-actions-right>button:last-child,.swipeout-actions-right>div:last-child,.swipeout-actions-right>span:last-child{padding-right:calc(var(--f7-swipeout-button-padding-horizontal) + var(--f7-safe-area-right))}.swipeout-actions-left{left:0%;transform:translateX(calc(-100% - 1px))}.swipeout-actions-left>a:after,.swipeout-actions-left>button:after,.swipeout-actions-left>div:after,.swipeout-actions-left>span:after{right:100%}.swipeout-actions-left>a:first-child,.swipeout-actions-left>button:first-child,.swipeout-actions-left>div:first-child,.swipeout-actions-left>span:first-child{padding-left:calc(var(--f7-swipeout-button-padding-horizontal) + var(--f7-safe-area-left))}.swipeout-actions-left [class*=color-],.swipeout-actions-right [class*=color-]{--f7-swipeout-button-bg-color:var(--f7-theme-color)}:root{--f7-accordion-chevron-icon-down:'chevron_down';--f7-accordion-chevron-icon-up:'chevron_up'}.accordion-item-toggle{cursor:pointer}.list.accordion-list .accordion-item-toggle{transition-duration:.3s;position:relative;overflow:hidden}.list.accordion-list .accordion-item-toggle.active-state{transition-duration:.3s;background-color:var(--f7-list-link-pressed-bg-color)}.list.accordion-list .accordion-item-toggle.active-state>.item-inner:after{background-color:transparent}.list.accordion-list .accordion-item-toggle .item-inner{transition-duration:.3s;transition-property:background-color}.list.accordion-list .accordion-item-toggle .item-inner:after{transition-duration:.3s}.list.accordion-list .accordion-item-toggle .ripple-wave{z-index:0}.accordion-item .item-link .item-inner:after{transition-duration:.3s}.accordion-item .block,.accordion-item .list{margin-top:0;margin-bottom:0}.accordion-item .block>h1:first-child,.accordion-item .block>h2:first-child,.accordion-item .block>h3:first-child,.accordion-item .block>h4:first-child,.accordion-item .block>p:first-child{margin-top:10px}.accordion-item .block>h1:last-child,.accordion-item .block>h2:last-child,.accordion-item .block>h3:last-child,.accordion-item .block>h4:last-child,.accordion-item .block>p:last-child{margin-bottom:10px}.accordion-item-opened .accordion-item-toggle .item-inner:after,.accordion-item-opened>.item-link .item-inner:after{background-color:transparent}.list li.accordion-item ul{padding-left:0}.accordion-item-content{position:relative;overflow:hidden;height:0;font-size:14px;transition-duration:.3s}.accordion-item-opened>.accordion-item-content{height:auto}html.device-android-4 .accordion-item-content{transform:none}.list .accordion-item-toggle .item-inner:before{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;position:absolute;top:50%;font-size:var(--f7-list-chevron-icon-font-size);color:var(--f7-list-chevron-icon-color);pointer-events:none;right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.list:not(.accordion-opposite) .accordion-item-toggle .item-inner{padding-right:calc(var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.accordion-opposite .accordion-item-toggle .item-inner,.accordion-opposite .accordion-item-toggle.item-link .item-inner,.accordion-opposite .accordion-item>.item-link>.item-content>.item-inner,.accordion-opposite .accordion-item>.item-link>.item-inner{padding-right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right))}.accordion-opposite .accordion-item>.item-link>.item-title-row{padding-right:0}.accordion-opposite .accordion-item-toggle .item-inner:before,.accordion-opposite .accordion-item-toggle.item-link .item-inner:before,.accordion-opposite .accordion-item>.item-link .item-title-row:before,.accordion-opposite .accordion-item>.item-link>.item-content>.item-inner:before,.accordion-opposite .accordion-item>.item-link>.item-inner:before{display:none}.accordion-opposite .accordion-item-toggle.item-content,.accordion-opposite .accordion-item-toggle>.item-content,.accordion-opposite .accordion-item>.item-content,.accordion-opposite .accordion-item>.item-link>.item-content,.accordion-opposite.links-list .accordion-item>a{position:relative;padding-left:calc(var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-left))}.accordion-opposite .accordion-item-toggle.item-content:before,.accordion-opposite .accordion-item-toggle>.item-content:before,.accordion-opposite .accordion-item>.item-content:before,.accordion-opposite .accordion-item>.item-link>.item-content:before,.accordion-opposite.links-list .accordion-item>a:before{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;position:absolute;top:50%;font-size:var(--f7-list-chevron-icon-font-size);color:var(--f7-list-chevron-icon-color);pointer-events:none;content:var(--f7-accordion-chevron-icon-down);width:14px;height:8px;margin-top:-4px;line-height:8px;transform:translateX(-50%);left:calc((var(--f7-list-chevron-icon-area) + var(--f7-list-item-padding-horizontal))/ 2 + var(--f7-safe-area-left))}.list .accordion-item-toggle.active-state{background-color:var(--f7-list-link-pressed-bg-color)}.accordion-item.media-item .accordion-item-toggle .item-title-row:before,.accordion-item.media-item>.item-link .item-title-row:before,.links-list .accordion-item>a:before,.list .accordion-item-toggle .item-inner:before,.list:not(.media-list) .accordion-item:not(.media-item) .accordion-item-toggle .item-inner:before,.list:not(.media-list) .accordion-item:not(.media-item)>.item-link .item-inner:before,.media-list .accordion-item .accordion-item-toggle .item-title-row:before,.media-list .accordion-item>.item-link .item-title-row:before{content:var(--f7-accordion-chevron-icon-down);width:14px;height:8px;margin-top:-4px;line-height:8px}.accordion-item-opened.media-item .accordion-item-toggle .item-title-row:before,.accordion-item-opened.media-item>.item-link .item-title-row:before,.accordion-opposite .accordion-item-opened .accordion-item-toggle.item-content:before,.accordion-opposite .accordion-item-opened .accordion-item-toggle>.item-content:before,.accordion-opposite .accordion-item-opened>.item-content:before,.accordion-opposite .accordion-item-opened>.item-link>.item-content:before,.accordion-opposite .links-list .accordion-item-opened>a:before,.links-list .accordion-item-opened>a:before,.list .accordion-item-toggle.accordion-item-opened .item-inner:before,.list:not(.media-list) .accordion-item-opened:not(.media-item) .accordion-item-toggle .item-inner:before,.list:not(.media-list) .accordion-item-opened:not(.media-item)>.item-link .item-inner:before,.media-list .accordion-item-opened .accordion-item-toggle .item-title-row:before,.media-list .accordion-item-opened>.item-link .item-title-row:before{content:var(--f7-accordion-chevron-icon-up);width:14px;height:8px;margin-top:-4px;line-height:8px}.ios{--f7-contacts-list-title-font-size:inherit;--f7-contacts-list-title-font-weight:600;--f7-contacts-list-title-height:22px;--f7-contacts-list-title-text-color:#000;--f7-contacts-list-title-bg-color:#f7f7f7}.ios .dark,.ios.dark{--f7-contacts-list-title-text-color:#fff;--f7-contacts-list-title-bg-color:#323234}.md{--f7-contacts-list-title-font-size:20px;--f7-contacts-list-title-font-weight:500;--f7-contacts-list-title-height:48px;--f7-contacts-list-title-bg-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-contacts-list-title-text-color:var(--f7-theme-color)}.contacts-list{--f7-list-margin-vertical:0px}.contacts-list .list-group-title,.contacts-list li.list-group-title{background-color:var(--f7-contacts-list-title-bg-color,var(--f7-list-group-title-bg-color));font-weight:var(--f7-contacts-list-title-font-weight,var(--f7-list-group-title-font-weight));font-size:var(--f7-contacts-list-title-font-size, var(--f7-list-group-title-font-size));color:var(--f7-contacts-list-title-text-color,var(--f7-theme-color));line-height:var(--f7-contacts-list-title-height, var(--f7-list-group-title-height));height:var(--f7-contacts-list-title-height,var(--f7-list-group-title-height))}.contacts-list .list-group:first-child ul:before{display:none!important}.contacts-list .list-group:last-child ul:after{display:none!important}.md .contacts-list .list-group-title{pointer-events:none;overflow:visible;width:40px}.md .contacts-list .list-group-title+li{margin-top:calc(var(--f7-contacts-list-title-height) * -1)}.md .contacts-list .list-group-title:before{display:none!important}.md .contacts-list li:not(.list-group-title){padding-left:40px}:root{--f7-list-index-width:16px;--f7-list-index-font-size:11px;--f7-list-index-font-weight:600;--f7-list-index-item-height:14px;--f7-list-index-label-font-weight:500}.ios{--f7-list-index-label-text-color:#fff;--f7-list-index-label-size:44px;--f7-list-index-label-font-size:17px;--f7-list-index-skip-dot-size:6px}.md{--f7-list-index-label-size:56px;--f7-list-index-label-font-size:20px;--f7-list-index-skip-dot-size:4px}.md,.md .dark,.md [class*=color-]{--f7-list-index-label-bg-color:var(--f7-md-primary);--f7-list-index-label-text-color:var(--f7-md-on-primary)}.list-index{position:absolute;top:0;bottom:0;text-align:center;z-index:10;width:var(--f7-list-index-width);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;right:var(--f7-safe-area-right)}.list-index:before{content:'';position:absolute;width:20px;top:0;right:100%;height:100%}.list-index ul{color:var(--f7-list-index-text-color,var(--f7-theme-color));font-size:var(--f7-list-index-font-size);font-weight:var(--f7-list-index-font-weight);list-style:none;margin:0;padding:0;display:flex;flex-direction:column;justify-content:center;align-items:center;flex-shrink:0;height:100%;width:100%;position:relative}.list-index li{margin:0;padding:0;list-style:none;position:relative;height:var(--f7-list-index-item-height);line-height:var(--f7-list-index-item-height);flex-shrink:0;display:block;width:100%}.list-index .list-index-skip-placeholder:after{content:'';position:absolute;left:50%;top:50%;border-radius:50%;width:var(--f7-list-index-skip-dot-size);height:var(--f7-list-index-skip-dot-size);margin-left:calc(-1 * var(--f7-list-index-skip-dot-size)/ 2);margin-top:calc(-1 * var(--f7-list-index-skip-dot-size)/ 2);background:var(--f7-list-index-text-color,var(--f7-theme-color))}.list-index .list-index-label{position:absolute;bottom:0;right:100%;text-align:center;background-color:var(--f7-list-index-label-bg-color,var(--f7-theme-color));color:var(--f7-list-index-label-text-color);width:var(--f7-list-index-label-size);height:var(--f7-list-index-label-size);line-height:var(--f7-list-index-label-size);font-size:var(--f7-list-index-label-font-size);font-weight:var(--f7-list-index-label-font-weight)}.navbars~.page>.list-index,.navbar~.list-index,.navbar~.page>.list-index{top:var(--f7-navbar-height)}.ios .navbars~.toolbar-top-ios .md .navbar~.toolbar-top-md~.list-index,.ios .navbar~.toolbar-top-ios~.list-index,.navbars~.toolbar-top~.list-index,.navbar~.toolbar-top~.list-index{top:calc(var(--f7-navbar-height) + var(--f7-toolbar-height))}.ios .navbars~.toolbar-top-ios .md .navbar~.toolbar-top-md.tabbar-icons~.list-index,.ios .navbar~.toolbar-top-ios.tabbar-icons~.list-index,.navbars~.toolbar-top.tabbar-icons~.list-index,.navbar~.toolbar-top.tabbar-icons~.list-index{top:calc(var(--f7-navbar-height) + var(--f7-tabbar-icons-height))}.navbars~.subnavbar~.list-index,.navbar~.subnavbar~.list-index,.page-with-subnavbar .navbar~.list-index{top:calc(var(--f7-navbar-height) + var(--f7-subnavbar-height))}.ios .toolbar-bottom-ios~* .page>.list-index,.ios .toolbar-bottom-ios~.list-index,.ios .toolbar-bottom-ios~.page>.list-index,.md .toolbar-bottom-md~* .page>.list-index,.md .toolbar-bottom-md~.list-index,.md .toolbar-bottom-md~.page>.list-index,.toolbar-bottom~* .page>.list-index,.toolbar-bottom~.list-index,.toolbar-bottom~.page>.list-index{bottom:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom))}.ios .toolbar-bottom-ios.tabbar-icons~* .page>.list-index,.ios .toolbar-bottom-ios.tabbar-icons~.list-index,.ios .toolbar-bottom-ios.tabbar-icons~.page>.list-index,.md .toolbar-bottom-md.tabbar-icons~* .page>.list-index,.md .toolbar-bottom-md.tabbar-icons~.list-index,.md .toolbar-bottom-md.tabbar-icons~.page>.list-index,.toolbar-bottom.tabbar-icons~* .page>.list-index,.toolbar-bottom.tabbar-icons~.list-index,.toolbar-bottom.tabbar-icons~.page>.list-index{bottom:calc(var(--f7-tabbar-icons-height) + var(--f7-safe-area-bottom))}.ios .list-index .list-index-label{margin-bottom:calc(-1 * var(--f7-list-index-label-size)/ 2);margin-right:calc(var(--f7-list-index-width) - 1px);border-radius:50%}.ios .list-index .list-index-label:before{position:absolute;width:100%;height:100%;border-radius:50% 0% 50% 50%;content:'';background-color:inherit;left:0;top:0;transform:rotate(45deg);z-index:-1}.md .list-index .list-index-label{border-radius:50% 50% 0 50%}:root{--f7-timeline-inner-block-margin-vertical:16px;--f7-timeline-divider-margin-horizontal:16px;--f7-timeline-horizontal-date-height:34px;--f7-timeline-year-height:24px;--f7-timeline-year-font-weight:inherit;--f7-timeline-month-height:24px;--f7-timeline-month-font-size:inherit;--f7-timeline-month-font-weight:inherit;--f7-timeline-item-text-font-weight:inherit;--f7-timeline-item-subtitle-font-weight:inherit}.ios{--f7-timeline-divider-color:#bbb;--f7-timeline-padding-horizontal:16px;--f7-timeline-margin-vertical:35px;--f7-timeline-item-inner-border-radius:7px;--f7-timeline-item-time-font-size:13px;--f7-timeline-item-title-font-size:17px;--f7-timeline-item-title-line-height:inherit;--f7-timeline-item-title-font-weight:600;--f7-timeline-item-subtitle-font-size:15px;--f7-timeline-item-subtitle-line-height:inherit;--f7-timeline-item-text-font-size:inherit;--f7-timeline-item-text-color:inherit;--f7-timeline-item-text-line-height:inherit;--f7-timeline-year-font-size:16px;--f7-timeline-horizontal-item-padding:10px;--f7-timeline-item-inner-bg-color:#fff;--f7-timeline-item-time-text-color:rgba(0, 0, 0, 0.45);--f7-timeline-horizontal-item-border-color:rgba(0, 0, 0, 0.22);--f7-timeline-horizontal-item-date-border-color:rgba(0, 0, 0, 0.22)}.ios .dark,.ios.dark{--f7-timeline-horizontal-item-border-color:rgba(255, 255, 255, 0.15);--f7-timeline-horizontal-item-date-border-color:rgba(255, 255, 255, 0.15);--f7-timeline-item-inner-bg-color:#1c1c1d;--f7-timeline-item-time-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-timeline-padding-horizontal:16px;--f7-timeline-margin-vertical:32px;--f7-timeline-item-inner-border-radius:16px;--f7-timeline-item-time-font-size:13px;--f7-timeline-item-title-font-size:16px;--f7-timeline-item-title-line-height:inherit;--f7-timeline-item-title-font-weight:400;--f7-timeline-item-subtitle-font-size:inherit;--f7-timeline-item-subtitle-line-height:inherit;--f7-timeline-item-text-font-size:inherit;--f7-timeline-item-text-line-height:inherit;--f7-timeline-year-font-size:16px;--f7-timeline-horizontal-item-padding:12px;--f7-timeline-horizontal-item-date-border-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-timeline-divider-color:var(--f7-md-outline);--f7-timeline-item-text-color:var(--f7-md-on-surface);--f7-timeline-horizontal-item-border-color:var(--f7-md-outline);--f7-timeline-item-inner-bg-color:var(--f7-md-surface-1);--f7-timeline-item-time-text-color:var(--f7-md-on-surface-variant)}.timeline{box-sizing:border-box;margin:var(--f7-timeline-margin-vertical) 0;padding:0 var(--f7-timeline-padding-horizontal);padding-top:0;padding-bottom:0;padding-left:calc(var(--f7-timeline-padding-horizontal) + var(--f7-safe-area-left));padding-right:calc(var(--f7-timeline-padding-horizontal) + var(--f7-safe-area-right))}.block-strong .timeline{padding:0;margin:0}.timeline-item{display:flex;justify-content:flex-start;overflow:hidden;box-sizing:border-box;position:relative;padding:2px 0px var(--f7-timeline-padding-horizontal)}.timeline-item:last-child{padding-bottom:2px}.timeline-item-date{flex-shrink:0;width:50px;text-align:right;box-sizing:border-box}.timeline-item-date small{font-size:10px}.timeline-item-content{margin:2px;min-width:0;position:relative;flex-shrink:10}.timeline-item-content .block,.timeline-item-content .card,.timeline-item-content .list,.timeline-item-content.block,.timeline-item-content.card,.timeline-item-content.list{margin:0;width:100%}.timeline-item-content .block+.block,.timeline-item-content .block+.card,.timeline-item-content .block+.list,.timeline-item-content .card+.block,.timeline-item-content .card+.card,.timeline-item-content .card+.list,.timeline-item-content .list+.block,.timeline-item-content .list+.card,.timeline-item-content .list+.list{margin:var(--f7-timeline-inner-block-margin-vertical) 0 0}.timeline-item-content h1:first-child,.timeline-item-content h2:first-child,.timeline-item-content h3:first-child,.timeline-item-content h4:first-child,.timeline-item-content ol:first-child,.timeline-item-content p:first-child,.timeline-item-content ul:first-child{margin-top:0}.timeline-item-content h1:last-child,.timeline-item-content h2:last-child,.timeline-item-content h3:last-child,.timeline-item-content h4:last-child,.timeline-item-content ol:last-child,.timeline-item-content p:last-child,.timeline-item-content ul:last-child{margin-bottom:0}.timeline-item-inner{background:var(--f7-timeline-item-inner-bg-color);box-sizing:border-box;border-radius:var(--f7-timeline-item-inner-border-radius);padding:8px var(--f7-timeline-padding-horizontal)}.timeline-item-inner+.timeline-item-inner{margin-top:var(--f7-timeline-inner-block-margin-vertical)}.timeline-item-inner .block{padding:0;color:inherit}.timeline-item-inner .block-strong{padding-left:0;padding-right:0;margin:0}.timeline-item-inner .block-strong:after,.timeline-item-inner .block-strong:before{display:none!important}.timeline-item-inner .list ul:after,.timeline-item-inner .list ul:before{display:none!important}.timeline-item-divider{width:1px;position:relative;width:10px;height:10px;background:var(--f7-timeline-divider-color);border-radius:50%;flex-shrink:0;margin:3px var(--f7-timeline-divider-margin-horizontal) 0}.timeline-item-divider:after,.timeline-item-divider:before{content:' ';width:1px;height:100vh;position:absolute;left:50%;background:inherit;transform:translate3d(-50%,0,0)}.timeline-item-divider:after{top:100%}.timeline-item-divider:before{bottom:100%}.timeline-item:last-child .timeline-item-divider:after{display:none}.timeline-item:first-child .timeline-item-divider:before{display:none}.timeline-item-time{font-size:var(--f7-timeline-item-time-font-size);margin-top:var(--f7-timeline-inner-block-margin-vertical);color:var(--f7-timeline-item-time-text-color)}.timeline-item-time:first-child,.timeline-item-time:last-child{margin-top:0}.timeline-item-title+.timeline-item-time{margin-top:0}.timeline-item-title{font-size:var(--f7-timeline-item-title-font-size);font-weight:var(--f7-timeline-item-title-font-weight);line-height:var(--f7-timeline-item-title-line-height)}.timeline-item-subtitle{font-size:var(--f7-timeline-item-subtitle-font-size);font-weight:var(--f7-timeline-item-subtitle-font-weight);line-height:var(--f7-timeline-item-subtitle-line-height)}.timeline-item-text{color:var(--f7-timeline-item-text-color);font-size:var(--f7-timeline-item-text-font-size);font-weight:var(--f7-timeline-item-text-font-weight);line-height:var(--f7-timeline-item-text-line-height)}.timeline-sides .timeline-item,.timeline-sides .timeline-item-right{margin-left:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-right:0}.timeline-sides .timeline-item .timeline-item-date,.timeline-sides .timeline-item-right .timeline-item-date{text-align:right}.timeline-sides .timeline-item-left,.timeline-sides .timeline-item:not(.timeline-item-right):nth-child(2n){flex-direction:row-reverse;margin-right:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-left:0}.timeline-sides .timeline-item-left .timeline-item-date,.timeline-sides .timeline-item:not(.timeline-item-right):nth-child(2n) .timeline-item-date{text-align:left}@media (min-width:480px){.xsmall-sides .timeline-item,.xsmall-sides .timeline-item-right{margin-left:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-right:0}.xsmall-sides .timeline-item .timeline-item-date,.xsmall-sides .timeline-item-right .timeline-item-date{text-align:right}.xsmall-sides .timeline-item-left,.xsmall-sides .timeline-item:not(.timeline-item-right):nth-child(2n){flex-direction:row-reverse;margin-right:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-left:0}.xsmall-sides .timeline-item-left .timeline-item-date,.xsmall-sides .timeline-item:not(.timeline-item-right):nth-child(2n) .timeline-item-date{text-align:left}}@media (min-width:568px){.small-sides .timeline-item,.small-sides .timeline-item-right{margin-left:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-right:0}.small-sides .timeline-item .timeline-item-date,.small-sides .timeline-item-right .timeline-item-date{text-align:right}.small-sides .timeline-item-left,.small-sides .timeline-item:not(.timeline-item-right):nth-child(2n){flex-direction:row-reverse;margin-right:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-left:0}.small-sides .timeline-item-left .timeline-item-date,.small-sides .timeline-item:not(.timeline-item-right):nth-child(2n) .timeline-item-date{text-align:left}}@media (min-width:768px){.medium-sides .timeline-item,.medium-sides .timeline-item-right{margin-left:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-right:0}.medium-sides .timeline-item .timeline-item-date,.medium-sides .timeline-item-right .timeline-item-date{text-align:right}.medium-sides .timeline-item-left,.medium-sides .timeline-item:not(.timeline-item-right):nth-child(2n){flex-direction:row-reverse;margin-right:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-left:0}.medium-sides .timeline-item-left .timeline-item-date,.medium-sides .timeline-item:not(.timeline-item-right):nth-child(2n) .timeline-item-date{text-align:left}}@media (min-width:1024px){.large-sides .timeline-item,.large-sides .timeline-item-right{margin-left:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-right:0}.large-sides .timeline-item .timeline-item-date,.large-sides .timeline-item-right .timeline-item-date{text-align:right}.large-sides .timeline-item-left,.large-sides .timeline-item:not(.timeline-item-right):nth-child(2n){flex-direction:row-reverse;margin-right:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-left:0}.large-sides .timeline-item-left .timeline-item-date,.large-sides .timeline-item:not(.timeline-item-right):nth-child(2n) .timeline-item-date{text-align:left}}@media (min-width:1200px){.xlarge-sides .timeline-item,.xlarge-sides .timeline-item-right{margin-left:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-right:0}.xlarge-sides .timeline-item .timeline-item-date,.xlarge-sides .timeline-item-right .timeline-item-date{text-align:right}.xlarge-sides .timeline-item-left,.xlarge-sides .timeline-item:not(.timeline-item-right):nth-child(2n){flex-direction:row-reverse;margin-right:calc(50% - (var(--f7-timeline-divider-margin-horizontal) * 2 + 10px)/ 2 - 50px);margin-left:0}.xlarge-sides .timeline-item-left .timeline-item-date,.xlarge-sides .timeline-item:not(.timeline-item-right):nth-child(2n) .timeline-item-date{text-align:left}}.timeline-horizontal{height:100%;display:flex;padding:0;margin:0;position:relative;padding-left:var(--f7-safe-area-left);padding-right:0}.timeline-horizontal .timeline-item{display:block;width:100/3vw;margin:0;padding:0;flex-shrink:0;position:relative;height:100%;padding-top:var(--f7-timeline-horizontal-date-height)!important;padding-bottom:var(--f7-timeline-horizontal-item-padding)}.timeline-horizontal .timeline-item:after{content:'';position:absolute;background-color:var(--f7-timeline-horizontal-item-border-color);display:block;z-index:15;top:0;right:0;bottom:auto;left:auto;width:1px;height:100%;transform-origin:100% 50%;transform:scaleX(calc(1 / var(--f7-device-pixel-ratio)))}.timeline-horizontal .timeline-item-date{padding:0px var(--f7-timeline-horizontal-item-padding);width:auto;line-height:var(--f7-timeline-horizontal-date-height);position:absolute;left:0;top:0;width:100%;height:var(--f7-timeline-horizontal-date-height);background-color:var(--f7-bars-bg-color);color:var(--f7-bars-text-color);text-align:left}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .timeline-horizontal .timeline-item-date{background-color:rgba(var(--f7-bars-bg-color-rgb),var(--f7-bars-translucent-opacity));-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.timeline-horizontal .timeline-item-date:after{content:'';position:absolute;background-color:var(--f7-timeline-horizontal-item-date-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.timeline-horizontal .timeline-item-content{padding:var(--f7-timeline-horizontal-item-padding);height:calc(100vw - var(--f7-timeline-horizontal-item-padding));overflow:auto;-webkit-overflow-scrolling:touch;margin:0}.timeline-horizontal .timeline-item-divider{display:none}.timeline-horizontal .timeline-month:last-child .timeline-item:last-child:after,.timeline-horizontal>.timeline-item:last-child:after{display:none!important}.timeline-horizontal.timeline-cols-1 .timeline-item{width:calc(100vw / 1)}.timeline-horizontal.timeline-cols-2 .timeline-item{width:calc(100vw / 2)}.timeline-horizontal.timeline-cols-3 .timeline-item{width:calc(100vw / 3)}.timeline-horizontal.timeline-cols-4 .timeline-item{width:calc(100vw / 4)}.timeline-horizontal.timeline-cols-5 .timeline-item{width:calc(100vw / 5)}.timeline-horizontal.timeline-cols-6 .timeline-item{width:calc(100vw / 6)}.timeline-horizontal.timeline-cols-7 .timeline-item{width:calc(100vw / 7)}.timeline-horizontal.timeline-cols-8 .timeline-item{width:calc(100vw / 8)}.timeline-horizontal.timeline-cols-9 .timeline-item{width:calc(100vw / 9)}.timeline-horizontal.timeline-cols-10 .timeline-item{width:calc(100vw / 10)}.timeline-horizontal.timeline-cols-11 .timeline-item{width:calc(100vw / 11)}.timeline-horizontal.timeline-cols-12 .timeline-item{width:calc(100vw / 12)}.timeline-horizontal.timeline-cols-13 .timeline-item{width:calc(100vw / 13)}.timeline-horizontal.timeline-cols-14 .timeline-item{width:calc(100vw / 14)}.timeline-horizontal.timeline-cols-15 .timeline-item{width:calc(100vw / 15)}.timeline-horizontal.timeline-cols-16 .timeline-item{width:calc(100vw / 16)}.timeline-horizontal.timeline-cols-17 .timeline-item{width:calc(100vw / 17)}.timeline-horizontal.timeline-cols-18 .timeline-item{width:calc(100vw / 18)}.timeline-horizontal.timeline-cols-19 .timeline-item{width:calc(100vw / 19)}.timeline-horizontal.timeline-cols-20 .timeline-item{width:calc(100vw / 20)}@media (min-width:480px){.timeline-horizontal.xsmall-timeline-cols-1 .timeline-item{width:calc(100vw / 1)}.timeline-horizontal.xsmall-timeline-cols-2 .timeline-item{width:calc(100vw / 2)}.timeline-horizontal.xsmall-timeline-cols-3 .timeline-item{width:calc(100vw / 3)}.timeline-horizontal.xsmall-timeline-cols-4 .timeline-item{width:calc(100vw / 4)}.timeline-horizontal.xsmall-timeline-cols-5 .timeline-item{width:calc(100vw / 5)}.timeline-horizontal.xsmall-timeline-cols-6 .timeline-item{width:calc(100vw / 6)}.timeline-horizontal.xsmall-timeline-cols-7 .timeline-item{width:calc(100vw / 7)}.timeline-horizontal.xsmall-timeline-cols-8 .timeline-item{width:calc(100vw / 8)}.timeline-horizontal.xsmall-timeline-cols-9 .timeline-item{width:calc(100vw / 9)}.timeline-horizontal.xsmall-timeline-cols-10 .timeline-item{width:calc(100vw / 10)}.timeline-horizontal.xsmall-timeline-cols-11 .timeline-item{width:calc(100vw / 11)}.timeline-horizontal.xsmall-timeline-cols-12 .timeline-item{width:calc(100vw / 12)}.timeline-horizontal.xsmall-timeline-cols-13 .timeline-item{width:calc(100vw / 13)}.timeline-horizontal.xsmall-timeline-cols-14 .timeline-item{width:calc(100vw / 14)}.timeline-horizontal.xsmall-timeline-cols-15 .timeline-item{width:calc(100vw / 15)}.timeline-horizontal.xsmall-timeline-cols-16 .timeline-item{width:calc(100vw / 16)}.timeline-horizontal.xsmall-timeline-cols-17 .timeline-item{width:calc(100vw / 17)}.timeline-horizontal.xsmall-timeline-cols-18 .timeline-item{width:calc(100vw / 18)}.timeline-horizontal.xsmall-timeline-cols-19 .timeline-item{width:calc(100vw / 19)}.timeline-horizontal.xsmall-timeline-cols-20 .timeline-item{width:calc(100vw / 20)}}@media (min-width:568px){.timeline-horizontal.small-timeline-cols-1 .timeline-item{width:calc(100vw / 1)}.timeline-horizontal.small-timeline-cols-2 .timeline-item{width:calc(100vw / 2)}.timeline-horizontal.small-timeline-cols-3 .timeline-item{width:calc(100vw / 3)}.timeline-horizontal.small-timeline-cols-4 .timeline-item{width:calc(100vw / 4)}.timeline-horizontal.small-timeline-cols-5 .timeline-item{width:calc(100vw / 5)}.timeline-horizontal.small-timeline-cols-6 .timeline-item{width:calc(100vw / 6)}.timeline-horizontal.small-timeline-cols-7 .timeline-item{width:calc(100vw / 7)}.timeline-horizontal.small-timeline-cols-8 .timeline-item{width:calc(100vw / 8)}.timeline-horizontal.small-timeline-cols-9 .timeline-item{width:calc(100vw / 9)}.timeline-horizontal.small-timeline-cols-10 .timeline-item{width:calc(100vw / 10)}.timeline-horizontal.small-timeline-cols-11 .timeline-item{width:calc(100vw / 11)}.timeline-horizontal.small-timeline-cols-12 .timeline-item{width:calc(100vw / 12)}.timeline-horizontal.small-timeline-cols-13 .timeline-item{width:calc(100vw / 13)}.timeline-horizontal.small-timeline-cols-14 .timeline-item{width:calc(100vw / 14)}.timeline-horizontal.small-timeline-cols-15 .timeline-item{width:calc(100vw / 15)}.timeline-horizontal.small-timeline-cols-16 .timeline-item{width:calc(100vw / 16)}.timeline-horizontal.small-timeline-cols-17 .timeline-item{width:calc(100vw / 17)}.timeline-horizontal.small-timeline-cols-18 .timeline-item{width:calc(100vw / 18)}.timeline-horizontal.small-timeline-cols-19 .timeline-item{width:calc(100vw / 19)}.timeline-horizontal.small-timeline-cols-20 .timeline-item{width:calc(100vw / 20)}}@media (min-width:768px){.timeline-horizontal.medium-timeline-cols-1 .timeline-item{width:calc(100vw / 1)}.timeline-horizontal.medium-timeline-cols-2 .timeline-item{width:calc(100vw / 2)}.timeline-horizontal.medium-timeline-cols-3 .timeline-item{width:calc(100vw / 3)}.timeline-horizontal.medium-timeline-cols-4 .timeline-item{width:calc(100vw / 4)}.timeline-horizontal.medium-timeline-cols-5 .timeline-item{width:calc(100vw / 5)}.timeline-horizontal.medium-timeline-cols-6 .timeline-item{width:calc(100vw / 6)}.timeline-horizontal.medium-timeline-cols-7 .timeline-item{width:calc(100vw / 7)}.timeline-horizontal.medium-timeline-cols-8 .timeline-item{width:calc(100vw / 8)}.timeline-horizontal.medium-timeline-cols-9 .timeline-item{width:calc(100vw / 9)}.timeline-horizontal.medium-timeline-cols-10 .timeline-item{width:calc(100vw / 10)}.timeline-horizontal.medium-timeline-cols-11 .timeline-item{width:calc(100vw / 11)}.timeline-horizontal.medium-timeline-cols-12 .timeline-item{width:calc(100vw / 12)}.timeline-horizontal.medium-timeline-cols-13 .timeline-item{width:calc(100vw / 13)}.timeline-horizontal.medium-timeline-cols-14 .timeline-item{width:calc(100vw / 14)}.timeline-horizontal.medium-timeline-cols-15 .timeline-item{width:calc(100vw / 15)}.timeline-horizontal.medium-timeline-cols-16 .timeline-item{width:calc(100vw / 16)}.timeline-horizontal.medium-timeline-cols-17 .timeline-item{width:calc(100vw / 17)}.timeline-horizontal.medium-timeline-cols-18 .timeline-item{width:calc(100vw / 18)}.timeline-horizontal.medium-timeline-cols-19 .timeline-item{width:calc(100vw / 19)}.timeline-horizontal.medium-timeline-cols-20 .timeline-item{width:calc(100vw / 20)}}@media (min-width:1024px){.timeline-horizontal.large-timeline-cols-1 .timeline-item{width:calc(100vw / 1)}.timeline-horizontal.large-timeline-cols-2 .timeline-item{width:calc(100vw / 2)}.timeline-horizontal.large-timeline-cols-3 .timeline-item{width:calc(100vw / 3)}.timeline-horizontal.large-timeline-cols-4 .timeline-item{width:calc(100vw / 4)}.timeline-horizontal.large-timeline-cols-5 .timeline-item{width:calc(100vw / 5)}.timeline-horizontal.large-timeline-cols-6 .timeline-item{width:calc(100vw / 6)}.timeline-horizontal.large-timeline-cols-7 .timeline-item{width:calc(100vw / 7)}.timeline-horizontal.large-timeline-cols-8 .timeline-item{width:calc(100vw / 8)}.timeline-horizontal.large-timeline-cols-9 .timeline-item{width:calc(100vw / 9)}.timeline-horizontal.large-timeline-cols-10 .timeline-item{width:calc(100vw / 10)}.timeline-horizontal.large-timeline-cols-11 .timeline-item{width:calc(100vw / 11)}.timeline-horizontal.large-timeline-cols-12 .timeline-item{width:calc(100vw / 12)}.timeline-horizontal.large-timeline-cols-13 .timeline-item{width:calc(100vw / 13)}.timeline-horizontal.large-timeline-cols-14 .timeline-item{width:calc(100vw / 14)}.timeline-horizontal.large-timeline-cols-15 .timeline-item{width:calc(100vw / 15)}.timeline-horizontal.large-timeline-cols-16 .timeline-item{width:calc(100vw / 16)}.timeline-horizontal.large-timeline-cols-17 .timeline-item{width:calc(100vw / 17)}.timeline-horizontal.large-timeline-cols-18 .timeline-item{width:calc(100vw / 18)}.timeline-horizontal.large-timeline-cols-19 .timeline-item{width:calc(100vw / 19)}.timeline-horizontal.large-timeline-cols-20 .timeline-item{width:calc(100vw / 20)}}@media (min-width:1200px){.timeline-horizontal.xlarge-timeline-cols-1 .timeline-item{width:calc(100vw / 1)}.timeline-horizontal.xlarge-timeline-cols-2 .timeline-item{width:calc(100vw / 2)}.timeline-horizontal.xlarge-timeline-cols-3 .timeline-item{width:calc(100vw / 3)}.timeline-horizontal.xlarge-timeline-cols-4 .timeline-item{width:calc(100vw / 4)}.timeline-horizontal.xlarge-timeline-cols-5 .timeline-item{width:calc(100vw / 5)}.timeline-horizontal.xlarge-timeline-cols-6 .timeline-item{width:calc(100vw / 6)}.timeline-horizontal.xlarge-timeline-cols-7 .timeline-item{width:calc(100vw / 7)}.timeline-horizontal.xlarge-timeline-cols-8 .timeline-item{width:calc(100vw / 8)}.timeline-horizontal.xlarge-timeline-cols-9 .timeline-item{width:calc(100vw / 9)}.timeline-horizontal.xlarge-timeline-cols-10 .timeline-item{width:calc(100vw / 10)}.timeline-horizontal.xlarge-timeline-cols-11 .timeline-item{width:calc(100vw / 11)}.timeline-horizontal.xlarge-timeline-cols-12 .timeline-item{width:calc(100vw / 12)}.timeline-horizontal.xlarge-timeline-cols-13 .timeline-item{width:calc(100vw / 13)}.timeline-horizontal.xlarge-timeline-cols-14 .timeline-item{width:calc(100vw / 14)}.timeline-horizontal.xlarge-timeline-cols-15 .timeline-item{width:calc(100vw / 15)}.timeline-horizontal.xlarge-timeline-cols-16 .timeline-item{width:calc(100vw / 16)}.timeline-horizontal.xlarge-timeline-cols-17 .timeline-item{width:calc(100vw / 17)}.timeline-horizontal.xlarge-timeline-cols-18 .timeline-item{width:calc(100vw / 18)}.timeline-horizontal.xlarge-timeline-cols-19 .timeline-item{width:calc(100vw / 19)}.timeline-horizontal.xlarge-timeline-cols-20 .timeline-item{width:calc(100vw / 20)}}.timeline-year{padding-top:var(--f7-timeline-year-height)}.timeline-year:after{content:'';position:absolute;background-color:var(--f7-timeline-horizontal-item-border-color);display:block;z-index:15;top:0;right:0;bottom:auto;left:auto;width:1px;height:100%;transform-origin:100% 50%;transform:scaleX(calc(1 / var(--f7-device-pixel-ratio)))}.timeline-year:last-child:after{display:none!important}.timeline-month{padding-top:var(--f7-timeline-month-height)}.timeline-month .timeline-item:before{content:'';position:absolute;background-color:var(--f7-timeline-horizontal-item-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.timeline-month,.timeline-year{display:flex;flex-shrink:0;position:relative;box-sizing:border-box;height:100%}.timeline-year-title{line-height:var(--f7-timeline-year-height);height:var(--f7-timeline-year-height);font-size:var(--f7-timeline-year-font-size);font-weight:var(--f7-timeline-year-font-weight)}.timeline-month-title{line-height:var(--f7-timeline-month-height);height:var(--f7-timeline-month-height);font-size:var(--f7-timeline-month-font-size);font-weight:var(--f7-timeline-month-font-weight)}.timeline-month-title,.timeline-year-title{position:absolute;left:0;top:0;width:100%;box-sizing:border-box;padding:0 var(--f7-timeline-horizontal-item-padding);background-color:var(--f7-bars-bg-color);color:var(--f7-bars-text-color)}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .timeline-month-title,.ios-translucent-bars .timeline-year-title{background-color:rgba(var(--f7-bars-bg-color-rgb),var(--f7-bars-translucent-opacity));-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.timeline-month-title span,.timeline-year-title span{display:inline-block;position:sticky;left:calc(var(--f7-timeline-horizontal-item-padding) + var(--f7-safe-area-left))}.timeline-month-title span{margin-top:-2px}.timeline-year:first-child .timeline-month:first-child .timeline-month-title,.timeline-year:first-child .timeline-year-title,.timeline-year:first-child .timeline-year-title+.timeline-month .timeline-month-title{left:calc(var(--f7-safe-area-left) * -1);right:0;width:auto}.timeline-horizontal .timeline-item:first-child,.timeline-year:first-child .timeline-month:first-child .timeline-item:first-child,.timeline-year:first-child .timeline-year-title+.timeline-month .timeline-item:first-child,.timeline-year:first-child .timeline-year-title+.timeline-month .timeline-month-title+.timeline-item{overflow:visible}.timeline-horizontal .timeline-item:first-child .timeline-item-date,.timeline-year:first-child .timeline-month:first-child .timeline-item:first-child .timeline-item-date,.timeline-year:first-child .timeline-year-title+.timeline-month .timeline-item:first-child .timeline-item-date,.timeline-year:first-child .timeline-year-title+.timeline-month .timeline-month-title+.timeline-item .timeline-item-date{width:auto;padding-left:calc(var(--f7-timeline-horizontal-item-padding) + var(--f7-safe-area-left));left:calc(0px - var(--f7-safe-area-left));right:0}.timeline-year:last-child .timeline-month:last-child .timeline-month-title,.timeline-year:last-child .timeline-year-title{width:auto;right:calc(0px - var(--f7-safe-area-right))}.timeline-horizontal .timeline-item:last-child,.timeline-year:last-child .timeline-month:last-child .timeline-item:last-child{overflow:visible}.timeline-horizontal .timeline-item:last-child .timeline-item-date,.timeline-year:last-child .timeline-month:last-child .timeline-item:last-child .timeline-item-date{width:auto;right:calc(0px - var(--f7-safe-area-right));left:0}.ios .block-strong .timeline-item-inner{border-radius:3px;border:1px solid rgba(0,0,0,.1)}.ios .timeline-year-title span{margin-top:3px}.md .timeline-year-title span{margin-top:2px}.tabs .tab{display:none}.tabs .tab-active{display:block}.tabs-animated-wrap{position:relative;width:100%;overflow:hidden;height:100%}.tabs-animated-wrap>.tabs{display:flex;height:100%;transition-duration:.3s}.tabs-animated-wrap>.tabs>.tab{width:100%;display:block;flex-shrink:0}.tabs-animated-wrap.not-animated>.tabs{transition-duration:0s}swiper-container.tabs{height:100%}swiper-container.tabs>.tab{display:block;touch-action:pan-y}.page>.tabs{height:100%}:root{--f7-panel-width:260px;--f7-panel-backdrop-bg-color:rgba(0, 0, 0, 0.3);--f7-panel-bg-color:#fff}:root .dark,:root.dark{--f7-panel-bg-color:#000}.ios{--f7-panel-collapsed-width:58px;--f7-panel-transition-duration:400ms;--f7-panel-transition-timing-function:initial}.md{--f7-panel-collapsed-width:60px;--f7-panel-transition-duration:400ms;--f7-panel-transition-timing-function:cubic-bezier(0, 0.8, 0.34, 1)}.panel-backdrop{position:absolute;left:0;top:0px;width:100%;height:100%;opacity:0;z-index:5999;visibility:hidden;pointer-events:none;transform:translate3d(0,0,0);background-color:var(--f7-panel-backdrop-bg-color);transition-property:transform,opacity;transition-duration:var(--f7-panel-transition-duration)}.panel-backdrop .with-panel,.panel-backdrop .with-panel-closing{visibility:visible}.panel-backdrop.not-animated{transition-duration:0s!important}.panel{z-index:1000;box-sizing:border-box;position:absolute;top:0px;height:100%;transform:translate3d(0,0,0);width:var(--f7-panel-width);background-color:var(--f7-panel-bg-color);overflow:visible;transition-property:transform;transition-duration:var(--f7-panel-transition-duration)}.panel:not(.panel-in):not(.panel-out):not(.panel-in-breakpoint):not(.panel-in-collapsed):not(\n.panel-in-swipe\n){display:none}.panel:after{pointer-events:none;opacity:0;z-index:5999;position:absolute;content:'';top:0;width:20px;height:100%;transition-property:transform,opacity;transition-duration:var(--f7-panel-transition-duration)}.panel.not-animated,.panel.not-animated:after{transition-duration:0s!important}.panel.panel-reveal.not-animated~.view,.panel.panel-reveal.not-animated~.views{transition-duration:0s!important}.panel.panel-resizing{-webkit-user-select:none;-moz-user-select:none;user-select:none}.panel.panel-resizing,.panel.panel-resizing:after,.panel.panel-resizing~.view,.panel.panel-resizing~.views{transition-duration:0s!important}.panel-cover,.panel-floating{z-index:6000}.panel-floating{overflow:hidden;border-radius:16px;height:auto;top:calc(8px + var(--f7-safe-area-top,0px));bottom:calc(8px + var(--f7-safe-area-bottom,0px))}.panel-floating .view,.panel-floating .views{--f7-safe-area-top:0px;--f7-safe-area-bottom:0px}.page .panel-floating{top:calc(8px + var(--f7-page-navbar-offset,0px));bottom:calc(8px + var(--f7-safe-area-bottom,0px))}.page .panel-floating .page{--f7-page-navbar-offset:0px}.page .panel-floating .navbars~*,.page .panel-floating .navbar~*{--f7-page-navbar-offset:calc(var(--f7-navbar-height))}.panel-left{left:0;width:var(--f7-panel-left-width,var(--f7-panel-width))}.panel-left.panel-cover,.panel-left.panel-floating,.panel-left.panel-push{transform:translate3d(calc(-1 * var(--f7-panel-left-width,var(--f7-panel-width))),0,0)}.panel-right{right:0;width:var(--f7-panel-right-width,var(--f7-panel-width))}.panel-right.panel-cover,.panel-right.panel-floating,.panel-right.panel-push{transform:translate3d(var(--f7-panel-right-width,var(--f7-panel-width)),0,0)}.panel-in-breakpoint{transform:translate3d(0,0,0)!important;transition-duration:0s}.panel-in-breakpoint:after{display:none}.panel-in-breakpoint.panel-cover,.panel-in-breakpoint.panel-floating{z-index:5900}.panel,.panel-backdrop{transition-timing-function:var(--f7-panel-transition-timing-function)}html.with-panel-closing .framework7-root>.view,html.with-panel-closing .views,html.with-panel-left-push .framework7-root>.view,html.with-panel-left-push .views,html.with-panel-left-reveal .framework7-root>.view,html.with-panel-left-reveal .views,html.with-panel-right-push .framework7-root>.view,html.with-panel-right-push .views,html.with-panel-right-reveal .framework7-root>.view,html.with-panel-right-reveal .views{transition-duration:var(--f7-panel-transition-duration);transition-property:transform;transition-timing-function:var(--f7-panel-transition-timing-function)}html.with-panel .framework7-root>.view .page-content,html.with-panel .framework7-root>.views .page-content{overflow:hidden;-webkit-overflow-scrolling:auto}html.with-panel-left-push .framework7-root>.view,html.with-panel-left-push .views,html.with-panel-left-reveal .framework7-root>.view,html.with-panel-left-reveal .views{transform:translate3d(var(--f7-panel-left-width,var(--f7-panel-width)),0,0)}html.with-panel-right-push .framework7-root>.view,html.with-panel-right-push .views,html.with-panel-right-reveal .framework7-root>.view,html.with-panel-right-reveal .views{transform:translate3d(calc(-1 * var(--f7-panel-right-width,var(--f7-panel-width))),0,0)}.page>.panel-backdrop{z-index:290}.page .panel-push,.page>.panel-reveal{z-index:1}.page>.panel-cover,.page>.panel-floating{z-index:300}.page.with-panel-closing>.page-content,.page.with-panel-closing>.tabs,.page.with-panel-left-push>.page-content,.page.with-panel-left-push>.tabs,.page.with-panel-left-reveal>.page-content,.page.with-panel-left-reveal>.tabs,.page.with-panel-right-push>.page-content,.page.with-panel-right-push>.tabs,.page.with-panel-right-reveal>.page-content,.page.with-panel-right-reveal>.tabs{transition-duration:var(--f7-panel-transition-duration);transition-property:transform;transition-timing-function:var(--f7-panel-transition-timing-function)}.page.with-panel-left-push>.page-content,.page.with-panel-left-push>.tabs,.page.with-panel-left-reveal>.page-content,.page.with-panel-left-reveal>.tabs{transform:translate3d(var(--f7-panel-left-width,var(--f7-panel-width)),0,0)}.page.with-panel-right-push>.page-content,.page.with-panel-right-push>.tabs,.page.with-panel-right-reveal>.page-content,.page.with-panel-right-reveal>.tabs{transform:translate3d(calc(-1 * var(--f7-panel-right-width,var(--f7-panel-width))),0,0)}.with-panel-closing .panel-backdrop-in{visibility:visible;pointer-events:auto;opacity:0}.with-panel-left-cover .panel-backdrop-in,.with-panel-left-floating .panel-backdrop-in,.with-panel-left-push .panel-backdrop-in,.with-panel-left-reveal .panel-backdrop-in,.with-panel-right-cover .panel-backdrop-in,.with-panel-right-floating .panel-backdrop-in,.with-panel-right-push .panel-backdrop-in,.with-panel-right-reveal .panel-backdrop-in{visibility:visible;pointer-events:auto;opacity:1}.with-panel-left-push .panel-backdrop-in,.with-panel-left-reveal .panel-backdrop-in{transform:translate3d(var(--f7-panel-left-width,var(--f7-panel-width)),0,0)}.with-panel-right-push .panel-backdrop-in,.with-panel-right-reveal .panel-backdrop-in{transform:translate3d(calc(-1 * var(--f7-panel-right-width,var(--f7-panel-width))),0,0)}.with-panel-left-cover .panel-left,.with-panel-left-push .panel-left{transform:translate3d(0px,0,0)}.with-panel-left-floating .panel-left{transform:translate3d(8px,0,0)}.with-panel-right-cover .panel-right,.with-panel-right-push .panel-right{transform:translate3d(0px,0,0)}.with-panel-right-floating .panel-right{transform:translate3d(-8px,0,0)}.panel-resizable{max-width:100%}.panel-resize-handler{position:absolute;top:0;height:100%;width:6px;cursor:col-resize;z-index:6000;display:none}.panel-resizable .panel-resize-handler{display:block}.panel-left.panel-cover .panel-resize-handler,.panel-left.panel-floating .panel-resize-handler{right:-3px}.panel-left.panel-push .panel-resize-handler,.panel-left.panel-reveal .panel-resize-handler{right:0}.panel-right.panel-cover .panel-resize-handler,.panel-right.panel-floating .panel-resize-handler{left:-3px}.panel-right.panel-push .panel-resize-handler,.panel-right.panel-reveal .panel-resize-handler{left:0}.panel-left.panel-in-collapsed~.page-content,.panel-left.panel-in-collapsed~.tabs,.panel-left.panel-in-collapsed~.view,.panel-left.panel-in-collapsed~.views{margin-left:var(--f7-panel-left-collapsed-width,var(--f7-panel-collapsed-width))}.page.with-panel-left-reveal .panel-left.panel-in-collapsed~.page-content,.page.with-panel-left-reveal .panel-left.panel-in-collapsed~.tabs,html.with-panel-left-reveal .panel-left.panel-in-collapsed~.view,html.with-panel-left-reveal .panel-left.panel-in-collapsed~.views{transform:translate3d(calc(var(--f7-panel-left-width,var(--f7-panel-width)) - var(--f7-panel-left-collapsed-width,var(--f7-panel-collapsed-width))),0,0)}.panel-right.panel-in-collapsed~.page-content,.panel-right.panel-in-collapsed~.tabs,.panel-right.panel-in-collapsed~.view,.panel-right.panel-in-collapsed~.views{margin-right:var(--f7-panel-right-collapsed-width,var(--f7-panel-collapsed-width))}.page.with-panel-right-reveal .panel-right.panel-in-collapsed~.page-content,.page.with-panel-right-reveal .panel-right.panel-in-collapsed~.tabs,html.with-panel-right-reveal .panel-right.panel-in-collapsed~.view,html.with-panel-right-reveal .panel-right.panel-in-collapsed~.views{transform:translate3d(calc(var(--f7-panel-right-collapsed-width,var(--f7-panel-collapsed-width)) - var(--f7-panel-right-width,var(--f7-panel-width))),0,0)}html.with-modal-popup-push .framework7-root,html.with-modal-popup-push-closing .framework7-root{--f7-panelPushScale:var(--f7-popup-push-scale);--f7-panelPushTransitionDuration:var(--f7-popup-transition-duration);--f7-panelPushTransitionTimingFunction:var(--f7-popup-transition-timing-function);--f7-panelPushBorderRadius:var(--f7-popup-push-border-radius)}html.with-modal-sheet-push .framework7-root,html.with-modal-sheet-push-closing .framework7-root{--f7-panelPushScale:var(--f7-sheet-push-scale);--f7-panelPushTransitionDuration:var(--f7-sheet-transition-duration);--f7-panelPushTransitionTimingFunction:var(--f7-sheet-transition-timing-function);--f7-panelPushBorderRadius:var(--f7-sheet-push-border-radius)}html.with-modal-popup-push .framework7-root>.panel-in,html.with-modal-popup-push .framework7-root>.panel-out,html.with-modal-sheet-push .framework7-root>.panel-in,html.with-modal-sheet-push .framework7-root>.panel-out{transition-duration:var(--f7-panelPushTransitionDuration);transition-timing-function:var(--f7-panelPushTransitionTimingFunction)}html.with-modal-popup-push .framework7-root>.panel-in.panel-push.panel-left,html.with-modal-popup-push .framework7-root>.panel-in.panel-reveal.panel-left,html.with-modal-popup-push .framework7-root>.panel-out.panel-push.panel-left,html.with-modal-popup-push .framework7-root>.panel-out.panel-reveal.panel-left,html.with-modal-sheet-push .framework7-root>.panel-in.panel-push.panel-left,html.with-modal-sheet-push .framework7-root>.panel-in.panel-reveal.panel-left,html.with-modal-sheet-push .framework7-root>.panel-out.panel-push.panel-left,html.with-modal-sheet-push .framework7-root>.panel-out.panel-reveal.panel-left{transform:scale(var(--f7-panelPushScale,1));transform-origin:50vw center;border-top-left-radius:var(--f7-panelPushBorderRadius)}html.with-modal-popup-push .framework7-root>.panel-in.panel-push.panel-left .view,html.with-modal-popup-push .framework7-root>.panel-in.panel-reveal.panel-left .view,html.with-modal-popup-push .framework7-root>.panel-out.panel-push.panel-left .view,html.with-modal-popup-push .framework7-root>.panel-out.panel-reveal.panel-left .view,html.with-modal-sheet-push .framework7-root>.panel-in.panel-push.panel-left .view,html.with-modal-sheet-push .framework7-root>.panel-in.panel-reveal.panel-left .view,html.with-modal-sheet-push .framework7-root>.panel-out.panel-push.panel-left .view,html.with-modal-sheet-push .framework7-root>.panel-out.panel-reveal.panel-left .view{border-top-left-radius:var(--f7-panelPushBorderRadius)}html.with-modal-popup-push .framework7-root>.panel-in.panel-push.panel-right,html.with-modal-popup-push .framework7-root>.panel-in.panel-reveal.panel-right,html.with-modal-popup-push .framework7-root>.panel-out.panel-push.panel-right,html.with-modal-popup-push .framework7-root>.panel-out.panel-reveal.panel-right,html.with-modal-sheet-push .framework7-root>.panel-in.panel-push.panel-right,html.with-modal-sheet-push .framework7-root>.panel-in.panel-reveal.panel-right,html.with-modal-sheet-push .framework7-root>.panel-out.panel-push.panel-right,html.with-modal-sheet-push .framework7-root>.panel-out.panel-reveal.panel-right{transform:scale(var(--f7-panelPushScale,1));transform-origin:calc(var(--f7-panel-left-width,var(--f7-panel-width)) - 50vw) center;border-top-right-radius:var(--f7-panelPushBorderRadius)}html.with-modal-popup-push .framework7-root>.panel-in.panel-push.panel-right .view,html.with-modal-popup-push .framework7-root>.panel-in.panel-reveal.panel-right .view,html.with-modal-popup-push .framework7-root>.panel-out.panel-push.panel-right .view,html.with-modal-popup-push .framework7-root>.panel-out.panel-reveal.panel-right .view,html.with-modal-sheet-push .framework7-root>.panel-in.panel-push.panel-right .view,html.with-modal-sheet-push .framework7-root>.panel-in.panel-reveal.panel-right .view,html.with-modal-sheet-push .framework7-root>.panel-out.panel-push.panel-right .view,html.with-modal-sheet-push .framework7-root>.panel-out.panel-reveal.panel-right .view{border-top-right-radius:var(--f7-panelPushBorderRadius)}html.with-modal-popup-push .framework7-root>.panel-in.panel-cover.panel-left,html.with-modal-popup-push .framework7-root>.panel-out.panel-cover.panel-left,html.with-modal-sheet-push .framework7-root>.panel-in.panel-cover.panel-left,html.with-modal-sheet-push .framework7-root>.panel-out.panel-cover.panel-left{transform:translate3d(calc(-1 * var(--f7-panel-left-width,var(--f7-panel-width))),0,0px)}html.with-modal-popup-push .framework7-root>.panel-in.panel-cover.panel-right,html.with-modal-popup-push .framework7-root>.panel-out.panel-cover.panel-right,html.with-modal-sheet-push .framework7-root>.panel-in.panel-cover.panel-right,html.with-modal-sheet-push .framework7-root>.panel-out.panel-cover.panel-right{transform:translate3d(var(--f7-panel-right-width,var(--f7-panel-width)),0,0px)}html.with-modal-popup-push-closing .framework7-root>.panel-in,html.with-modal-sheet-push-closing .framework7-root>.panel-in{transition-duration:var(--f7-panelPushTransitionDuration);transition-timing-function:var(--f7-panelPushTransitionTimingFunction)}html.with-modal-popup-push-closing .framework7-root>.panel-in.panel-push.panel-left,html.with-modal-popup-push-closing .framework7-root>.panel-in.panel-reveal.panel-left,html.with-modal-sheet-push-closing .framework7-root>.panel-in.panel-push.panel-left,html.with-modal-sheet-push-closing .framework7-root>.panel-in.panel-reveal.panel-left{transform-origin:50vw center}html.with-modal-popup-push-closing .framework7-root>.panel-in.panel-push.panel-right,html.with-modal-popup-push-closing .framework7-root>.panel-in.panel-reveal.panel-right,html.with-modal-sheet-push-closing .framework7-root>.panel-in.panel-push.panel-right,html.with-modal-sheet-push-closing .framework7-root>.panel-in.panel-reveal.panel-right{transform-origin:calc(var(--f7-panel-right-width,var(--f7-panel-width)) - 50vw) center}.md .panel-cover{overflow:hidden}.md .panel-cover.panel-left{border-radius:0 16px 16px 0}.md .panel-cover.panel-right{border-radius:16px 0 0 16px}:root{--f7-card-margin-horizontal:16px;--f7-card-margin-vertical:16px;--f7-card-content-padding-horizontal:16px;--f7-card-content-padding-vertical:16px;--f7-card-font-size:inherit;--f7-card-header-text-color:inherit;--f7-card-header-font-weight:400;--f7-card-header-padding-horizontal:16px;--f7-card-footer-font-weight:400;--f7-card-footer-font-size:inherit;--f7-card-footer-padding-horizontal:16px;--f7-card-expandable-font-size:16px;--f7-card-expandable-tablet-width:670px;--f7-card-expandable-tablet-height:670px}.ios{--f7-card-border-radius:8px;--f7-card-box-shadow:0px 1px 2px rgba(0, 0, 0, 0.2);--f7-card-header-font-size:17px;--f7-card-header-padding-vertical:10px;--f7-card-header-min-height:44px;--f7-card-footer-text-color:rgba(0, 0, 0, 0.45);--f7-card-footer-padding-vertical:10px;--f7-card-footer-min-height:44px;--f7-card-expandable-margin-horizontal:20px;--f7-card-expandable-margin-vertical:30px;--f7-card-expandable-box-shadow:0px 20px 40px rgba(0, 0, 0, 0.3);--f7-card-expandable-border-radius:16px;--f7-card-expandable-tablet-border-radius:16px;--f7-card-expandable-header-font-size:27px;--f7-card-expandable-header-font-weight:bold;--f7-card-text-color:inherit;--f7-card-bg-color:#fff;--f7-card-expandable-bg-color:#fff;--f7-card-outline-border-color:rgba(0, 0, 0, 0.12);--f7-card-header-border-color:rgba(0, 0, 0, 0.1);--f7-card-footer-border-color:rgba(0, 0, 0, 0.1)}.ios .dark,.ios.dark{--f7-card-bg-color:#1c1c1d;--f7-card-expandable-bg-color:#1c1c1d;--f7-card-outline-border-color:rgba(255, 255, 255, 0.15);--f7-card-header-border-color:rgba(255, 255, 255, 0.15);--f7-card-footer-border-color:rgba(255, 255, 255, 0.15);--f7-card-footer-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-card-border-radius:16px;--f7-card-box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2),0px 1px 1px 0px rgba(0, 0, 0, 0.14),0px 1px 3px 0px rgba(0, 0, 0, 0.12);--f7-card-header-font-size:22px;--f7-card-header-padding-vertical:16px;--f7-card-header-min-height:48px;--f7-card-footer-padding-vertical:16px;--f7-card-footer-min-height:48px;--f7-card-expandable-margin-horizontal:12px;--f7-card-expandable-margin-vertical:24px;--f7-card-expandable-box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2),0px 10px 14px 1px rgba(0, 0, 0, 0.14),0px 4px 18px 3px rgba(0, 0, 0, 0.12);--f7-card-expandable-border-radius:16px;--f7-card-expandable-tablet-border-radius:16px;--f7-card-expandable-header-font-size:22px;--f7-card-expandable-header-font-weight:500}.md,.md .dark,.md [class*=color-]{--f7-card-bg-color:var(--f7-md-surface-1);--f7-card-expandable-bg-color:var(--f7-md-surface-1);--f7-card-outline-border-color:var(--f7-md-outline);--f7-card-header-border-color:var(--f7-md-outline);--f7-card-footer-border-color:var(--f7-md-outline);--f7-card-text-color:var(--f7-md-on-surface);--f7-card-footer-text-color:var(--f7-md-on-surface-variant)}.card .list>ul:after,.card .list>ul:before,.cards-list>ul:after,.cards-list>ul:before{display:none!important}.card .list ul,.cards-list ul{background:0 0}.card{background:var(--f7-card-bg-color);position:relative;border-radius:var(--f7-card-border-radius);font-size:var(--f7-card-font-size);margin-top:var(--f7-card-margin-vertical);margin-bottom:var(--f7-card-margin-vertical);margin-left:calc(var(--f7-card-margin-horizontal) + var(--f7-safe-area-left));margin-right:calc(var(--f7-card-margin-horizontal) + var(--f7-safe-area-right));color:var(--f7-card-text-color)}.card .block,.card .list{margin:0}.row:not(.no-gap) .col>.card{margin-left:0;margin-right:0}.card-raised{box-shadow:var(--f7-card-box-shadow)}.card-outline,.ios .card-outline-ios,.md .card-outline-md{border:1px solid var(--f7-card-outline-border-color)}.card-content{position:relative}.card-content-padding{position:relative;padding:var(--f7-card-content-padding-vertical) var(--f7-card-content-padding-horizontal)}.card-content-padding>.block,.card-content-padding>.list{margin:calc(-1 * var(--f7-card-content-padding-vertical)) calc(-1 * var(--f7-card-content-padding-horizontal))}.card-content-padding>p:first-child{margin-top:0}.card-content-padding>p:last-child{margin-bottom:0}.card-header{min-height:var(--f7-card-header-min-height);color:var(--f7-card-header-text-color);font-size:var(--f7-card-header-font-size);font-weight:var(--f7-card-header-font-weight);padding:var(--f7-card-header-padding-vertical) var(--f7-card-header-padding-horizontal)}.card-dividers .card-header,.card-header-divider .card-header,.card-header.card-header-divider{border-bottom:1px solid var(--f7-card-header-border-color)}.card-footer{min-height:var(--f7-card-footer-min-height);color:var(--f7-card-footer-text-color);font-size:var(--f7-card-footer-font-size);font-weight:var(--f7-card-footer-font-weight);padding:var(--f7-card-footer-padding-vertical) var(--f7-card-footer-padding-horizontal)}.card-dividers .card-footer,.card-footer-divider .card-footer,.card-footer.card-footer-divider{border-top:1px solid var(--f7-card-header-border-color)}.card-footer a.link{overflow:hidden}.card-footer,.card-header{position:relative;box-sizing:border-box;display:flex;justify-content:space-between;align-items:center}.card-footer[valign=top],.card-header[valign=top]{align-items:flex-start}.card-footer[valign=bottom],.card-header[valign=bottom]{align-items:flex-end}.card-footer a.link,.card-header a.link{position:relative}.card-footer a.link i.icon,.card-header a.link i.icon{display:block}.card-footer a.icon-only,.card-header a.icon-only{display:flex;justify-content:center;align-items:center;margin:0}.card-header{border-radius:var(--f7-card-border-radius) var(--f7-card-border-radius) 0 0}.card-footer{border-radius:0 0 var(--f7-card-border-radius) var(--f7-card-border-radius)}.card-expandable{overflow:hidden;height:300px;background:var(--f7-card-expandable-bg-color);position:relative;transform-origin:center center;transition-property:transform,border-radius;border-radius:var(--f7-card-expandable-border-radius);z-index:2;transition-duration:.2s;margin-left:calc(var(--f7-card-expandable-margin-horizontal) + var(--f7-safe-area-left));margin-right:calc(var(--f7-card-expandable-margin-horizontal) + var(--f7-safe-area-right));margin-top:var(--f7-card-expandable-margin-vertical);margin-bottom:var(--f7-card-expandable-margin-vertical);font-size:var(--f7-card-expandable-font-size)}.card-expandable.card-raised{box-shadow:var(--f7-card-expandable-box-shadow)}.card-expandable:not(.card-opened){-webkit-user-select:none;-moz-user-select:none;user-select:none}.card-expandable.card-no-transition{transition-duration:0s}.card-expandable.card-expandable-animate-width .card-content{transition-property:width,transform;width:100%}.card-expandable.active-state{transform:scale(.97) translate3d(0,0,0)}.card-expandable .card-opened-fade-in,.card-expandable .card-opened-fade-out{transition-duration:.4s}.card-expandable .card-opened-fade-in{opacity:0;pointer-events:none}.card-expandable .card-content{position:absolute;top:0;width:100vw;height:100vh;transform-origin:center top;overflow:hidden;transition-property:transform;box-sizing:border-box;pointer-events:none;left:0}.card-expandable .card-content .card-content-padding{padding-left:calc(var(--f7-safe-area-left) + var(--f7-card-content-padding-horizontal));padding-right:calc(var(--f7-safe-area-right) + var(--f7-card-content-padding-horizontal))}.card-expandable.card-opened{transition-duration:0s}.card-expandable.card-closing,.card-expandable.card-opening,.card-expandable.card-transitioning{transition-duration:.4s}.card-expandable.card-opening .card-content{transition-duration:.3s}.card-expandable.card-closing .card-content{transition-duration:.5s}.card-expandable.card-closing,.card-expandable.card-opened,.card-expandable.card-opening{z-index:300}.card-expandable.card-opened,.card-expandable.card-opening{border-radius:0}.card-expandable.card-opened .card-opened-fade-in,.card-expandable.card-opening .card-opened-fade-in{opacity:1;pointer-events:auto}.card-expandable.card-opened .card-opened-fade-out,.card-expandable.card-opening .card-opened-fade-out{opacity:0;pointer-events:none}.card-expandable.card-opened .card-content{overflow:auto;-webkit-overflow-scrolling:touch;pointer-events:auto}.card-expandable .card-header{font-size:var(--f7-card-expandable-header-font-size);font-weight:var(--f7-card-expandable-header-font-weight)}.card-prevent-open{pointer-events:auto}.card-expandable-size{width:0;height:0;position:absolute;left:0;top:0;opacity:0;pointer-events:none;visibility:hidden}@media (min-width:768px) and (min-height:670px){.card-expandable:not(.card-tablet-fullscreen){max-width:var(--f7-card-expandable-tablet-width)}.card-expandable:not(.card-tablet-fullscreen).card-opened,.card-expandable:not(.card-tablet-fullscreen).card-opening{border-radius:var(--f7-card-expandable-tablet-border-radius)}.card-expandable:not(.card-tablet-fullscreen):not(.card-expandable-animate-width) .card-content{width:var(--f7-card-expandable-tablet-width)}.card-expandable:not(.card-tablet-fullscreen) .card-expandable-size{width:var(--f7-card-expandable-tablet-width);height:var(--f7-card-expandable-tablet-height)}}.page.page-with-card-opened .page-content{overflow:hidden}.card-backdrop{position:fixed;left:0;top:0;width:100%;height:100%;z-index:299;pointer-events:none;background:rgba(0,0,0,.2);opacity:0}.card-backdrop-in{animation:card-backdrop-fade-in .4s forwards;pointer-events:auto}.card-backdrop-out{animation:card-backdrop-fade-out .4s forwards}@supports ((-webkit-backdrop-filter: blur(15px)) or (backdrop-filter: blur(15px))){.card-backdrop{background:0 0;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px)}}@keyframes card-backdrop-fade-in{from{opacity:0}to{opacity:1}}@keyframes card-backdrop-fade-out{from{opacity:1}to{opacity:0}}:root{--f7-chip-font-size:14px;--f7-chip-media-font-size:16px;--f7-chip-delete-button-color:#000}:root .dark,:root.dark{--f7-chip-delete-button-color:#fff}.ios{--f7-chip-height:28px;--f7-chip-media-size:28px;--f7-chip-padding-horizontal:10px;--f7-chip-border-radius:28px;--f7-chip-font-weight:normal;--f7-chip-outline-border-color:rgba(0, 0, 0, 0.12);--f7-chip-bg-color:rgba(0, 0, 0, 0.12);--f7-chip-text-color:#000;--f7-chip-outline-text-color:#000}.ios .dark,.ios.dark{--f7-chip-bg-color:#333;--f7-chip-text-color:#fff;--f7-chip-outline-text-color:#fff;--f7-chip-outline-border-color:rgba(255, 255, 255, 0.12)}.md{--f7-chip-font-weight:500;--f7-chip-media-size:24px;--f7-chip-height:32px;--f7-chip-padding-horizontal:12px;--f7-chip-border-radius:8px}.md,.md .dark,.md [class*=color-]{--f7-chip-bg-color:var(--f7-md-secondary-container);--f7-chip-text-color:var(--f7-md-on-secondary-container);--f7-chip-outline-text-color:var(--f7-md-on-surface);--f7-chip-outline-border-color:var(--f7-md-outline)}.chip{padding-left:var(--f7-chip-padding-horizontal);padding-right:var(--f7-chip-padding-horizontal);font-weight:var(--f7-chip-font-weight);display:inline-flex;box-sizing:border-box;vertical-align:middle;align-items:center;margin:2px 0;background-color:var(--f7-chip-bg-color);font-size:var(--f7-chip-font-size);color:var(--f7-chip-text-color);height:var(--f7-chip-height);line-height:var(--f7-chip-height);border-radius:var(--f7-chip-border-radius);position:relative}.chip-media{border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;height:var(--f7-chip-media-size);width:var(--f7-chip-media-size);border-radius:var(--f7-chip-media-size);text-align:center;line-height:var(--f7-chip-media-size);box-sizing:border-box;color:#fff;font-size:var(--f7-chip-media-font-size);vertical-align:middle}.chip-media i.icon{font-size:calc(var(--f7-chip-media-size) - 8px);height:calc(var(--f7-chip-media-size) - 8px)}.chip-media img{max-width:100%;max-height:100%;width:auto;height:auto;border-radius:50%;display:block}.chip-media+.chip-label{margin-left:4px}.chip-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative;flex-shrink:1;min-width:0}.chip-delete{text-align:center;cursor:pointer;flex-shrink:0;background-repeat:no-repeat;width:24px;height:24px;color:var(--f7-chip-delete-button-color);opacity:.54;position:relative}.chip-delete:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;line-height:24px}.chip .chip-delete.active-state{opacity:1}.chip-outline,.ios .chip-outline-ios,.md .chip-outline-md{border:1px solid var(--f7-chip-outline-border-color);color:var(--f7-chip-outline-text-color);background:0 0}.ios .chip[class*=color-]{--f7-chip-bg-color:var(--f7-theme-color);--f7-chip-text-color:#fff}.ios .chip-outline-ios[class*=color-],.ios .chip-outline[class*=color-]{--f7-chip-outline-border-color:var(--f7-theme-color);--f7-chip-outline-text-color:var(--f7-theme-color)}.ios .chip-media{margin-left:calc(-1 * var(--f7-chip-padding-horizontal))}.ios .chip-delete{margin-right:calc(-1 * var(--f7-chip-padding-horizontal))}.ios .chip-delete::after{content:'delete_round_ios'}.ios .chip-delete:after{font-size:10px}.md .chip-media{margin-left:calc(-1 * var(--f7-chip-padding-horizontal) + 4px)}.md .chip-label+.chip-delete{margin-left:4px}.md .chip-delete{margin-right:calc(-1 * var(--f7-chip-padding-horizontal) + 4px)}.md .chip-delete::after{content:'delete_round_md';font-size:16px}:root{--f7-input-bg-color:transparent;--f7-label-font-weight:400;--f7-label-height:16px;--f7-label-font-size:12px;--f7-floating-label-scale:calc(16 / 12);--f7-input-padding-left:0px;--f7-input-padding-right:0px;--f7-input-error-text-color:#ff3b30;--f7-input-error-font-size:12px;--f7-input-error-line-height:1.4;--f7-input-error-font-weight:400;--f7-input-info-font-size:12px;--f7-input-info-line-height:1.4;--f7-textarea-height:100px}.ios{--f7-input-item-bg-color:transparent;--f7-input-item-border-radius:0px;--f7-input-height:40px;--f7-input-font-size:16px;--f7-input-placeholder-color:#a9a9a9;--f7-textarea-padding-vertical:8px;--f7-label-text-color:inherit;--f7-input-clear-button-size:14px;--f7-input-outline-border-radius:8px;--f7-input-text-color:#000000;--f7-input-info-text-color:rgba(0, 0, 0, 0.45);--f7-input-clear-button-color:rgba(0, 0, 0, 0.45);--f7-input-outline-border-color:#bbb}.ios .dark,.ios.dark{--f7-input-text-color:#fff;--f7-input-info-text-color:rgba(255, 255, 255, 0.55);--f7-input-clear-button-color:rgba(255, 255, 255, 0.5);--f7-input-outline-border-color:#444}.md{--f7-input-item-border-radius:4px 4px 0 0;--f7-input-height:24px;--f7-input-font-size:16px;--f7-textarea-padding-vertical:0px;--f7-input-outline-border-radius:4px;--f7-floating-label-scale:calc(16 / 12);--f7-input-clear-button-size:24px;--f7-input-info-text-color:rgba(0, 0, 0, 0.45)}.md .dark,.md.dark{--f7-input-info-text-color:rgba(255, 255, 255, 0.45)}.md,.md .dark,.md [class*=color-]{--f7-input-placeholder-color:var(--f7-md-on-surface-variant);--f7-input-item-bg-color:var(--f7-md-surface-variant);--f7-input-border-color:var(--f7-md-outline);--f7-input-clear-button-color:var(--f7-md-on-surface-variant);--f7-input-outline-border-color:var(--f7-md-outline);--f7-input-text-color:var(--f7-md-on-surface);--f7-label-text-color:var(--f7-md-on-surface-variant)}input[type=date],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],select,textarea{box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;box-shadow:none;border-radius:0;outline:0;display:block;padding:0;margin:0;font-family:inherit;background:0 0;resize:none;font-size:inherit;color:inherit}input[type=date]:-internal-autofill-selected,input[type=datetime-local]:-internal-autofill-selected,input[type=email]:-internal-autofill-selected,input[type=month]:-internal-autofill-selected,input[type=number]:-internal-autofill-selected,input[type=password]:-internal-autofill-selected,input[type=search]:-internal-autofill-selected,input[type=tel]:-internal-autofill-selected,input[type=text]:-internal-autofill-selected,input[type=time]:-internal-autofill-selected,input[type=url]:-internal-autofill-selected,select:-internal-autofill-selected,textarea:-internal-autofill-selected{background-color:transparent!important;transition:background-color 5000s ease-in-out 0s!important}input[type=date]:-webkit-autofill,input[type=datetime-local]:-webkit-autofill,input[type=email]:-webkit-autofill,input[type=month]:-webkit-autofill,input[type=number]:-webkit-autofill,input[type=password]:-webkit-autofill,input[type=search]:-webkit-autofill,input[type=tel]:-webkit-autofill,input[type=text]:-webkit-autofill,input[type=time]:-webkit-autofill,input[type=url]:-webkit-autofill,select:-webkit-autofill,textarea:-webkit-autofill{background-color:transparent!important;-webkit-transition:background-color 5000s ease-in-out 0s!important;transition:background-color 5000s ease-in-out 0s!important}input[type=date]:-webkit-autofill, input[type=datetime-local]:-webkit-autofill, input[type=email]:-webkit-autofill, input[type=month]:-webkit-autofill, input[type=number]:-webkit-autofill, input[type=password]:-webkit-autofill, input[type=search]:-webkit-autofill, input[type=tel]:-webkit-autofill, input[type=text]:-webkit-autofill, input[type=time]:-webkit-autofill, input[type=url]:-webkit-autofill, select:-webkit-autofill, textarea:-webkit-autofill{background-color:transparent!important;-webkit-transition:background-color 5000s ease-in-out 0s!important;transition:background-color 5000s ease-in-out 0s!important}input[type=date]:-webkit-autofill-and-obscured,input[type=date]:autofill,input[type=datetime-local]:-webkit-autofill-and-obscured,input[type=datetime-local]:autofill,input[type=email]:-webkit-autofill-and-obscured,input[type=email]:autofill,input[type=month]:-webkit-autofill-and-obscured,input[type=month]:autofill,input[type=number]:-webkit-autofill-and-obscured,input[type=number]:autofill,input[type=password]:-webkit-autofill-and-obscured,input[type=password]:autofill,input[type=search]:-webkit-autofill-and-obscured,input[type=search]:autofill,input[type=tel]:-webkit-autofill-and-obscured,input[type=tel]:autofill,input[type=text]:-webkit-autofill-and-obscured,input[type=text]:autofill,input[type=time]:-webkit-autofill-and-obscured,input[type=time]:autofill,input[type=url]:-webkit-autofill-and-obscured,input[type=url]:autofill,select:-webkit-autofill-and-obscured,select:autofill,textarea:-webkit-autofill-and-obscured,textarea:autofill{background-color:transparent!important;-webkit-transition:background-color 5000s ease-in-out 0s!important;transition:background-color 5000s ease-in-out 0s!important}.textarea-resizable-shadow{opacity:0;position:absolute;z-index:-1000;pointer-events:none;left:-1000px;top:-1000px;visibility:hidden}.list input[type=date],.list input[type=datetime-local],.list input[type=email],.list input[type=month],.list input[type=number],.list input[type=password],.list input[type=search],.list input[type=tel],.list input[type=text],.list input[type=time],.list input[type=url],.list select{width:100%;height:var(--f7-input-height);color:var(--f7-input-text-color);font-size:var(--f7-input-font-size);background-color:var(--f7-input-bg-color,transparent);padding-left:var(--f7-input-padding-left);padding-right:var(--f7-input-padding-right)}.list input[type=date]::-moz-placeholder, .list input[type=datetime-local]::-moz-placeholder, .list input[type=email]::-moz-placeholder, .list input[type=month]::-moz-placeholder, .list input[type=number]::-moz-placeholder, .list input[type=password]::-moz-placeholder, .list input[type=search]::-moz-placeholder, .list input[type=tel]::-moz-placeholder, .list input[type=text]::-moz-placeholder, .list input[type=time]::-moz-placeholder, .list input[type=url]::-moz-placeholder, .list select::-moz-placeholder{color:var(--f7-input-placeholder-color)}.list input[type=date]::placeholder,.list input[type=datetime-local]::placeholder,.list input[type=email]::placeholder,.list input[type=month]::placeholder,.list input[type=number]::placeholder,.list input[type=password]::placeholder,.list input[type=search]::placeholder,.list input[type=tel]::placeholder,.list input[type=text]::placeholder,.list input[type=time]::placeholder,.list input[type=url]::placeholder,.list select::placeholder{color:var(--f7-input-placeholder-color)}.list textarea{width:100%;color:var(--f7-input-text-color);font-size:var(--f7-input-font-size);resize:none;line-height:1.4;height:var(--f7-textarea-height);background-color:var(--f7-input-bg-color,transparent);padding-top:var(--f7-textarea-padding-vertical);padding-bottom:var(--f7-textarea-padding-vertical);padding-left:var(--f7-input-padding-left);padding-right:var(--f7-input-padding-right)}.list textarea::-moz-placeholder{color:var(--f7-input-placeholder-color)}.list textarea::placeholder{color:var(--f7-input-placeholder-color)}.list textarea.resizable{height:calc(var(--f7-input-height) + var(--f7-textarea-padding-vertical) * 2)}.list input[type=date],.list input[type=datetime-local],.list input[type=month],.list input[type=time]{line-height:var(--f7-input-height)}.list .item-floating-label,.list .item-label{width:auto;vertical-align:top;flex-shrink:0;font-size:var(--f7-label-font-size);font-weight:var(--f7-label-font-weight);line-height:var(--f7-label-height);color:var(--f7-label-text-color);transition-duration:.2s;transition-property:transform,color}.list .item-floating-label{color:var(--f7-input-placeholder-color);max-width:calc(100% / var(--f7-floating-label-scale));pointer-events:none;left:var(--f7-input-padding-left);transform-origin:left center}.list .item-floating-label~.item-input-wrap input::-moz-placeholder, .list .item-floating-label~.item-input-wrap textarea::-moz-placeholder{opacity:0;transition-duration:.1s}.list .item-floating-label~.item-input-wrap input::placeholder,.list .item-floating-label~.item-input-wrap textarea::placeholder{opacity:0;transition-duration:.1s}.list .item-floating-label~.item-input-wrap input.input-focused::-moz-placeholder, .list .item-floating-label~.item-input-wrap textarea.input-focused::-moz-placeholder{opacity:1;transition-duration:.3s}.list .item-floating-label~.item-input-wrap input.input-focused::placeholder,.list .item-floating-label~.item-input-wrap textarea.input-focused::placeholder{opacity:1;transition-duration:.3s}.list .item-input-with-value .item-floating-label{color:var(--f7-label-text-color)}.list .item-input-focused .item-floating-label,.list .item-input-with-value .item-floating-label{transform:scale(1) translateY(0)!important}.list .item-input-wrap{width:100%;flex-shrink:1;position:relative}.input,.item-input{position:relative}.item-input .item-inner{display:flex;flex-direction:column;align-items:flex-start;justify-content:center}.input-error-message,.item-input-error-message{font-size:var(--f7-input-error-font-size);line-height:var(--f7-input-error-line-height);color:var(--f7-input-error-text-color);font-weight:var(--f7-input-error-font-weight);display:none;box-sizing:border-box}.input-info,.item-input-info{font-size:var(--f7-input-info-font-size);line-height:var(--f7-input-info-line-height);color:var(--f7-input-info-text-color)}.input-invalid .input-error-message,.input-invalid .item-input-error-message,.item-input-invalid .input-error-message,.item-input-invalid .item-input-error-message{display:block}.input-invalid .input-info,.input-invalid .item-input-info,.item-input-invalid .input-info,.item-input-invalid .item-input-info{display:none}.input{position:relative}.input input,.input select,.input textarea{width:100%}.input-clear-button{opacity:0;pointer-events:none;visibility:hidden;transition-duration:.1s;position:absolute;top:50%;border:none;padding:0;margin:0;outline:0;z-index:1;cursor:pointer;background:0 0;width:var(--f7-input-clear-button-size);height:var(--f7-input-clear-button-size);margin-top:calc(-1 * var(--f7-input-clear-button-size)/ 2);color:var(--f7-input-clear-button-color);right:0}.input-clear-button:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px}.input-clear-button:before{position:absolute;content:'';left:50%;top:50%}.item-input-wrap .input-clear-button{top:calc(var(--f7-input-height)/ 2)}.input-clear-button.active-state{opacity:.75!important}.input-with-value .input-clear-button,.input-with-value~.input-clear-button,.item-input-with-value .input-clear-button{opacity:1;pointer-events:auto;visibility:visible}.input-dropdown,.input-dropdown-wrap{position:relative}.input-dropdown-wrap:before,.input-dropdown:before{content:'';pointer-events:none;position:absolute;top:50%;margin-top:-2px;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid #727272;right:6px}.input-dropdown input,.input-dropdown select,.input-dropdown textarea,.input-dropdown-wrap input,.input-dropdown-wrap select,.input-dropdown-wrap textarea{padding-right:calc(20px + var(--f7-input-padding-right))}.input-outline::after,.item-input-outline .item-content::after,.item-input-outline.item-content::after{content:'';position:absolute;left:0;right:0;top:8px;bottom:8px;border:1px solid var(--f7-input-outline-border-color);border-radius:var(--f7-input-outline-border-radius);pointer-events:none;box-sizing:border-box;transition-duration:.2s}.input-outline .item-floating-label,.input-outline .item-label,.item-input-outline .item-content .item-floating-label,.item-input-outline .item-content .item-label,.item-input-outline.item-content .item-floating-label,.item-input-outline.item-content .item-label{pointer-events:none;background:var(--f7-page-bg-color);z-index:1;padding:4px}.input-outline.input-focused::after,.input-outline.item-input-focused::after,.item-input-outline .item-content.input-focused::after,.item-input-outline .item-content.item-input-focused::after,.item-input-outline.item-content.input-focused::after,.item-input-outline.item-content.item-input-focused::after{border-width:2px;border-color:var(--f7-input-outline-invalid-border-color,var(--f7-theme-color))}.input-outline.input-invalid::after,.input-outline.item-input-invalid::after,.item-input-outline .item-content.input-invalid::after,.item-input-outline .item-content.item-input-invalid::after,.item-input-outline.item-content.input-invalid::after,.item-input-outline.item-content.item-input-invalid::after{border-width:2px;border-color:var(--f7-input-outline-invalid-border-color,var(--f7-input-error-text-color))}.block-strong .item-input-outline .item-floating-label,.block-strong .item-input-outline .item-label,.ios .block-strong-ios .item-input-outline .item-floating-label,.ios .block-strong-ios .item-input-outline .item-label,.md .block-strong-md .item-input-outline .item-floating-label,.md .block-strong-md .item-input-outline .item-label{background:var(--f7-block-strong-bg-color)!important}.ios .list-strong-ios .item-input-outline .item-floating-label,.ios .list-strong-ios .item-input-outline .item-label,.list-strong .item-input-outline .item-floating-label,.list-strong .item-input-outline .item-label,.md .list-strong-md .item-input-outline .item-floating-label,.md .list-strong-md .item-input-outline .item-label{background:var(--f7-list-strong-bg-color)!important}.dark option{background-color:var(--f7-page-bg-color)}.ios .item-floating-label+.item-input-wrap,.ios .item-label+.item-input-wrap{margin-top:0}.ios .item-floating-label{transform:scale(var(--f7-floating-label-scale)) translateY(calc(var(--f7-label-height) + 25%))}.ios .item-input-focused .item-floating-label{color:var(--f7-label-text-color)}.ios .item-input .item-media{align-self:flex-start}.ios .item-input-wrap{margin-top:calc(-1 * var(--f7-list-item-padding-vertical));margin-bottom:calc(-1 * var(--f7-list-item-padding-vertical))}.ios .item-input:not(.item-input-outline) .item-content,.ios .item-input:not(.item-input-outline).item-content{background:var(--f7-input-item-bg-color)}.ios .input-error-message,.ios .input-info,.ios .item-input-error-message,.ios .item-input-info{position:relative;margin-bottom:6px;margin-top:-8px}.ios .item-input-focused .item-floating-label,.ios .item-input-focused .item-label{color:var(--f7-label-focused-text-color,var(--f7-label-text-color))}.ios .item-input-focused .item-inner:after{background:var(--f7-input-focused-border-color,var(--f7-list-item-border-color))}.ios .item-input-invalid .item-floating-label,.ios .item-input-invalid .item-label{color:var(--f7-label-invalid-text-color,var(--f7-label-text-color))}.ios .item-input-invalid .item-inner:after{background:var(--f7-input-invalid-border-color,var(--f7-list-item-border-color))}.ios .input-invalid input,.ios .input-invalid select,.ios .input-invalid textarea,.ios .item-input-invalid input,.ios .item-input-invalid select,.ios .item-input-invalid textarea{color:var(--f7-input-invalid-text-color,var(--f7-input-error-text-color))}.ios .input-clear-button:after{content:'delete_round_ios';font-size:calc(var(--f7-input-clear-button-size) / (14 / 10));line-height:1.4}.ios .input-clear-button:before{width:44px;height:44px;margin-left:-22px;margin-top:-22px}.ios .item-input-outline .item-content,.ios .item-input-outline.item-content{padding-top:8px;padding-bottom:8px;margin-left:16px;margin-right:16px}.ios li.item-input-outline:first-child,.ios li:first-child>.item-input-outline{padding-top:16px}.ios li.item-input-outline:first-child::after,.ios li:first-child>.item-input-outline::after{top:16px}.ios li.item-input-outline:last-child,.ios li:last-child>.item-input-outline{padding-bottom:16px}.ios li.item-input-outline:last-child::after,.ios li:last-child>.item-input-outline::after{bottom:16px}.ios .input-outline .item-inner,.ios .item-input-outline .item-content .item-inner,.ios .item-input-outline.item-content .item-inner{display:block;padding-top:0px;padding-bottom:0px}.ios .input-outline .item-input-wrap,.ios .item-input-outline .item-content .item-input-wrap,.ios .item-input-outline.item-content .item-input-wrap{margin-top:2px}.ios .input-outline .item-title+.item-input-wrap,.ios .item-input-outline .item-content .item-title+.item-input-wrap,.ios .item-input-outline.item-content .item-title+.item-input-wrap{margin-top:-22px}.ios .input-outline .item-floating-label,.ios .input-outline .item-label,.ios .item-input-outline .item-content .item-floating-label,.ios .item-input-outline .item-content .item-label,.ios .item-input-outline.item-content .item-floating-label,.ios .item-input-outline.item-content .item-label{display:inline-flex;margin:-8px -4px -4px;top:-4px}.ios .input-outline .item-floating-label,.ios .item-input-outline .item-content .item-floating-label,.ios .item-input-outline.item-content .item-floating-label{transform:scale(var(--f7-floating-label-scale)) translateY(calc(var(--f7-label-height)))}.md .item-input-wrap{min-height:var(--f7-input-height)}.md .item-floating-label{transform:scale(var(--f7-floating-label-scale)) translateY(calc((var(--f7-input-height)/ 2)/ var(--f7-floating-label-scale)))}.md .item-input .item-inner:after{display:none!important}.md .item-input .item-content,.md .item-input.item-content{margin-left:16px;margin-right:16px;padding-top:8px;padding-bottom:8px}.md .input:after{content:'';position:absolute;background-color:var(--f7-input-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.md .input::after{transform:scaleY(1)!important;transition-duration:.2s;bottom:0px}.md .input.input-focused::after{transform:scaleY(2)!important;background:var(--f7-input-focused-border-color,var(--f7-theme-color))}.md .input.input-invalid::after{transform:scaleY(2)!important;background:var(--f7-input-invalid-border-color,var(--f7-input-error-text-color))}.md .item-input:not(.item-input-outline) .item-content:after,.md .item-input:not(.item-input-outline).item-content:after{content:'';position:absolute;background-color:var(--f7-input-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.md .item-input:not(.item-input-outline) .item-content::before,.md .item-input:not(.item-input-outline).item-content::before{content:'';position:absolute;left:0;top:8px;bottom:8px;right:0;border-radius:var(--f7-input-item-border-radius);background:var(--f7-input-item-bg-color);pointer-events:none}.md .item-input:not(.item-input-outline) .item-content::after,.md .item-input:not(.item-input-outline).item-content::after{transform:scaleY(1)!important;transition-duration:.2s;bottom:8px}.md .item-input:not(.item-input-outline) .item-content.item-input-focused::after,.md .item-input:not(.item-input-outline).item-content.item-input-focused::after{transform:scaleY(2)!important;background:var(--f7-input-focused-border-color,var(--f7-theme-color))}.md .item-input:not(.item-input-outline) .item-content.input-invalid::after,.md .item-input:not(.item-input-outline) .item-content.item-input-invalid::after,.md .item-input:not(.item-input-outline).item-content.input-invalid::after,.md .item-input:not(.item-input-outline).item-content.item-input-invalid::after{transform:scaleY(2)!important;background:var(--f7-input-invalid-border-color,var(--f7-input-error-text-color))}.md .input-outline .item-inner,.md .item-input-outline .item-content .item-inner,.md .item-input-outline.item-content .item-inner{padding-top:16px;padding-bottom:16px}.md .input-outline .item-floating-label,.md .input-outline .item-label,.md .item-input-outline .item-content .item-floating-label,.md .item-input-outline .item-content .item-label,.md .item-input-outline.item-content .item-floating-label,.md .item-input-outline.item-content .item-label{--label-height:calc(var(--f7-label-height) + 8px);margin:calc(0px - 16px - var(--label-height)/ 2) -4px 4px}.md .input-outline .item-floating-label,.md .item-input-outline .item-content .item-floating-label,.md .item-input-outline.item-content .item-floating-label{transform:scale(var(--f7-floating-label-scale)) translateY(calc((var(--f7-input-height)/ 2) + 8px))}.md .input-with-error-message,.md .input-with-info,.md .item-input-with-error-message,.md .item-input-with-info{padding-bottom:24px!important}.md .input-error-message,.md .input-info,.md .item-input-error-message,.md .item-input-info{position:absolute;top:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;left:0}.md .item-input-focused .item-floating-label,.md .item-input-focused .item-label{color:var(--f7-label-focused-text-color,var(--f7-theme-color))}.md .input-focused:not(.input-outline):after,.md .item-input-focused:not(.item-input-outline) .item-input-wrap:after{background:var(--f7-input-focused-border-color,var(--f7-theme-color))}.md .input-focused:not(.input-outline):after,.md .input-invalid:not(.input-outline):after,.md .item-input-focused:not(.item-input-outline) .item-input-wrap:after,.md .item-input-invalid:not(.item-input-outline) .item-input-wrap:after{transform:scaleY(2)!important}.md .input-invalid:not(.input-outline):after,.md .item-input-invalid:not(.item-input-outline) .item-input-wrap:after{background:var(--f7-input-invalid-border-color,var(--f7-input-error-text-color))}.md .item-input-invalid .item-floating-label,.md .item-input-invalid .item-label{color:var(--f7-label-invalid-text-color,var(--f7-input-error-text-color))}.md .input-invalid input,.md .input-invalid select,.md .input-invalid textarea,.md .item-input-invalid input,.md .item-input-invalid select,.md .item-input-invalid textarea{color:var(--f7-input-invalid-text-color,var(--f7-input-text-color))}.md .input-clear-button:after{font-size:var(--f7-input-clear-button-size);content:'delete_round_md';line-height:1}.md .input-clear-button:before{width:48px;height:48px;margin-left:-24px;margin-top:-24px}:root{--f7-checkbox-icon-color:#fff;--f7-checkbox-extra-margin:0px}:root .dark,:root.dark{--f7-checkbox-inactive-color:rgba(255, 255, 255, 0.3);--f7-checkbox-icon-color:#000}.ios{--f7-checkbox-size:22px;--f7-checkbox-border-radius:50%;--f7-checkbox-border-width:1px;--f7-checkbox-inactive-color:#c7c7cc}.md{--f7-checkbox-size:18px;--f7-checkbox-border-radius:2px;--f7-checkbox-border-width:2px;--f7-checkbox-inactive-color:#6d6d6d}.checkbox{position:relative;display:inline-block;vertical-align:middle;z-index:1;background-color:transparent;--f7-touch-ripple-color:rgba(var(--f7-theme-color-rgb), 0.5)}.checkbox i,.icon-checkbox{flex-shrink:0;border:var(--f7-checkbox-border-width) solid var(--f7-checkbox-inactive-color);width:var(--f7-checkbox-size);height:var(--f7-checkbox-size);border-radius:var(--f7-checkbox-border-radius);box-sizing:border-box;position:relative;display:block}.checkbox i:after,.icon-checkbox:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;width:var(--f7-checkbox-size);height:var(--f7-checkbox-size);line-height:var(--f7-checkbox-size);top:calc(0px - var(--f7-checkbox-border-width));opacity:0;color:var(--f7-checkbox-icon-color);position:relative;transition-property:opacity;left:calc(0px - var(--f7-checkbox-border-width))}.checkbox i.color-white,.color-white .checkbox i,.color-white .icon-checkbox,.icon-checkbox.color-white{--f7-theme-color:#fff;--f7-checkbox-icon-color:#000}.checkbox i.color-black,.color-black .checkbox i,.color-black .icon-checkbox,.icon-checkbox.color-black{--f7-theme-color:#000;--f7-checkbox-icon-color:#fff}.checkbox input[type=checkbox]:not(:checked)~i:after,label.item-checkbox input[type=checkbox]:not(:checked)~* .icon-checkbox:after,label.item-checkbox input[type=checkbox]:not(:checked)~.icon-checkbox:after{font-size:0}.checkbox input[type=checkbox]:checked~i,.checkbox input[type=checkbox]:indeterminate~i,label.item-checkbox input[type=checkbox]:checked~* .icon-checkbox,label.item-checkbox input[type=checkbox]:checked~.icon-checkbox,label.item-checkbox input[type=checkbox]:indeterminate~* .icon-checkbox,label.item-checkbox input[type=checkbox]:indeterminate~.icon-checkbox{border-color:var(--f7-checkbox-active-color,var(--f7-theme-color));background-color:var(--f7-checkbox-active-color,var(--f7-theme-color))}.checkbox input[type=checkbox]:checked~i:after,.checkbox input[type=checkbox]:indeterminate~i:after,label.item-checkbox input[type=checkbox]:checked~* .icon-checkbox:after,label.item-checkbox input[type=checkbox]:checked~.icon-checkbox:after,label.item-checkbox input[type=checkbox]:indeterminate~* .icon-checkbox:after,label.item-checkbox input[type=checkbox]:indeterminate~.icon-checkbox:after{opacity:1}.checkbox input[type=checkbox]:indeterminate~i:after,label.item-checkbox input[type=checkbox]:indeterminate~* .icon-checkbox:after,label.item-checkbox input[type=checkbox]:indeterminate~.icon-checkbox:after{font-size:0;content:'';position:absolute;top:50%;width:70%;background:var(--f7-checkbox-icon-color);height:2px;border-radius:2px;margin-top:-1px;transition:0s;left:15%}.checkbox,label.item-checkbox{cursor:pointer}.checkbox input[type=checkbox],.checkbox input[type=radio],label.item-checkbox input[type=checkbox],label.item-checkbox input[type=radio]{display:none}label.item-checkbox{transition-duration:.3s}label.item-checkbox .item-content .item-media,label.item-checkbox.item-content .item-media{align-self:center}label.item-checkbox>.icon-checkbox{margin-right:calc(var(--f7-list-item-media-margin) + var(--f7-checkbox-extra-margin))}label.item-checkbox.active-state{background-color:var(--f7-list-link-pressed-bg-color)}label.item-checkbox.active-state:after{background-color:transparent}.disabled label.item-checkbox,label.item-checkbox.disabled{opacity:.55;pointer-events:none;opacity:.55!important;pointer-events:none!important}label.item-checkbox.item-checkbox-icon-end .item-inner{padding-right:calc(var(--f7-list-item-padding-horizontal) + var(--f7-safe-area-right) + var(--f7-checkbox-size) + 16px)}label.item-checkbox.item-checkbox-icon-end input[type=checkbox]~.icon-checkbox{position:absolute;right:calc(var(--f7-safe-area-right) + 16px);margin-right:0}.ios .checkbox i:after,.ios .icon-checkbox:after{content:'checkbox_ios';font-size:21px}.ios label.item-checkbox.active-state{transition-duration:0s}.ios .checkbox input[type=checkbox]:indeterminate~i:after,.ios label.item-checkbox input[type=checkbox]:indeterminate~* .icon-checkbox:after,.ios label.item-checkbox input[type=checkbox]:indeterminate~.icon-checkbox:after{height:2px;margin-top:-1px}.md .checkbox i,.md .icon-checkbox{transition-duration:.2s}.md .checkbox i:after,.md .icon-checkbox:after{content:'checkbox_md';transition-duration:.2s;font-size:15px}.md label.item-checkbox{position:relative;overflow:hidden;z-index:0}:root{--f7-radio-border-radius:50%;--f7-radio-extra-margin:0px}:root .dark,:root.dark{--f7-radio-inactive-color:rgba(255, 255, 255, 0.3)}.ios{--f7-radio-size:22px;--f7-radio-border-width:1px;--f7-radio-inactive-color:#c7c7cc}.md{--f7-radio-size:20px;--f7-radio-border-width:2px;--f7-radio-inactive-color:#6d6d6d}.radio{position:relative;display:inline-block;vertical-align:middle;z-index:1;--f7-touch-ripple-color:rgba(var(--f7-theme-color-rgb), 0.5)}.icon-radio{width:var(--f7-radio-size);height:var(--f7-radio-size);border-radius:var(--f7-radio-border-radius);position:relative;box-sizing:border-box;display:block;flex-shrink:0}.color-white .icon-radio,.color-white .radio,.icon-radio.color-white,.radio.color-white{--f7-theme-color:#fff}.color-black .icon-radio,.color-black .radio,.icon-radio.color-black,.radio.color-black{--f7-theme-color:#000}.md .icon-radio,.radio .icon-radio{border:var(--f7-radio-border-width) solid var(--f7-radio-inactive-color)}.radio,label.item-radio{cursor:pointer}.radio input[type=checkbox],.radio input[type=radio],label.item-radio input[type=checkbox],label.item-radio input[type=radio]{display:none}label.item-radio{transition-duration:.3s}label.item-radio .item-content .item-media,label.item-radio.item-content .item-media{align-self:center}label.item-radio.active-state{background-color:var(--f7-list-link-pressed-bg-color)}label.item-radio.active-state:after{background-color:transparent}.disabled label.item-radio,label.item-radio.disabled{opacity:.55;pointer-events:none;opacity:.55!important;pointer-events:none!important}.ios .icon-radio:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;width:calc(var(--f7-radio-size) - var(--f7-radio-border-width) * 2);height:calc(var(--f7-radio-size) - var(--f7-radio-border-width) * 2);line-height:calc(var(--f7-radio-size) - var(--f7-radio-border-width) * 2 + 1px);font-size:20px;content:'radio_ios';color:var(--f7-radio-active-color,var(--f7-theme-color));opacity:0}.ios .radio input[type=radio]:checked~.icon-radio:after,.ios label.item-radio input[type=radio]:checked~* .icon-radio:after,.ios label.item-radio input[type=radio]:checked~.icon-radio:after{opacity:1}.ios .radio input[type=radio]:checked~.icon-radio{border-color:var(--f7-radio-active-color,var(--f7-theme-color))}.ios label.item-radio:not(.item-radio-icon-start) input[type=radio]~.icon-radio{position:absolute;top:50%;margin-top:-11px;right:calc(var(--f7-safe-area-right) + 10px)}.ios label.item-radio:not(.item-radio-icon-start) .item-inner{padding-right:calc(var(--f7-safe-area-right) + 36px)}.ios label.item-radio-icon-start>.icon-radio{margin-right:calc(var(--f7-list-item-media-margin) + var(--f7-checkbox-extra-margin))}.ios label.item-radio.active-state{transition-duration:0s}.md .icon-radio{transition-duration:.2s}.md .icon-radio:after{content:'';position:absolute;width:10px;height:10px;left:50%;top:50%;margin-left:-5px;margin-top:-5px;background-color:var(--f7-radio-active-color,var(--f7-theme-color));border-radius:50%;transform:scale(0);transition-duration:.2s}.md .radio input[type=radio]:checked~.icon-radio,.md label.item-radio input[type=radio]:checked~* .icon-radio,.md label.item-radio input[type=radio]:checked~.icon-radio{border-color:var(--f7-radio-active-color,var(--f7-theme-color))}.md .radio input[type=radio]:checked~.icon-radio:after,.md label.item-radio input[type=radio]:checked~* .icon-radio:after,.md label.item-radio input[type=radio]:checked~.icon-radio:after{background-color:var(--f7-radio-active-color,var(--f7-theme-color));transform:scale(1)}.md label.item-radio{position:relative;overflow:hidden;z-index:0}.md label.item-radio:not(.item-radio-icon-end)>.icon-radio{margin-right:calc(var(--f7-list-item-media-margin) + var(--f7-radio-extra-margin))}.md label.item-radio-icon-end input[type=radio]~.icon-radio{position:absolute;top:50%;margin-top:-10px;right:calc(var(--f7-safe-area-right) + 16px)}.md label.item-radio-icon-end .item-inner{padding-right:calc(var(--f7-safe-area-right) + 52px)}.ios{--f7-toggle-width:52px;--f7-toggle-height:32px;--f7-toggle-inactive-knob-bg-color:#fff;--f7-toggle-active-knob-bg-color:#fff;--f7-toggle-inactive-border-color:#e5e5e5;--f7-toggle-inactive-bg-color:#fff}.ios .dark,.ios.dark{--f7-toggle-inactive-border-color:#555;--f7-toggle-inactive-bg-color:#555}.md{--f7-toggle-width:52px;--f7-toggle-height:32px}.md,.md .dark,.md [class*=color-]{--f7-toggle-inactive-bg-color:var(--f7-md-surface-variant);--f7-toggle-active-bg-color:var(--f7-theme-color);--f7-toggle-inactive-knob-bg-color:var(--f7-md-outline);--f7-toggle-active-knob-bg-color:var(--f7-md-on-primary);--f7-toggle-inactive-border-color:var(--f7-md-outline);--f7-toggle-active-border-color:var(--f7-theme-color)}.toggle,.toggle-icon{width:var(--f7-toggle-width);height:var(--f7-toggle-height);border-radius:var(--f7-toggle-height)}.toggle{display:inline-block;vertical-align:middle;position:relative;box-sizing:border-box;align-self:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.toggle input[type=checkbox]{display:none}.toggle input[disabled]~.toggle-icon{pointer-events:none}.toggle-icon{z-index:0;margin:0;padding:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;position:relative;transition:.3s;box-sizing:border-box;display:block;cursor:pointer}.toggle-icon:after,.toggle-icon:before{content:''}.toggle-icon:after{position:absolute;z-index:2;transform:translateX(0px);transition-duration:.3s}.ios .toggle{background:var(--f7-toggle-inactive-border-color)}.ios .toggle input[type=checkbox]:checked+.toggle-icon{background:var(--f7-toggle-active-color,var(--f7-theme-color))}.ios .toggle input[type=checkbox]:checked+.toggle-icon:before{background:var(--f7-toggle-active-bg-color,var(--f7-theme-color));transform:scale(0)}.ios .toggle input[type=checkbox]:checked+.toggle-icon:after{background:var(--f7-toggle-active-knob-bg-color);transform:translateX(calc(var(--f7-toggle-width) - var(--f7-toggle-height)))}.ios .toggle-icon{background:var(--f7-toggle-border-color)}.ios .toggle-icon:before{position:absolute;left:2px;top:2px;width:calc(var(--f7-toggle-width) - 4px);height:calc(var(--f7-toggle-height) - 4px);border-radius:var(--f7-toggle-height);box-sizing:border-box;background:var(--f7-toggle-inactive-bg-color);z-index:1;transition-duration:.3s;transform:scale(1)}.ios .toggle-icon:after{background:var(--f7-toggle-inactive-knob-bg-color);height:calc(var(--f7-toggle-height) - 4px);width:calc(var(--f7-toggle-height) - 4px);top:2px;left:2px;box-shadow:0 2px 4px rgba(0,0,0,.3);border-radius:calc(var(--f7-toggle-height) - 4px)}.ios .toggle-active-state input[type=checkbox]:not(:checked)+.toggle-icon:before{transform:scale(0)}.ios .toggle-active-state input[type=checkbox]+.toggle-icon:after{width:calc(var(--f7-toggle-height) + 4px)}.ios .toggle-active-state input[type=checkbox]:checked+.toggle-icon:after{transform:translateX(calc(var(--f7-toggle-width) - var(--f7-toggle-height) - 8px))}.md .toggle input[type=checkbox]:checked+.toggle-icon{background:var(--f7-toggle-active-bg-color);border-color:var(--f7-toggle-active-border-color)}.md .toggle input[type=checkbox]:checked+.toggle-icon:after{transform:translateX(calc(var(--f7-toggle-width) - var(--f7-toggle-height))) scale(1);background:var(--f7-toggle-active-knob-bg-color)}.md .toggle.active-state input[type=checkbox]:checked+.toggle-icon:after{transform:translateX(calc(var(--f7-toggle-width) - var(--f7-toggle-height))) scale(1.1)}.md .toggle-icon{background:var(--f7-toggle-inactive-bg-color);border:2px solid var(--f7-toggle-inactive-border-color)}.md .toggle-icon:after{background:var(--f7-toggle-inactive-knob-bg-color);height:calc(var(--f7-toggle-height) - 8px);width:calc(var(--f7-toggle-height) - 8px);top:2px;border-radius:var(--f7-toggle-height);transform:scale(.666);left:2px}.md .toggle-icon.active-state:after{transform:scale(1.1)}:root{--f7-range-scale-step-height:5px;--f7-range-scale-substep-width:1px;--f7-range-scale-substep-height:4px;--f7-range-bar-bg-color:rgba(0, 0, 0, 0.2)}:root .dark,:root.dark{--f7-range-bar-bg-color:rgba(255, 255, 255, 0.2)}.ios{--f7-range-size:28px;--f7-range-bar-size:4px;--f7-range-bar-border-radius:2px;--f7-range-knob-size:28px;--f7-range-knob-color:#fff;--f7-range-knob-box-shadow:0 2px 4px rgba(0, 0, 0, 0.3);--f7-range-label-size:24px;--f7-range-label-text-color:#000;--f7-range-label-bg-color:#fff;--f7-range-label-font-size:12px;--f7-range-label-font-weight:500;--f7-range-label-border-radius:5px;--f7-range-label-padding:0px 2px;--f7-range-scale-text-color:#666;--f7-range-scale-step-width:1px;--f7-range-scale-font-size:12px;--f7-range-scale-font-weight:400;--f7-range-scale-label-offset:4px}.md{--f7-range-size:20px;--f7-range-bar-size:2px;--f7-range-bar-border-radius:0px;--f7-range-knob-size:12px;--f7-range-knob-box-shadow:none;--f7-range-label-size:26px;--f7-range-label-font-weight:normal;--f7-range-label-font-size:10px;--f7-range-label-border-radius:50%;--f7-range-label-padding:0px;--f7-range-scale-step-width:2px;--f7-range-scale-font-size:12px;--f7-range-scale-font-weight:400;--f7-range-scale-label-offset:4px}.md,.md .dark,.md [class*=color-]{--f7-range-knob-color:var(--f7-theme-color);--f7-range-label-text-color:var(--f7-md-on-primary);--f7-range-label-bg-color:var(--f7-theme-color);--f7-range-scale-text-color:var(--f7-md-on-surface-variant)}.range-slider{display:block;position:relative;align-self:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.range-slider input[type=range]{display:none}.range-slider.range-slider-horizontal{width:100%;height:var(--f7-range-size);touch-action:pan-y}.range-slider.range-slider-vertical{height:100%;width:var(--f7-range-size);touch-action:pan-x}.range-bar{position:absolute;overflow:hidden;background:var(--f7-range-bar-bg-color);border-radius:var(--f7-range-bar-border-radius)}.range-slider-vertical .range-bar{left:50%;top:0;height:100%;width:var(--f7-range-bar-size);margin-left:calc(-1 * var(--f7-range-bar-size)/ 2)}.range-slider-horizontal .range-bar{left:0;top:50%;width:100%;height:var(--f7-range-bar-size);margin-top:calc(-1 * var(--f7-range-bar-size)/ 2)}.range-bar-active{position:absolute;background:var(--f7-range-bar-active-bg-color,var(--f7-theme-color))}.range-slider-horizontal .range-bar-active{left:0;top:0;height:100%}.range-slider-vertical .range-bar-active{left:0;bottom:0;width:100%}.range-slider-vertical-reversed .range-bar-active{top:0;bottom:auto}.range-knob-wrap{z-index:20;position:absolute;height:var(--f7-range-knob-size);width:var(--f7-range-knob-size)}.range-slider-horizontal .range-knob-wrap{top:50%;margin-top:calc(-1 * var(--f7-range-knob-size)/ 2);margin-left:calc(-1 * var(--f7-range-knob-size)/ 2);left:0}.range-slider-vertical .range-knob-wrap{left:50%;margin-left:calc(-1 * var(--f7-range-knob-size)/ 2);bottom:0;margin-bottom:calc(-1 * var(--f7-range-knob-size)/ 2)}.range-slider-vertical-reversed .range-knob-wrap{bottom:auto;top:0;margin-bottom:0;margin-top:calc(-1 * var(--f7-range-knob-size)/ 2)}.range-knob{box-sizing:border-box;border-radius:50%;position:absolute;left:0;top:0;width:100%;height:100%;z-index:1;background:var(--f7-range-knob-color,var(--f7-range-knob-bg-color,var(--f7-theme-color)));box-shadow:var(--f7-range-knob-box-shadow)}.range-knob:after{content:'';position:absolute;left:50%;top:50%;width:44px;height:44px;margin-left:-22px;margin-top:-22px}.range-knob-label{position:absolute;left:50%;bottom:100%;text-align:center;transition-duration:120ms;transition-property:transform;box-sizing:border-box;transform:translateY(100%) scale(0);height:var(--f7-range-label-size);line-height:var(--f7-range-label-size);min-width:var(--f7-range-label-size);color:var(--f7-range-label-text-color);background-color:var(--f7-range-label-bg-color,var(--f7-theme-color));font-size:var(--f7-range-label-font-size);font-weight:var(--f7-range-label-font-weight);border-radius:var(--f7-range-label-border-radius);padding:var(--f7-range-label-padding)}.range-knob-active-state .range-knob-label{transform:translateY(0%) scale(1)}.range-scale{position:absolute}.range-slider-horizontal .range-scale{top:50%;left:0;width:100%;margin-top:calc(var(--f7-range-bar-size)/ 2)}.range-slider-vertical .range-scale{right:50%;top:0;height:100%;margin-right:calc(var(--f7-range-bar-size)/ 2)}.range-scale-step{position:absolute;box-sizing:border-box;display:flex;font-size:var(--f7-range-scale-font-size);font-weight:var(--f7-range-scale-font-weight);color:var(--f7-range-scale-text-color,var(--f7-range-bar-bg-color));line-height:1}.range-scale-step:before{content:'';position:absolute;background:var(--f7-range-scale-step-bg-color,var(--f7-range-bar-bg-color))}.range-slider-horizontal .range-scale-step{justify-content:center;align-items:flex-start;width:var(--f7-range-scale-step-width);height:var(--f7-range-scale-step-height);padding-top:calc(var(--f7-range-scale-step-height) + var(--f7-range-scale-label-offset));top:0;margin-left:calc(-1 * var(--f7-range-scale-step-width)/ 2)}.range-slider-horizontal .range-scale-step:before{left:0;top:0;width:100%;height:var(--f7-range-scale-step-height)}.range-slider-horizontal .range-scale-step:first-child{margin-left:0}.range-slider-horizontal .range-scale-step:last-child{margin-left:calc(-1 * var(--f7-range-scale-step-width))}.range-slider-vertical .range-scale-step{line-height:1;justify-content:flex-end;align-items:center;height:var(--f7-range-scale-step-width);width:var(--f7-range-scale-step-height);padding-right:calc(var(--f7-range-scale-step-height) + var(--f7-range-scale-label-offset));right:0;margin-bottom:calc(-1 * var(--f7-range-scale-step-width)/ 2)}.range-slider-vertical .range-scale-step:first-child{margin-bottom:0}.range-slider-vertical .range-scale-step:last-child{margin-bottom:calc(-1 * var(--f7-range-scale-step-width))}.range-slider-vertical .range-scale-step:before{right:0;top:0;height:100%;width:var(--f7-range-scale-step-height)}.range-scale-substep{--f7-range-scale-step-bg-color:var(--f7-range-scale-substep-bg-color, var(--f7-range-bar-bg-color));--f7-range-scale-step-width:var(--f7-range-scale-substep-width);--f7-range-scale-step-height:var(--f7-range-scale-substep-height)}.ios .range-knob-label{margin-bottom:6px;transform:translateX(-50%) translateY(100%) scale(0)}.ios .range-knob-active-state .range-knob-label{transform:translateX(-50%) translateY(0%) scale(1)}.md .range-knob{transition-duration:.2s;transition-property:transform,background-color}.md .range-knob-active-state .range-knob{transform:scale(1.5)}.md .range-slider-min:not(.range-slider-dual) .range-knob{background:#fff!important;border:2px solid var(--f7-range-bar-bg-color)}.md .range-knob-label{width:var(--f7-range-label-size);margin-left:calc(-1 * var(--f7-range-label-size)/ 2);margin-bottom:8px}.md .range-knob-label:before{content:'';left:50%;top:0px;margin-left:calc(-1 * var(--f7-range-label-size)/ 2);position:absolute;z-index:-1;width:var(--f7-range-label-size);height:var(--f7-range-label-size);background:var(--f7-range-label-bg-color,var(--f7-theme-color));transform:rotate(-45deg);border-radius:50% 50% 50% 0}.md .range-knob-active-state .range-knob-label{transform:translateY(0%) scale(1)}.md .range-slider-label .range-knob-active-state .range-knob{transform:scale(0)}:root{--f7-stepper-raised-box-shadow:0 1px 3px rgba(0, 0, 0, 0.12),0 1px 2px rgba(0, 0, 0, 0.24);--f7-stepper-value-font-weight:500}.ios{--f7-stepper-height:28px;--f7-stepper-border-radius:5px;--f7-stepper-fill-button-text-color:#fff;--f7-stepper-large-height:44px;--f7-stepper-small-height:26px;--f7-stepper-value-font-size:17px;--f7-stepper-border-width:2px;--f7-stepper-border-color:var(--f7-theme-color);--f7-stepper-small-border-width:2px}.md{--f7-stepper-height:40px;--f7-stepper-border-radius:8px;--f7-stepper-large-height:48px;--f7-stepper-small-height:32px;--f7-stepper-value-font-size:14px;--f7-stepper-border-width:1px;--f7-stepper-small-border-width:1px;--f7-stepper-button-pressed-bg-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-stepper-fill-button-text-color:var(--f7-md-on-primary);--f7-stepper-fill-button-pressed-bg-color:var(--f7-theme-color);--f7-stepper-border-color:var(--f7-md-outline)}.stepper{--f7-touch-ripple-color:rgba(var(--f7-theme-color-rgb), 0.25);display:inline-flex;align-items:stretch;height:var(--f7-stepper-height);border-radius:var(--f7-stepper-border-radius)}.stepper-button,.stepper-button-minus,.stepper-button-plus{background-color:var(--f7-stepper-button-bg-color);width:40px;border-radius:var(--f7-stepper-border-radius);border:var(--f7-stepper-border-width) solid var(--f7-stepper-border-color);color:var(--f7-stepper-button-text-color,var(--f7-theme-color));line-height:calc(var(--f7-stepper-height) - var(--f7-stepper-border-width, 0px));text-align:center;display:flex;justify-content:center;align-content:center;align-items:center;flex-shrink:0;box-sizing:border-box;position:relative;cursor:pointer}.stepper-button-minus.active-state,.stepper-button-plus.active-state,.stepper-button.active-state{background-color:var(--f7-stepper-button-pressed-bg-color,rgba(var(--f7-theme-color-rgb),.15));color:var(--f7-stepper-button-pressed-text-color,var(--f7-stepper-button-text-color,var(--f7-theme-color)))}.stepper-button-minus:first-child,.stepper-button-plus:first-child,.stepper-button:first-child{border-radius:var(--f7-stepper-border-radius) 0 0 var(--f7-stepper-border-radius)}.stepper-button-minus:last-child,.stepper-button-plus:last-child,.stepper-button:last-child{border-radius:0 var(--f7-stepper-border-radius) var(--f7-stepper-border-radius) 0}.stepper-button .icon,.stepper-button-minus .icon,.stepper-button-plus .icon{pointer-events:none}.stepper-button+.stepper-button,.stepper-button+.stepper-button-minus,.stepper-button+.stepper-button-plus,.stepper-button-minus+.stepper-button,.stepper-button-minus+.stepper-button-minus,.stepper-button-minus+.stepper-button-plus,.stepper-button-plus+.stepper-button,.stepper-button-plus+.stepper-button-minus,.stepper-button-plus+.stepper-button-plus{border-left:none}.stepper-button-minus,.stepper-button-plus{-webkit-user-select:none;-moz-user-select:none;user-select:none}.stepper-button-minus:after,.stepper-button-minus:before,.stepper-button-plus:after,.stepper-button-plus:before{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:var(--f7-stepper-button-text-color,var(--f7-theme-color));border-radius:2px}.stepper-button-minus:after,.stepper-button-plus:after{width:15px;height:2px}.stepper-button-plus:before{height:15px;width:2px}.stepper-value{display:flex;align-content:center;align-items:center;justify-content:center}.stepper-input-wrap,.stepper-value{flex-shrink:1;text-align:center;border-top:var(--f7-stepper-border-width) solid var(--f7-stepper-border-color);border-bottom:var(--f7-stepper-border-width) solid var(--f7-stepper-border-color)}.stepper .stepper-input-wrap input,.stepper-value{width:45px;color:var(--f7-stepper-value-text-color,var(--f7-theme-color));font-size:var(--f7-stepper-value-font-size);font-weight:var(--f7-stepper-value-font-weight);text-align:center}.stepper .stepper-input-wrap input{height:100%}.ios .stepper-round-ios,.md .stepper-round-md,.stepper-round{--f7-stepper-border-radius:var(--f7-stepper-height)}.ios .stepper-fill-ios,.md .stepper-fill-md,.stepper-fill{--f7-stepper-border-color:var(--f7-stepper-fill-button-bg-color, var(--f7-theme-color));--f7-stepper-button-bg-color:var(--f7-stepper-fill-button-bg-color, var(--f7-theme-color));--f7-stepper-button-text-color:var(--f7-stepper-fill-button-text-color);--f7-touch-ripple-color:var(--f7-touch-ripple-white)}.ios .stepper-fill-ios .stepper-button+.stepper-button,.ios .stepper-fill-ios .stepper-button-minus+.stepper-button-plus,.ios .stepper-raised-ios .stepper-button+.stepper-button,.ios .stepper-raised-ios .stepper-button-minus+.stepper-button-plus,.md .stepper-fill-md .stepper-button+.stepper-button,.md .stepper-fill-md .stepper-button-minus+.stepper-button-plus,.md .stepper-raised-md .stepper-button+.stepper-button,.md .stepper-raised-md .stepper-button-minus+.stepper-button-plus,.stepper-fill .stepper-button+.stepper-button,.stepper-fill .stepper-button-minus+.stepper-button-plus,.stepper-raised .stepper-button+.stepper-button,.stepper-raised .stepper-button-minus+.stepper-button-plus{border-left:1px solid rgba(0,0,0,.1)}.ios .stepper-fill-ios .stepper-button+.stepper-button.active-state,.ios .stepper-fill-ios .stepper-button-minus+.stepper-button-plus.active-state,.md .stepper-fill-md .stepper-button+.stepper-button.active-state,.md .stepper-fill-md .stepper-button-minus+.stepper-button-plus.active-state,.stepper-fill .stepper-button+.stepper-button.active-state,.stepper-fill .stepper-button-minus+.stepper-button-plus.active-state{border-left-color:var(--f7-stepper-button-pressed-bg-color)}.ios .stepper-raised-ios:not(.stepper-fill-ios):not(.stepper-fill) .stepper-input-wrap,.ios .stepper-raised-ios:not(.stepper-fill-ios):not(.stepper-fill) .stepper-value,.md .stepper-raised-md:not(.stepper-fill-md):not(.stepper-fill) .stepper-input-wrap,.md .stepper-raised-md:not(.stepper-fill-md):not(.stepper-fill) .stepper-value,.stepper-raised:not(.stepper-fill) .stepper-input-wrap,.stepper-raised:not(.stepper-fill) .stepper-value{border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1)}.ios .stepper-large-ios,.md .stepper-large-md,.stepper-large{--f7-stepper-height:var(--f7-stepper-large-height)}.ios .stepper-small-ios,.md .stepper-small-md,.stepper-small{--f7-stepper-border-width:var(--f7-stepper-small-border-width);--f7-stepper-height:var(--f7-stepper-small-height)}.ios .stepper-fill.stepper-small,.ios .stepper-fill.stepper-small-ios{--f7-stepper-button-pressed-bg-color:transparent;--f7-stepper-button-pressed-text-color:var(--f7-theme-color)}.ios .stepper-raised-ios,.md .stepper-raised-md,.stepper-raised{--f7-stepper-border-width:0;box-shadow:var(--f7-stepper-raised-box-shadow)}.ios .stepper-button .f7-icons,.ios .stepper-button-minus .f7-icons,.ios .stepper-button-plus .f7-icons{font-size:22px}.ios .stepper-fill,.ios .stepper-fill-ios{--f7-stepper-button-pressed-bg-color:var(--f7-stepper-fill-button-pressed-bg-color, var(--f7-theme-color-tint))}.ios .stepper-small-ios.stepper-raised,.ios .stepper-small-ios.stepper-raised-ios,.ios .stepper-small.stepper-raised,.ios .stepper-small.stepper-raised-ios{--f7-stepper-border-width:0px}.ios .stepper-small .stepper-button,.ios .stepper-small .stepper-button-minus,.ios .stepper-small .stepper-button-plus,.ios .stepper-small-ios .stepper-button,.ios .stepper-small-ios .stepper-button-minus,.ios .stepper-small-ios .stepper-button-plus{transition-duration:.2s}.ios .stepper-small .stepper-button-minus.active-state:after,.ios .stepper-small .stepper-button-minus.active-state:before,.ios .stepper-small .stepper-button-plus.active-state:after,.ios .stepper-small .stepper-button-plus.active-state:before,.ios .stepper-small .stepper-button.active-state:after,.ios .stepper-small .stepper-button.active-state:before,.ios .stepper-small-ios .stepper-button-minus.active-state:after,.ios .stepper-small-ios .stepper-button-minus.active-state:before,.ios .stepper-small-ios .stepper-button-plus.active-state:after,.ios .stepper-small-ios .stepper-button-plus.active-state:before,.ios .stepper-small-ios .stepper-button.active-state:after,.ios .stepper-small-ios .stepper-button.active-state:before{transition-duration:.2s;background-color:var(--f7-theme-color)}.md .stepper-button,.md .stepper-button-minus,.md .stepper-button-plus{transition-duration:.3s;transform:translate3d(0,0,0);overflow:hidden}.md .stepper-fill,.md .stepper-fill-md{--f7-stepper-button-pressed-bg-color:var(--f7-stepper-fill-button-bg-color, var(--f7-theme-color))}.smart-select select{display:none}.smart-select .item-after{max-width:70%;overflow:hidden;text-overflow:ellipsis;position:relative;display:block}.smart-select-sheet .list ul,.smart-select-sheet .page,.smart-select-sheet .sheet-modal-inner{background:var(--f7-smart-select-sheet-bg,var(--f7-list-bg-color))}.smart-select-sheet .toolbar:after{content:'';position:absolute;background-color:var(--f7-smart-select-sheet-toolbar-border-color,var(--f7-bars-border-color));display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.smart-select-sheet .toolbar:after{display:block}.smart-select-sheet .list{margin:0}.smart-select-sheet .list ul:after,.smart-select-sheet .list ul:before{display:none!important}.smart-select-popover .popover-inner{max-height:40vh}:root{--f7-grid-gap:16px}.grid{display:grid}.grid.grid-gap{gap:var(--f7-grid-gap)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-13{grid-template-columns:repeat(13,minmax(0,1fr))}.grid-cols-14{grid-template-columns:repeat(14,minmax(0,1fr))}.grid-cols-15{grid-template-columns:repeat(15,minmax(0,1fr))}.grid-cols-16{grid-template-columns:repeat(16,minmax(0,1fr))}.grid-cols-17{grid-template-columns:repeat(17,minmax(0,1fr))}.grid-cols-18{grid-template-columns:repeat(18,minmax(0,1fr))}.grid-cols-19{grid-template-columns:repeat(19,minmax(0,1fr))}.grid-cols-20{grid-template-columns:repeat(20,minmax(0,1fr))}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.grid-rows-7{grid-template-rows:repeat(7,minmax(0,1fr))}.grid-rows-8{grid-template-rows:repeat(8,minmax(0,1fr))}.grid-rows-9{grid-template-rows:repeat(9,minmax(0,1fr))}.grid-rows-10{grid-template-rows:repeat(10,minmax(0,1fr))}.grid-rows-11{grid-template-rows:repeat(11,minmax(0,1fr))}.grid-rows-12{grid-template-rows:repeat(12,minmax(0,1fr))}.grid-rows-13{grid-template-rows:repeat(13,minmax(0,1fr))}.grid-rows-14{grid-template-rows:repeat(14,minmax(0,1fr))}.grid-rows-15{grid-template-rows:repeat(15,minmax(0,1fr))}.grid-rows-16{grid-template-rows:repeat(16,minmax(0,1fr))}.grid-rows-17{grid-template-rows:repeat(17,minmax(0,1fr))}.grid-rows-18{grid-template-rows:repeat(18,minmax(0,1fr))}.grid-rows-19{grid-template-rows:repeat(19,minmax(0,1fr))}.grid-rows-20{grid-template-rows:repeat(20,minmax(0,1fr))}@media (min-width:480px){.xsmall-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xsmall-grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.xsmall-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xsmall-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.xsmall-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xsmall-grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.xsmall-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xsmall-grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.xsmall-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xsmall-grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.xsmall-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xsmall-grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.xsmall-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xsmall-grid-rows-7{grid-template-rows:repeat(7,minmax(0,1fr))}.xsmall-grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xsmall-grid-rows-8{grid-template-rows:repeat(8,minmax(0,1fr))}.xsmall-grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xsmall-grid-rows-9{grid-template-rows:repeat(9,minmax(0,1fr))}.xsmall-grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xsmall-grid-rows-10{grid-template-rows:repeat(10,minmax(0,1fr))}.xsmall-grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xsmall-grid-rows-11{grid-template-rows:repeat(11,minmax(0,1fr))}.xsmall-grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xsmall-grid-rows-12{grid-template-rows:repeat(12,minmax(0,1fr))}.xsmall-grid-cols-13{grid-template-columns:repeat(13,minmax(0,1fr))}.xsmall-grid-rows-13{grid-template-rows:repeat(13,minmax(0,1fr))}.xsmall-grid-cols-14{grid-template-columns:repeat(14,minmax(0,1fr))}.xsmall-grid-rows-14{grid-template-rows:repeat(14,minmax(0,1fr))}.xsmall-grid-cols-15{grid-template-columns:repeat(15,minmax(0,1fr))}.xsmall-grid-rows-15{grid-template-rows:repeat(15,minmax(0,1fr))}.xsmall-grid-cols-16{grid-template-columns:repeat(16,minmax(0,1fr))}.xsmall-grid-rows-16{grid-template-rows:repeat(16,minmax(0,1fr))}.xsmall-grid-cols-17{grid-template-columns:repeat(17,minmax(0,1fr))}.xsmall-grid-rows-17{grid-template-rows:repeat(17,minmax(0,1fr))}.xsmall-grid-cols-18{grid-template-columns:repeat(18,minmax(0,1fr))}.xsmall-grid-rows-18{grid-template-rows:repeat(18,minmax(0,1fr))}.xsmall-grid-cols-19{grid-template-columns:repeat(19,minmax(0,1fr))}.xsmall-grid-rows-19{grid-template-rows:repeat(19,minmax(0,1fr))}.xsmall-grid-cols-20{grid-template-columns:repeat(20,minmax(0,1fr))}.xsmall-grid-rows-20{grid-template-rows:repeat(20,minmax(0,1fr))}}@media (min-width:568px){.small-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.small-grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.small-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.small-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.small-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.small-grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.small-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.small-grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.small-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.small-grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.small-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.small-grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.small-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.small-grid-rows-7{grid-template-rows:repeat(7,minmax(0,1fr))}.small-grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.small-grid-rows-8{grid-template-rows:repeat(8,minmax(0,1fr))}.small-grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.small-grid-rows-9{grid-template-rows:repeat(9,minmax(0,1fr))}.small-grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.small-grid-rows-10{grid-template-rows:repeat(10,minmax(0,1fr))}.small-grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.small-grid-rows-11{grid-template-rows:repeat(11,minmax(0,1fr))}.small-grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.small-grid-rows-12{grid-template-rows:repeat(12,minmax(0,1fr))}.small-grid-cols-13{grid-template-columns:repeat(13,minmax(0,1fr))}.small-grid-rows-13{grid-template-rows:repeat(13,minmax(0,1fr))}.small-grid-cols-14{grid-template-columns:repeat(14,minmax(0,1fr))}.small-grid-rows-14{grid-template-rows:repeat(14,minmax(0,1fr))}.small-grid-cols-15{grid-template-columns:repeat(15,minmax(0,1fr))}.small-grid-rows-15{grid-template-rows:repeat(15,minmax(0,1fr))}.small-grid-cols-16{grid-template-columns:repeat(16,minmax(0,1fr))}.small-grid-rows-16{grid-template-rows:repeat(16,minmax(0,1fr))}.small-grid-cols-17{grid-template-columns:repeat(17,minmax(0,1fr))}.small-grid-rows-17{grid-template-rows:repeat(17,minmax(0,1fr))}.small-grid-cols-18{grid-template-columns:repeat(18,minmax(0,1fr))}.small-grid-rows-18{grid-template-rows:repeat(18,minmax(0,1fr))}.small-grid-cols-19{grid-template-columns:repeat(19,minmax(0,1fr))}.small-grid-rows-19{grid-template-rows:repeat(19,minmax(0,1fr))}.small-grid-cols-20{grid-template-columns:repeat(20,minmax(0,1fr))}.small-grid-rows-20{grid-template-rows:repeat(20,minmax(0,1fr))}}@media (min-width:768px){.medium-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.medium-grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.medium-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.medium-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.medium-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.medium-grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.medium-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.medium-grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.medium-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.medium-grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.medium-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.medium-grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.medium-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.medium-grid-rows-7{grid-template-rows:repeat(7,minmax(0,1fr))}.medium-grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.medium-grid-rows-8{grid-template-rows:repeat(8,minmax(0,1fr))}.medium-grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.medium-grid-rows-9{grid-template-rows:repeat(9,minmax(0,1fr))}.medium-grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.medium-grid-rows-10{grid-template-rows:repeat(10,minmax(0,1fr))}.medium-grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.medium-grid-rows-11{grid-template-rows:repeat(11,minmax(0,1fr))}.medium-grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.medium-grid-rows-12{grid-template-rows:repeat(12,minmax(0,1fr))}.medium-grid-cols-13{grid-template-columns:repeat(13,minmax(0,1fr))}.medium-grid-rows-13{grid-template-rows:repeat(13,minmax(0,1fr))}.medium-grid-cols-14{grid-template-columns:repeat(14,minmax(0,1fr))}.medium-grid-rows-14{grid-template-rows:repeat(14,minmax(0,1fr))}.medium-grid-cols-15{grid-template-columns:repeat(15,minmax(0,1fr))}.medium-grid-rows-15{grid-template-rows:repeat(15,minmax(0,1fr))}.medium-grid-cols-16{grid-template-columns:repeat(16,minmax(0,1fr))}.medium-grid-rows-16{grid-template-rows:repeat(16,minmax(0,1fr))}.medium-grid-cols-17{grid-template-columns:repeat(17,minmax(0,1fr))}.medium-grid-rows-17{grid-template-rows:repeat(17,minmax(0,1fr))}.medium-grid-cols-18{grid-template-columns:repeat(18,minmax(0,1fr))}.medium-grid-rows-18{grid-template-rows:repeat(18,minmax(0,1fr))}.medium-grid-cols-19{grid-template-columns:repeat(19,minmax(0,1fr))}.medium-grid-rows-19{grid-template-rows:repeat(19,minmax(0,1fr))}.medium-grid-cols-20{grid-template-columns:repeat(20,minmax(0,1fr))}.medium-grid-rows-20{grid-template-rows:repeat(20,minmax(0,1fr))}}@media (min-width:1024px){.large-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.large-grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.large-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.large-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.large-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.large-grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.large-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.large-grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.large-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.large-grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.large-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.large-grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.large-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.large-grid-rows-7{grid-template-rows:repeat(7,minmax(0,1fr))}.large-grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.large-grid-rows-8{grid-template-rows:repeat(8,minmax(0,1fr))}.large-grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.large-grid-rows-9{grid-template-rows:repeat(9,minmax(0,1fr))}.large-grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.large-grid-rows-10{grid-template-rows:repeat(10,minmax(0,1fr))}.large-grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.large-grid-rows-11{grid-template-rows:repeat(11,minmax(0,1fr))}.large-grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.large-grid-rows-12{grid-template-rows:repeat(12,minmax(0,1fr))}.large-grid-cols-13{grid-template-columns:repeat(13,minmax(0,1fr))}.large-grid-rows-13{grid-template-rows:repeat(13,minmax(0,1fr))}.large-grid-cols-14{grid-template-columns:repeat(14,minmax(0,1fr))}.large-grid-rows-14{grid-template-rows:repeat(14,minmax(0,1fr))}.large-grid-cols-15{grid-template-columns:repeat(15,minmax(0,1fr))}.large-grid-rows-15{grid-template-rows:repeat(15,minmax(0,1fr))}.large-grid-cols-16{grid-template-columns:repeat(16,minmax(0,1fr))}.large-grid-rows-16{grid-template-rows:repeat(16,minmax(0,1fr))}.large-grid-cols-17{grid-template-columns:repeat(17,minmax(0,1fr))}.large-grid-rows-17{grid-template-rows:repeat(17,minmax(0,1fr))}.large-grid-cols-18{grid-template-columns:repeat(18,minmax(0,1fr))}.large-grid-rows-18{grid-template-rows:repeat(18,minmax(0,1fr))}.large-grid-cols-19{grid-template-columns:repeat(19,minmax(0,1fr))}.large-grid-rows-19{grid-template-rows:repeat(19,minmax(0,1fr))}.large-grid-cols-20{grid-template-columns:repeat(20,minmax(0,1fr))}.large-grid-rows-20{grid-template-rows:repeat(20,minmax(0,1fr))}}@media (min-width:1200px){.xlarge-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xlarge-grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.xlarge-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xlarge-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.xlarge-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xlarge-grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.xlarge-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xlarge-grid-rows-4{grid-template-rows:repeat(4,minmax(0,1fr))}.xlarge-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xlarge-grid-rows-5{grid-template-rows:repeat(5,minmax(0,1fr))}.xlarge-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xlarge-grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.xlarge-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.xlarge-grid-rows-7{grid-template-rows:repeat(7,minmax(0,1fr))}.xlarge-grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.xlarge-grid-rows-8{grid-template-rows:repeat(8,minmax(0,1fr))}.xlarge-grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.xlarge-grid-rows-9{grid-template-rows:repeat(9,minmax(0,1fr))}.xlarge-grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.xlarge-grid-rows-10{grid-template-rows:repeat(10,minmax(0,1fr))}.xlarge-grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.xlarge-grid-rows-11{grid-template-rows:repeat(11,minmax(0,1fr))}.xlarge-grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.xlarge-grid-rows-12{grid-template-rows:repeat(12,minmax(0,1fr))}.xlarge-grid-cols-13{grid-template-columns:repeat(13,minmax(0,1fr))}.xlarge-grid-rows-13{grid-template-rows:repeat(13,minmax(0,1fr))}.xlarge-grid-cols-14{grid-template-columns:repeat(14,minmax(0,1fr))}.xlarge-grid-rows-14{grid-template-rows:repeat(14,minmax(0,1fr))}.xlarge-grid-cols-15{grid-template-columns:repeat(15,minmax(0,1fr))}.xlarge-grid-rows-15{grid-template-rows:repeat(15,minmax(0,1fr))}.xlarge-grid-cols-16{grid-template-columns:repeat(16,minmax(0,1fr))}.xlarge-grid-rows-16{grid-template-rows:repeat(16,minmax(0,1fr))}.xlarge-grid-cols-17{grid-template-columns:repeat(17,minmax(0,1fr))}.xlarge-grid-rows-17{grid-template-rows:repeat(17,minmax(0,1fr))}.xlarge-grid-cols-18{grid-template-columns:repeat(18,minmax(0,1fr))}.xlarge-grid-rows-18{grid-template-rows:repeat(18,minmax(0,1fr))}.xlarge-grid-cols-19{grid-template-columns:repeat(19,minmax(0,1fr))}.xlarge-grid-rows-19{grid-template-rows:repeat(19,minmax(0,1fr))}.xlarge-grid-cols-20{grid-template-columns:repeat(20,minmax(0,1fr))}.xlarge-grid-rows-20{grid-template-rows:repeat(20,minmax(0,1fr))}}:root{--f7-calendar-height:340px;--f7-calendar-sheet-landscape-height:220px;--f7-calendar-popover-width:320px;--f7-calendar-popover-height:320px;--f7-calendar-modal-height:420px;--f7-calendar-modal-max-width:380px;--f7-calendar-week-header-bg-color:transparent;--f7-calendar-footer-padding:0 8px;--f7-calendar-week-header-font-size:11px;--f7-calendar-disabled-text-color:#d4d4d4;--f7-calendar-event-dot-size:4px;--f7-calendar-time-selector-height:28px;--f7-calendar-picker-pressed-bg-color:rgba(0, 0, 0, 0.1);--f7-calendar-picker-hover-bg-color:rgba(0, 0, 0, 0.03);--f7-calendar-time-selector-bg-color:rgba(0, 0, 0, 0.05)}:root .dark,:root.dark{--f7-calendar-picker-pressed-bg-color:rgba(255, 255, 255, 0.08);--f7-calendar-picker-hover-bg-color:rgba(255, 255, 255, 0.03);--f7-calendar-time-selector-bg-color:rgba(255, 255, 255, 0.1)}.ios{--f7-calendar-selected-text-color:#fff;--f7-calendar-header-height:44px;--f7-calendar-header-font-size:17px;--f7-calendar-header-font-weight:600;--f7-calendar-header-padding:0 8px;--f7-calendar-footer-height:44px;--f7-calendar-footer-font-size:17px;--f7-calendar-week-header-height:18px;--f7-calendar-day-font-size:15px;--f7-calendar-day-size:30px;--f7-calendar-picker-font-size:17px;--f7-calendar-time-selector-font-size:17px;--f7-calendar-modal-border-radius:4px;--f7-calendar-modal-box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0, 0, 0, 0.12);--f7-calendar-prev-next-text-color:#c8c8c8;--f7-calendar-sheet-border-color:#929499;--f7-calendar-sheet-bg-color:#fff;--f7-calendar-week-header-text-color:#5e5e5e;--f7-calendar-modal-bg-color:#fff;--f7-calendar-day-text-color:#000;--f7-calendar-today-text-color:#000;--f7-calendar-today-bg-color:#e3e3e3}.ios .dark,.ios.dark{--f7-calendar-prev-next-text-color:#5e5e5e;--f7-calendar-sheet-border-color:var(--f7-bars-border-color);--f7-calendar-sheet-bg-color:#121212;--f7-calendar-week-header-text-color:#aaa;--f7-calendar-modal-bg-color:#121212;--f7-calendar-day-text-color:#fff;--f7-calendar-today-text-color:#fff;--f7-calendar-today-bg-color:#333}.md{--f7-calendar-sheet-border-color:transparent;--f7-calendar-header-height:64px;--f7-calendar-header-font-size:24px;--f7-calendar-header-font-weight:400;--f7-calendar-header-padding:0 24px;--f7-calendar-footer-height:56px;--f7-calendar-footer-font-size:14px;--f7-calendar-week-header-height:24px;--f7-calendar-day-font-size:14px;--f7-calendar-today-bg-color:none;--f7-calendar-day-size:32px;--f7-calendar-picker-font-size:14px;--f7-calendar-time-selector-font-size:14px;--f7-calendar-modal-border-radius:28px;--f7-calendar-modal-box-shadow:none}.md,.md .dark,.md [class*=color-]{--f7-calendar-sheet-bg-color:var(--f7-md-surface-1);--f7-calendar-selected-text-color:var(--f7-md-on-primary);--f7-calendar-week-header-text-color:var(--f7-md-on-surface-variant);--f7-calendar-day-text-color:var(--f7-md-on-surface);--f7-calendar-prev-next-text-color:rgba(var(--f7-md-on-surface-variant-rgb), 0.55);--f7-calendar-today-text-color:var(--f7-theme-color);--f7-calendar-modal-bg-color:var(--f7-md-surface-1)}.calendar{overflow:hidden;height:var(--f7-calendar-height);width:100%;display:flex;flex-direction:column}.calendar.modal-in{display:flex}@media (orientation:landscape) and (max-height:415px){.calendar.calendar-sheet{height:var(--f7-calendar-sheet-landscape-height)}.calendar.calendar-modal{height:calc(100vh - var(--f7-navbar-height))}}.calendar.calendar-inline,.calendar.calendar-popover .calendar{position:relative}.calendar-sheet{--f7-sheet-border-color:var(--f7-calendar-sheet-border-color);background:var(--f7-calendar-sheet-bg-color);padding-bottom:var(--f7-safe-area-bottom);height:calc(var(--f7-calendar-height) + var(--f7-safe-area-bottom))}.calendar-sheet:before{z-index:600}.calendar-modal .toolbar:before,.calendar-popover .toolbar:before,.calendar-sheet .toolbar:before{display:none}.calendar-popover{width:var(--f7-calendar-popover-width)}.calendar-popover .calendar-header,.calendar-popover .toolbar-top{border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0;overflow:hidden}.calendar-popover .calendar-header+.toolbar-top{border-radius:0}.calendar-popover .calendar-footer,.calendar-popover .toolbar-bottom{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.calendar-popover .calendar{height:var(--f7-calendar-popover-height);position:relative;z-index:1}.calendar-popover .calendar-month-picker,.calendar-popover .calendar-time-picker,.calendar-popover .calendar-year-picker{border-radius:var(--f7-popover-border-radius)}.calendar-popover .calendar-month-picker .picker,.calendar-popover .calendar-time-picker .picker,.calendar-popover .calendar-year-picker .picker{height:100%;display:flex;flex-direction:column}.calendar-header{width:100%;position:relative;overflow:hidden;flex-shrink:0;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box;padding:var(--f7-calendar-header-padding);background-color:var(--f7-calendar-header-bg-color,var(--f7-bars-bg-color));color:var(--f7-calendar-header-text-color,var(--f7-bars-text-color));height:var(--f7-calendar-header-height);line-height:var(--f7-calendar-header-height);font-size:var(--f7-calendar-header-font-size);font-weight:var(--f7-calendar-header-font-weight)}.calendar-header a{color:var(--f7-calendar-header-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.calendar-footer{width:100%;flex-shrink:0;padding:var(--f7-calendar-footer-padding);background-color:var(--f7-calendar-footer-bg-color,var(--f7-bars-bg-color));color:var(--f7-calendar-footer-text-color,var(--f7-bars-text-color));height:var(--f7-calendar-footer-height);font-size:var(--f7-calendar-header-font-size);display:flex;justify-content:flex-end;box-sizing:border-box;align-items:center;position:relative}.calendar-footer a{color:var(--f7-calendar-footer-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.calendar-footer:before{content:'';position:absolute;background-color:var(--f7-calendar-footer-border-color,var(--f7-bars-border-color));display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.calendar-modal{position:absolute;height:var(--f7-calendar-modal-height);overflow:hidden;top:50%;left:50%;min-width:300px;max-width:var(--f7-calendar-modal-max-width);transform:translate3d(-50%,100vh,0);transition-property:transform;display:flex;z-index:13500;background:var(--f7-calendar-modal-bg-color);width:90%;border-radius:var(--f7-calendar-modal-border-radius);box-shadow:var(--f7-calendar-modal-box-shadow);transition-timing-function:cubic-bezier(0,1,0.2,1)}.calendar-modal.modal-in,.calendar-modal.modal-out{transition-duration:.4s}.calendar-modal.modal-in{transform:translate3d(-50%,-50%,0)}.calendar-modal.modal-out{transform:translate3d(-50%,100vh,0)}.calendar-week-header{display:flex;box-sizing:border-box;position:relative;font-size:var(--f7-calendar-week-header-font-size);background-color:var(--f7-calendar-week-header-bg-color,var(--f7-bars-bg-color));color:var(--f7-calendar-week-header-text-color,var(--f7-bars-text-color));height:var(--f7-calendar-week-header-height);padding-left:var(--f7-safe-area-left);padding-right:var(--f7-safe-area-right)}.calendar-week-header .calendar-week-day{flex-shrink:1;width:calc(100% / 7);text-align:center;line-height:var(--f7-calendar-week-header-height)}.calendar-months{width:100%;height:100%;overflow:hidden;position:relative;flex-shrink:10}.calendar-months-wrapper{position:relative;width:100%;height:100%;transition:.3s}.calendar-month{display:flex;flex-direction:column;width:100%;height:100%;position:absolute;left:0;top:0}.calendar-row{height:16.66666667%;display:flex;flex-shrink:1;width:100%;position:relative;box-sizing:border-box;padding-left:var(--f7-safe-area-left);padding-right:var(--f7-safe-area-right)}.calendar-modal .calendar-months:first-child .calendar-row:first-child:before,.calendar-popover .calendar-months:first-child .calendar-row:first-child:before{display:none!important}.calendar-day{flex-shrink:1;display:flex;justify-content:center;align-items:center;box-sizing:border-box;width:14.28571429%;text-align:center;cursor:pointer;z-index:20;color:var(--f7-calendar-day-text-color);height:100%;font-size:var(--f7-calendar-day-font-size)}.calendar-day-today .calendar-day-number{color:var(--f7-calendar-today-text-color,var(--f7-theme-color));background-color:var(--f7-calendar-today-bg-color)}.calendar-day-next,.calendar-day-prev{color:var(--f7-calendar-prev-next-text-color)}.calendar-day-disabled{color:var(--f7-calendar-disabled-text-color);cursor:auto}.calendar-day-selected .calendar-day-number{color:var(--f7-calendar-selected-text-color);background-color:var(--f7-calendar-selected-bg-color,var(--f7-theme-color))}.calendar-day-number{display:inline-block;border-radius:50%;position:relative;width:var(--f7-calendar-day-size);height:var(--f7-calendar-day-size);line-height:var(--f7-calendar-day-size)}.calendar-day-events{position:absolute;display:flex;left:0;width:100%;top:100%;align-items:center;justify-content:center;margin-top:1px}.calendar-day-event{width:var(--f7-calendar-event-dot-size);height:var(--f7-calendar-event-dot-size);border-radius:calc(var(--f7-calendar-event-dot-size)/ 2);background-color:var(--f7-calendar-event-bg-color)}.calendar-day-event+.calendar-day-event{margin-left:2px}.calendar-day-selected-left,.calendar-day-selected-range,.calendar-day-selected-right{position:relative}.calendar-day-selected-left:before,.calendar-day-selected-range:before,.calendar-day-selected-right:before{width:100%;height:var(--f7-calendar-day-size);content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);z-index:-1;background-color:var(--f7-calendar-selected-bg-color,var(--f7-theme-color));opacity:.2}.calendar-day-selected-left:before,.calendar-day-selected-range:first-child:before{left:auto;right:0;width:calc(50% + var(--f7-calendar-day-size)/ 2);border-radius:var(--f7-calendar-day-size) 0 0 var(--f7-calendar-day-size)}.calendar-day-selected-range:last-child:before,.calendar-day-selected-right:before{width:calc(50% + var(--f7-calendar-day-size)/ 2);border-radius:0 var(--f7-calendar-day-size) var(--f7-calendar-day-size) 0}.calendar-day-selected-left:last-child:before,.calendar-day-selected-right:first-child:before{display:none}.calendar-day-selected-left.calendar-day-selected-right:before{content:none;display:none}.calendar-day-selected-range .calendar-day-number{background-color:transparent;color:inherit}.calendar-month-selector,.calendar-year-selector{display:flex;justify-content:space-between;align-items:center;width:50%;max-width:200px;flex-shrink:10;margin-left:auto;margin-right:auto}.calendar-month-selector .calendar-day-number,.calendar-year-selector .calendar-day-number{flex-shrink:1;position:relative;overflow:hidden;text-overflow:ellipsis}.calendar-month-selector a.icon-only,.calendar-year-selector a.icon-only{min-width:36px}.calendar-month-picker,.calendar-time-picker,.calendar-year-picker{position:relative;width:100%;height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;background:0 0}.calendar-month-picker .picker-columns,.calendar-year-picker .picker-columns{text-align:center}.calendar-month-picker-item,.calendar-year-picker-item{display:flex;justify-content:center;align-items:center;position:relative;overflow:hidden;cursor:pointer;transition-duration:.1s;box-sizing:border-box}.calendar-month-picker-item span,.calendar-year-picker-item span{white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box;position:relative;overflow:hidden;pointer-events:none}.calendar-month-picker-item.active-state,.calendar-year-picker-item.active-state{background:var(--f7-calendar-picker-pressed-bg-color)}.calendar-month-picker-item{padding:5px}.sheet-modal .calendar-month-picker-item{width:25%;height:33.33333333%}.sheet-modal .calendar-month-picker-item:nth-child(4n+1):before{display:none!important}.sheet-modal .calendar-month-picker-item:nth-child(n+9):after{display:none!important}.calendar-modal .calendar-month-picker-item,.popover .calendar-month-picker-item{width:33.33333333%;height:25%}.calendar-modal .calendar-month-picker-item:nth-child(3n+1):before,.popover .calendar-month-picker-item:nth-child(3n+1):before{display:none!important}.calendar-modal .calendar-month-picker-item:nth-child(n+10):after,.popover .calendar-month-picker-item:nth-child(n+10):after{display:none!important}.calendar-month-picker-item-current,.calendar-year-picker-item-current{color:var(--f7-calendar-picker-selected-text-color,var(--f7-theme-color))}.calendar-year-picker{overflow:auto;--webkit-overflow-scrolling:touch}.calendar-year-picker-item{height:34px;line-height:34px;width:100%}.calendar-time-selector{flex-shrink:0;font-size:var(--f7-calendar-time-selector-font-size);position:relative;display:flex;justify-content:space-between;align-items:center;padding:12px 16px}.calendar-time-selector a{overflow:hidden;position:relative;justify-content:center;align-items:center;display:flex;box-sizing:border-box;height:var(--f7-calendar-time-selector-height);background-color:var(--f7-calendar-time-selector-bg-color);padding:0 16px;border-radius:8px}.calendar-time-selector>span{font-weight:500}.calendar-time-selector .segmented{margin-left:8px}.calendar-month-picker-popover,.calendar-time-picker-popover,.calendar-year-picker-popover{height:240px;width:240px}.calendar-month-picker-popover .popover-inner,.calendar-time-picker-popover .popover-inner,.calendar-year-picker-popover .popover-inner{height:100%;overflow:hidden}.calendar-time-picker{--f7-picker-popover-height:100%;--f7-picker-inline-height:100%}.calendar-time-picker .toolbar{flex-shrink:0;top:0!important}.calendar-time-picker .picker{height:100%;display:flex;flex-direction:column}:root{--f7-picker-height:260px;--f7-picker-inline-height:200px;--f7-picker-popover-height:260px;--f7-picker-popover-width:280px;--f7-picker-landscape-height:200px;--f7-picker-item-height:36px}.ios{--f7-picker-column-font-size:20px;--f7-picker-item-selected-text-color:#000;--f7-picker-item-selected-bg-color:rgba(0, 0, 0, 0.12);--f7-picker-divider-text-color:#000;--f7-picker-item-text-color:rgba(0, 0, 0, 0.45)}.ios .dark,.ios.dark{--f7-picker-item-selected-text-color:#fff;--f7-picker-item-selected-bg-color:rgba(255, 255, 255, 0.1);--f7-picker-divider-text-color:#fff;--f7-picker-item-text-color:rgba(255, 255, 255, 0.55)}.md{--f7-picker-column-font-size:20px}.md,.md .dark,.md [class*=color-]{--f7-picker-item-selected-text-color:var(--f7-md-on-surface);--f7-picker-item-text-color:var(--f7-md-on-surface-variant);--f7-picker-divider-text-color:var(--f7-md-on-surface);--f7-picker-item-selected-border-color:var(--f7-md-outline)}.picker{width:100%;height:var(--f7-picker-height)}.picker.picker-inline{height:var(--f7-picker-inline-height)}.popover .picker{height:var(--f7-picker-popover-height)}@media (orientation:landscape) and (max-height:415px){.picker:not(.picker-inline){height:var(--f7-picker-landscape-height)}}.picker.sheet-modal{background:var(--f7-picker-sheet-bg-color,var(--f7-sheet-bg-color))}.picker-popover{width:var(--f7-picker-popover-width)}.picker-popover .toolbar{background:0 0;border-radius:var(--f7-popover-border-radius) var(--f7-popover-border-radius) 0 0}.picker-popover .toolbar:before{display:none!important}.picker-popover .toolbar+.picker-columns{height:calc(100% - var(--f7-toolbar-height))}.picker-columns{display:flex;overflow:hidden;justify-content:center;padding:0;text-align:right;height:100%;position:relative;font-size:var(--f7-picker-column-font-size);--f7-picker-mask-bg-color:transparent}.popover .picker-columns{border-radius:0 0 var(--f7-popover-border-radius) var(--f7-popover-border-radius)}.picker-columns::after,.picker-columns::before{content:'';position:absolute;left:0;width:100%;height:20%;z-index:100;pointer-events:none}.page .picker-columns{--f7-picker-mask-bg-color:var(--f7-page-bg-color)}.block-strong .picker-columns{--f7-picker-mask-bg-color:var(--f7-block-strong-bg-color)}.picker-sheet .picker-columns{--f7-picker-mask-bg-color:var(--f7-picker-sheet-bg-color, var(--f7-sheet-bg-color))}.picker-popover .picker-columns{--f7-picker-mask-bg-color:var(--f7-popover-bg-color)}.picker-columns::before{top:0;background-image:linear-gradient(to bottom,var(--f7-picker-mask-bg-color),transparent)}.picker-columns::after{bottom:0;background-image:linear-gradient(to top,var(--f7-picker-mask-bg-color),transparent)}.picker-column{position:relative;max-height:100%;z-index:10}.picker-column.picker-column-first.picker-column-last{width:100%}.picker-column.picker-column-left{text-align:left}.picker-column.picker-column-center{text-align:center}.picker-column.picker-column-right{text-align:right}.picker-column.picker-column-divider{display:flex;align-items:center;color:var(--f7-picker-divider-text-color)}.picker-items{overflow:auto;scroll-snap-type:y mandatory;height:100%;box-sizing:border-box;padding:var(--f7-picker-scroll-padding,0px) 0px;scrollbar-width:none;scrollbar-color:transparent}.picker-items::-webkit-scrollbar{-webkit-appearance:none;appearance:none;width:0px;display:none;opacity:0;background:0 0}.picker-items::-webkit-scrollbar-track{box-shadow:none;background:0 0}.picker-items::-webkit-scrollbar-thumb{background-color:transparent;outline:0;border-radius:9999px;position:relative}.picker-item{height:var(--f7-picker-item-height);line-height:var(--f7-picker-item-height);white-space:nowrap;position:relative;overflow:hidden;text-overflow:ellipsis;left:0;top:0;width:100%;box-sizing:border-box;color:var(--f7-picker-item-text-color);cursor:pointer;scroll-snap-align:center}.picker-item span{padding:0 10px}.picker-item.picker-item-far{pointer-events:none}.picker-item.picker-item-selected{color:var(--f7-picker-item-selected-text-color);transform:translate3d(0,0,0) rotateX(0deg)}.picker-column-free-mode .picker-item{scroll-snap-align:none}.picker-center-highlight{height:var(--f7-picker-item-height);box-sizing:border-box;position:absolute;top:50%;margin-top:calc(-1 * var(--f7-picker-item-height)/ 2);pointer-events:none}.picker-3d .picker-columns{overflow:hidden}.picker-3d .picker-column,.picker-3d .picker-item,.picker-3d .picker-items{transform-style:preserve-3d}.picker-3d .picker-column{overflow:visible}.picker-3d .picker-item{perspective:1200px;overflow:visible}.picker-3d .picker-item>span{backface-visibility:hidden;display:block;transform-style:preserve-3d;position:relative;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box;max-width:100%;transform-origin:center center -100px}.ios .picker-center-highlight{left:16px;right:16px;background-color:var(--f7-picker-item-selected-bg-color);border-radius:8px}.popover .ios .picker-center-highlight{left:8px;right:8px}.md .picker-center-highlight{left:0;right:0;border-top:1px solid var(--f7-md-outline);border-bottom:1px solid var(--f7-md-outline)}.infinite-scroll-preloader{margin-left:auto;margin-right:auto;text-align:center}.infinite-scroll-preloader.preloader{display:block}.ios .infinite-scroll-preloader{margin-top:35px;margin-bottom:35px}.ios .infinite-scroll-preloader .preloader,.ios .infinite-scroll-preloader.preloader{width:27px;height:27px}.md .infinite-scroll-preloader{margin-top:32px;margin-bottom:32px}.ios{--f7-ptr-preloader-size:28px;--f7-ptr-size:44px}.md{--f7-ptr-preloader-size:22px;--f7-ptr-size:40px}.md,.md .dark,.md [class*=color-]{--f7-ptr-preloader-bg-color:var(--f7-md-surface-1);--f7-ptr-preloader-color:var(--f7-md-primary)}.ptr-preloader{position:relative;top:var(--f7-ptr-top,0);height:var(--f7-ptr-size);pointer-events:none}.ptr-preloader .preloader{position:absolute;left:50%;width:var(--f7-ptr-preloader-size);height:var(--f7-ptr-preloader-size);margin-left:calc(-1 * var(--f7-ptr-preloader-size)/ 2);margin-top:calc(-1 * var(--f7-ptr-preloader-size)/ 2);top:50%;visibility:hidden}.ptr-bottom .ptr-preloader{top:auto;bottom:0;position:fixed}.ptr-with-navbar-large-transparent .ptr-preloader,.ptr-with-navbar-transparent .ptr-preloader{top:calc(-1 * var(--f7-page-navbar-offset,0px) + var(--f7-safe-area-top))}.ios .ptr-preloader{margin-bottom:calc(-1 * var(--f7-ptr-size));width:100%;left:0;top:0;position:relative}.ios .ptr-preloader .preloader{visibility:visible}.ios .ptr-content:not(.ptr-refreshing):not(.ptr-pull-up) .ptr-preloader .preloader,.ios .ptr-content:not(.ptr-refreshing):not(.ptr-pull-up) .ptr-preloader .preloader-inner{animation:none}.ios .ptr-content.ptr-closing .ptr-preloader .preloader-inner-line,.ios .ptr-content:not(.ptr-refreshing):not(.ptr-pull-up):not(.ptr-pull-down) .ptr-preloader .preloader-inner-line{opacity:0!important}.ios .ptr-refreshing>*,.ios .ptr-transitioning>*{transition-duration:.2s;transition-property:transform}.ios .ptr-transitioning .ptr-preloader .preloader-inner-line{transition-duration:.2s}.ios .ptr-pull-up .ptr-preloader .preloader{animation:ios-ptr-preloader-spin 1s ease-out forwards}.ios .ptr-refreshing:not(.ptr-bottom){transform:none}.ios .ptr-refreshing:not(.ptr-bottom)>*{transform:translate3d(0,var(--f7-ptr-size),0)}.ios .ptr-refreshing:not(.ptr-bottom)>.ptr-preloader{transform:translate3d(0,0,0)}.ios .ptr-bottom .ptr-preloader{margin-bottom:0;margin-top:calc(-1 * var(--f7-ptr-size));position:relative}.ios .ptr-bottom.ptr-refreshing>*,.ios .ptr-bottom.ptr-transitioning>*{transition-duration:.3s;transition-property:transform}.ios .ptr-bottom.ptr-refreshing{transform:none}.ios .ptr-bottom.ptr-refreshing>*{transform:translate3d(0,calc(-1 * var(--f7-ptr-size)),0)}.ios .ptr-bottom.ptr-refreshing>.ptr-preloader{transform:translate3d(0,0,0)}@keyframes ios-ptr-preloader-spin{from{transform:rotate(0deg)}to{transform:rotate(135deg)}}.md{--f7-ptr-top:-4px}.md .ptr-preloader{width:var(--f7-ptr-size);border-radius:50%;background:var(--f7-ptr-preloader-bg-color);--f7-preloader-color:var(--f7-ptr-preloader-color);margin-top:calc(-1 * var(--f7-ptr-size));z-index:100;box-shadow:0px 2px 1px -1px rgba(0,0,0,.2),0px 1px 1px 0px rgba(0,0,0,.14),0px 1px 3px 0px rgba(0,0,0,.12);left:50%;margin-left:calc(-1 * var(--f7-ptr-size)/ 2)}.md .ptr-preloader .preloader circle{stroke-width:4}.md .ptr-arrow{width:22px;height:22px;box-sizing:border-box;border:3px solid var(--f7-preloader-color);position:absolute;left:50%;top:50%;margin-left:-11px;margin-top:-11px;border-left-color:transparent;border-radius:50%;opacity:1;transform:rotate(150deg)}.md .ptr-arrow:after{content:'';width:0px;height:0px;position:absolute;left:-5px;bottom:0px;border-bottom-width:6px;border-bottom-style:solid;border-bottom-color:inherit;border-left:5px solid transparent;border-right:5px solid transparent;transform:rotate(-40deg)}.md .ptr-content:not(.ptr-refreshing):not(.ptr-pull-up) .ptr-preloader .preloader,.md .ptr-content:not(.ptr-refreshing):not(.ptr-pull-up) .ptr-preloader .preloader-inner,.md .ptr-content:not(.ptr-refreshing):not(.ptr-pull-up) .ptr-preloader circle{animation:none}.md .ptr-pull-up .ptr-preloader .preloader,.md .ptr-refreshing .ptr-preloader .preloader{visibility:visible}.md .ptr-pull-up .ptr-arrow,.md .ptr-refreshing .ptr-arrow{visibility:hidden}.md .ptr-refreshing .ptr-preloader{transform:translate3d(0,66px,0)}.md .ptr-transitioning .ptr-arrow{transition:.3s}.md .ptr-pull-up .ptr-arrow{transition:.4s;transform:rotate(620deg)!important;opacity:0}.md .ptr-refreshing .ptr-preloader,.md .ptr-transitioning .ptr-preloader{transition-duration:.3s;transition-property:transform,opacity}.md .ptr-bottom .ptr-preloader{margin-top:0;margin-bottom:calc(-1 * var(--f7-ptr-size) - 4px)}.md .ptr-bottom.ptr-refreshing .ptr-preloader{transform:translate3d(0,-66px,0)}.md .ptr-with-navbar-large-transparent .ptr-preloader,.md .ptr-with-navbar-transparent .ptr-preloader{opacity:0}.md .ptr-with-navbar-large-transparent.ptr-pull-down .ptr-preloader,.md .ptr-with-navbar-large-transparent.ptr-pull-up .ptr-preloader,.md .ptr-with-navbar-large-transparent.ptr-refreshing .ptr-preloader,.md .ptr-with-navbar-transparent.ptr-pull-down .ptr-preloader,.md .ptr-with-navbar-transparent.ptr-pull-up .ptr-preloader,.md .ptr-with-navbar-transparent.ptr-refreshing .ptr-preloader{opacity:1}.md .ptr-with-navbar-large-transparent.ptr-closing .ptr-preloader,.md .ptr-with-navbar-transparent.ptr-closing .ptr-preloader{opacity:0;transition-duration:.3s}:root{--f7-table-head-font-size:12px;--f7-table-body-font-size:14px;--f7-table-footer-font-size:12px;--f7-table-input-height:24px;--f7-table-input-font-size:14px;--f7-table-collapsible-cell-padding:16px;--f7-table-link-icon-only-icon-size:20px;--f7-table-head-bg-color:transparent;--f7-table-card-header-bg-color:transparent;--f7-table-card-header-height:64px;--f7-table-cell-padding-vertical:0px;--f7-table-sortable-icon-color:#000}:root .dark,:root.dark{--f7-table-sortable-icon-color:#fff;--f7-table-input-text-color:#fff}.ios{--f7-table-head-font-weight:600;--f7-table-head-cell-height:44px;--f7-table-head-icon-size:18px;--f7-table-body-cell-height:44px;--f7-table-cell-padding-horizontal:16px;--f7-table-edge-cell-padding-horizontal:16px;--f7-table-label-cell-padding-horizontal:16px;--f7-table-checkbox-cell-width:22px;--f7-table-title-font-size:17px;--f7-table-title-font-weight:600;--f7-table-footer-height:44px;--f7-table-head-text-color:rgba(0, 0, 0, 0.45);--f7-table-cell-border-color:rgba(0, 0, 0, 0.22);--f7-table-selected-row-bg-color:rgba(0, 0, 0, 0.03);--f7-table-footer-text-color:rgba(0, 0, 0, 0.45);--f7-table-input-text-color:#000}.ios .dark,.ios.dark{--f7-table-head-text-color:rgba(255, 255, 255, 0.55);--f7-table-cell-border-color:rgba(255, 255, 255, 0.15);--f7-table-footer-text-color:rgba(255, 255, 255, 0.55);--f7-table-selected-row-bg-color:rgba(255, 255, 255, 0.08)}.md{--f7-table-head-font-weight:500;--f7-table-head-cell-height:56px;--f7-table-head-icon-size:16px;--f7-table-body-cell-height:48px;--f7-table-cell-padding-horizontal:28px;--f7-table-edge-cell-padding-horizontal:24px;--f7-table-label-cell-padding-horizontal:24px;--f7-table-checkbox-cell-width:18px;--f7-table-title-font-size:20px;--f7-table-title-font-weight:400;--f7-table-footer-height:56px;--f7-table-actions-cell-link-color:rgba(0, 0, 0, 0.54);--f7-table-actions-link-color:rgba(0, 0, 0, 0.54);--f7-table-input-text-color:#212121}.md .dark,.md.dark{--f7-table-actions-cell-link-color:rgba(255, 255, 255, 0.54);--f7-table-actions-link-color:rgba(255, 255, 255, 0.54)}.md,.md .dark,.md [class*=color-]{--f7-table-head-text-color:var(--f7-md-on-surface-variant);--f7-table-footer-text-color:var(--f7-md-on-surface-variant);--f7-table-selected-row-bg-color:var(--f7-md-secondary-container);--f7-table-cell-border-color:var(--f7-md-outline)}.data-table{overflow-x:auto}.data-table table,table.data-table{width:100%;border:none;padding:0;margin:0;border-collapse:collapse;text-align:left}.data-table thead td,.data-table thead th{font-size:var(--f7-table-head-font-size);font-weight:var(--f7-table-head-font-weight);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:16px;height:var(--f7-table-head-cell-height);background-color:var(--f7-table-head-bg-color)}.data-table thead td:not(.sortable-cell-active),.data-table thead th:not(.sortable-cell-active){color:var(--f7-table-head-text-color)}.data-table thead i.f7-icons,.data-table thead i.icon,.data-table thead i.material-icons{vertical-align:top;font-size:var(--f7-table-head-icon-size)}.data-table tbody{font-size:var(--f7-table-body-font-size)}.data-table tbody td,.data-table tbody th{height:var(--f7-table-body-cell-height)}.data-table tbody tr.data-table-row-selected,.device-desktop .data-table tbody tr:hover{background:var(--f7-table-selected-row-bg-color)}.data-table tbody td:before,.data-table tbody th:before{content:'';position:absolute;background-color:var(--f7-table-cell-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.data-table td,.data-table th{--f7-table-cell-padding-left:var(--f7-table-cell-padding-horizontal);--f7-table-cell-padding-right:var(--f7-table-cell-padding-horizontal);padding-top:var(--f7-table-cell-padding-vertical);padding-bottom:var(--f7-table-cell-padding-vertical);padding-left:var(--f7-table-cell-padding-left);padding-right:var(--f7-table-cell-padding-right);position:relative;box-sizing:border-box}.data-table td:first-child,.data-table th:first-child{--f7-table-cell-padding-left:var(--f7-table-edge-cell-padding-horizontal)}.data-table td:last-child,.data-table th:last-child{--f7-table-cell-padding-right:var(--f7-table-edge-cell-padding-horizontal)}.data-table td.label-cell,.data-table th.label-cell{--f7-table-cell-padding-left:var(--f7-table-label-cell-padding-horizontal);--f7-table-cell-padding-right:var(--f7-table-label-cell-padding-horizontal)}.data-table td.numeric-cell,.data-table th.numeric-cell{text-align:right}.data-table td.checkbox-cell,.data-table th.checkbox-cell{overflow:visible;width:var(--f7-table-checkbox-cell-width)}.data-table td.checkbox-cell label+span,.data-table th.checkbox-cell label+span{margin-left:8px}.data-table td.checkbox-cell:first-child,.data-table th.checkbox-cell:first-child{padding-right:calc(var(--f7-table-cell-padding-right)/ 2)}.data-table td.checkbox-cell:first-child+td,.data-table td.checkbox-cell:first-child+th,.data-table th.checkbox-cell:first-child+td,.data-table th.checkbox-cell:first-child+th{padding-left:calc(var(--f7-table-cell-padding-left)/ 2)}.data-table td.checkbox-cell:last-child,.data-table th.checkbox-cell:last-child{padding-left:calc(var(--f7-table-cell-padding-left)/ 2)}.data-table td.actions-cell,.data-table th.actions-cell{text-align:right;white-space:nowrap}.data-table td.actions-cell a.link,.data-table th.actions-cell a.link{color:var(--f7-table-actions-cell-link-color,var(--f7-theme-color))}.card .data-table td a.icon-only,.card .data-table th a.icon-only,.card.data-table td a.icon-only,.card.data-table th a.icon-only,.data-table td a.icon-only,.data-table th a.icon-only{display:inline-block;vertical-align:middle;text-align:center;font-size:0;min-width:0}.card .data-table td a.icon-only i,.card .data-table th a.icon-only i,.card.data-table td a.icon-only i,.card.data-table th a.icon-only i,.data-table td a.icon-only i,.data-table th a.icon-only i{font-size:var(--f7-table-link-icon-only-icon-size);vertical-align:middle}.data-table .sortable-cell:not(.input-cell){cursor:pointer;position:relative}.data-table .sortable-cell.input-cell .table-head-label{cursor:pointer;position:relative}.data-table .sortable-cell.numeric-cell.input-cell>.table-head-label:before,.data-table .sortable-cell.numeric-cell:not(.input-cell):before,.data-table .sortable-cell:not(.numeric-cell).input-cell>.table-head-label:after,.data-table .sortable-cell:not(.numeric-cell):not(.input-cell):after{content:'arrow_bottom_md';font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;display:inline-block;vertical-align:top;width:16px;height:16px;color:var(--f7-table-sortable-icon-color);font-size:13px;line-height:16px;transition-duration:.3s;transform:rotate(0);opacity:0}.device-desktop .data-table .sortable-cell:not(.sortable-cell-active) .table-head-label:hover:after,.device-desktop .data-table .sortable-cell:not(.sortable-cell-active) .table-head-label:hover:before,.device-desktop .data-table .sortable-cell:not(.sortable-cell-active):hover:after,.device-desktop .data-table .sortable-cell:not(.sortable-cell-active):hover:before{opacity:.54}.data-table .sortable-cell.sortable-cell-active .table-head-label:after,.data-table .sortable-cell.sortable-cell-active .table-head-label:before,.data-table .sortable-cell.sortable-cell-active:after,.data-table .sortable-cell.sortable-cell-active:before{opacity:.87!important}.data-table .sortable-cell.sortable-desc:after,.data-table .sortable-cell.sortable-desc:before,.data-table .table-head-label:after,.data-table .table-head-label:before{transform:rotate(180deg)!important}.card .data-table .card-footer,.card .data-table .card-header,.data-table.card .card-footer,.data-table.card .card-header{padding-left:var(--f7-table-edge-cell-padding-horizontal);padding-right:var(--f7-table-edge-cell-padding-horizontal)}.card .data-table .card-header,.data-table.card .card-header{min-height:var(--f7-table-card-header-height);background-color:var(--f7-table-card-header-bg-color)}.card .data-table .card-content,.data-table.card .card-content{overflow-x:auto}.card .data-table .card-footer,.data-table.card .card-footer{min-height:var(--f7-table-footer-height)}.data-table .data-table-title{font-size:var(--f7-table-title-font-size);font-weight:var(--f7-table-title-font-weight)}.data-table .data-table-actions,.data-table .data-table-links{display:flex}.data-table .data-table-links .button{min-width:64px}.data-table .data-table-actions{margin-left:auto;align-items:center}.data-table .data-table-actions a.link{color:var(--f7-table-actions-link-color,var(--f7-theme-color));min-width:0}.data-table .data-table-actions a.link.icon-only{line-height:1;justify-content:center;padding:0}.data-table .data-table-header,.data-table .data-table-header-selected{display:flex;justify-content:space-between;align-items:center;width:100%}.data-table .card-header>.data-table-header,.data-table .card-header>.data-table-header-selected{padding-top:var(--f7-card-header-padding-vertical);padding-bottom:var(--f7-card-header-padding-vertical);height:100%;margin-top:calc(-1 * var(--f7-card-header-padding-vertical));margin-bottom:calc(-1 * var(--f7-card-header-padding-vertical));min-height:var(--f7-table-card-header-height);padding-left:var(--f7-table-edge-cell-padding-horizontal);padding-right:var(--f7-table-edge-cell-padding-horizontal);margin-left:calc(-1 * var(--f7-table-edge-cell-padding-horizontal));margin-right:calc(-1 * var(--f7-table-edge-cell-padding-horizontal))}.data-table .data-table-header-selected{background:rgba(var(--f7-theme-color-rgb),.1);display:none}.data-table.data-table-has-checked .data-table-header{display:none}.data-table.data-table-has-checked .data-table-header-selected{display:flex}.data-table .data-table-title-selected{font-size:14px;color:var(--f7-theme-color)}.data-table .data-table-footer{display:flex;align-items:center;box-sizing:border-box;position:relative;font-size:var(--f7-table-footer-font-size);overflow:hidden;min-height:var(--f7-table-footer-height);color:var(--f7-table-footer-text-color);justify-content:flex-end}.data-table .data-table-footer:before{content:'';position:absolute;background-color:var(--f7-table-cell-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.data-table .data-table-pagination,.data-table .data-table-rows-select{display:flex;align-items:center}.data-table .input-cell{padding-top:8px;padding-bottom:8px;height:auto;vertical-align:top}.data-table .input-cell .table-head-label+.input{margin-top:4px}.data-table .input-cell .input{height:var(--f7-table-input-height)}.data-table .input-cell .input input,.data-table .input-cell .input select,.data-table .input-cell .input textarea{height:var(--f7-table-input-height);color:var(--f7-table-input-text-color);font-size:var(--f7-table-input-font-size)}@media (max-width:480px) and (orientation:portrait){.data-table.data-table-collapsible thead{display:none}.data-table.data-table-collapsible tbody,.data-table.data-table-collapsible td,.data-table.data-table-collapsible tr{display:block}.data-table.data-table-collapsible tr{position:relative}.data-table.data-table-collapsible tr:before{content:'';position:absolute;background-color:var(--f7-table-cell-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.data-table.data-table-collapsible tr:hover{background-color:inherit}.data-table.data-table-collapsible td{--f7-table-cell-padding-left:var(--f7-table-collapsible-cell-padding);--f7-table-cell-padding-right:var(--f7-table-collapsible-cell-padding);height:auto;min-height:var(--f7-table-body-cell-height);display:flex;align-content:center;align-items:center;justify-content:flex-start;text-align:left}.data-table.data-table-collapsible td:before{display:none!important}.data-table.data-table-collapsible td:not(.checkbox-cell):before{width:40%;display:block!important;content:attr(data-collapsible-title);position:relative;height:auto;background:0 0!important;transform:none!important;font-size:var(--f7-table-head-font-size);font-weight:var(--f7-table-head-font-weight);color:var(--f7-table-head-text-color);margin-right:16px;flex-shrink:0}.data-table.data-table-collapsible td.checkbox-cell{position:absolute;top:0;left:0}.data-table.data-table-collapsible td.checkbox-cell+td{padding-left:16px}.data-table.data-table-collapsible td.checkbox-cell~td{margin-left:32px}}.data-table .xsmall-landscape-only,.data-table .xsmall-only{display:none}@media (min-width:480px){.data-table .xsmall-only{display:table-cell}}@media (min-width:480px) and (orientation:landscape){.data-table .xsmall-landscape-only{display:table-cell}}.data-table .small-landscape-only,.data-table .small-only{display:none}@media (min-width:568px){.data-table .small-only{display:table-cell}}@media (min-width:568px) and (orientation:landscape){.data-table .small-landscape-only{display:table-cell}}.data-table .medium-landscape-only,.data-table .medium-only{display:none}@media (min-width:768px){.data-table .medium-only{display:table-cell}}@media (min-width:768px) and (orientation:landscape){.data-table .medium-landscape-only{display:table-cell}}.data-table .large-landscape-only,.data-table .large-only{display:none}@media (min-width:1024px){.data-table .large-only{display:table-cell}}@media (min-width:1024px) and (orientation:landscape){.data-table .large-landscape-only{display:table-cell}}.data-table .xlarge-landscape-only,.data-table .xlarge-only{display:none}@media (min-width:1200px){.data-table .xlarge-only{display:table-cell}}@media (min-width:1200px) and (orientation:landscape){.data-table .xlarge-landscape-only{display:table-cell}}.ios .data-table td.actions-cell a.link+a.link,.ios .data-table th.actions-cell a.link+a.link{margin-left:16px}.ios .sortable-cell:not(.numeric-cell):after{margin-left:5px}.ios .sortable-cell.numeric-cell:before{margin-right:5px}.ios .data-table-actions .button+.button,.ios .data-table-actions a.link+a.link,.ios .data-table-links .button+.button,.ios .data-table-links a.link+a.link{margin-left:16px}.ios .data-table-actions a.link.icon-only{width:44px;height:44px}.ios .data-table-pagination a.link,.ios .data-table-rows-select a.link{width:44px;height:44px}.ios .data-table-rows-select+.data-table-pagination{margin-left:30px}.ios .data-table-rows-select .input{margin-left:20px}.ios .data-table-pagination-label{margin-right:16px}.md .data-table td.actions-cell a.link+a.link,.md .data-table th.actions-cell a.link+a.link{margin-left:24px}.md .data-table td.actions-cell a.icon-only,.md .data-table th.actions-cell a.icon-only{width:24px;height:24px;line-height:24px}.md .sortable-cell:not(.numeric-cell):after{margin-left:8px}.md .sortable-cell.numeric-cell:before{margin-right:8px}.md .data-table-actions .button+.button,.md .data-table-actions a.link+a.link,.md .data-table-links .button+.button,.md .data-table-links a.link+a.link{margin-left:24px}.md .data-table-actions a.link.icon-only{width:24px;height:24px;overflow:visible}.md .data-table-actions a.link.icon-only.active-state{background:0 0}.md .data-table-pagination a.link,.md .data-table-rows-select a.link{width:48px;height:48px}.md .data-table-rows-select+.data-table-pagination{margin-left:32px}.md .data-table-rows-select .input{margin-left:24px}.md .data-table-pagination-label{margin-right:20px}.md .input-cell .input-clear-button{transform:scale(.8)}:root{--f7-fab-margin:16px;--f7-fab-extended-text-font-size:14px;--f7-fab-label-padding:4px 12px;--f7-fab-label-font-size:inherit;--f7-fab-button-size:40px}.ios{--f7-fab-text-color:#fff;--f7-fab-border-radius:50px;--f7-fab-size:50px;--f7-fab-box-shadow:0px 2px 4px rgba(0, 0, 0, 0.4);--f7-fab-extended-text-transform:uppercase;--f7-fab-extended-size:50px;--f7-fab-extended-text-padding:0 20px;--f7-fab-extended-text-font-weight:600;--f7-fab-extended-text-letter-spacing:0;--f7-fab-label-border-radius:4px;--f7-fab-label-box-shadow:0px 1px 2px rgba(0, 0, 0, 0.4);--f7-fab-label-text-color:#333;--f7-fab-label-bg-color:#fff}.md{--f7-fab-border-radius:16px;--f7-fab-size:56px;--f7-fab-box-shadow:0px 1px 2px rgba(0, 0, 0, 0.25);--f7-fab-extended-size:56px;--f7-fab-extended-text-padding:0 16px;--f7-fab-extended-text-font-weight:500;--f7-fab-extended-text-letter-spacing:0;--f7-fab-extended-text-transform:none;--f7-fab-label-border-radius:8px;--f7-fab-label-box-shadow:0px 1px 2px rgba(0, 0, 0, 0.25)}.md,.md .dark,.md [class*=color-]{--f7-fab-bg-color:var(--f7-md-primary-container);--f7-fab-text-color:var(--f7-md-on-primary-container);--f7-fab-label-text-color:var(--f7-md-on-surface);--f7-fab-label-bg-color:var(--f7-md-surface-5)}.fab-backdrop{z-index:1400}.fab{position:absolute;z-index:1500}.fab a{--f7-touch-ripple-color:var(--f7-touch-ripple-white)}.fab-left-bottom,.fab-left-center,.fab-left-top{left:calc(var(--f7-fab-margin) + var(--f7-safe-area-left))}.fab-right-bottom,.fab-right-center,.fab-right-top{right:calc(var(--f7-fab-margin) + var(--f7-safe-area-right))}.fab-center-top,.fab-left-top,.fab-right-top{top:var(--f7-fab-margin)}.fab-center-bottom,.fab-left-bottom,.fab-right-bottom{bottom:calc(var(--f7-fab-margin) + var(--f7-safe-area-bottom))}.fab-center-bottom,.fab-center-center,.fab-center-top{left:50%;transform:translateX(-50%)}.fab-center-center,.fab-left-center,.fab-right-center{top:50%;transform:translateY(-50%)}.fab-center-center{top:50%;left:50%;transform:translateX(-50%) translateY(-50%)}.fab-buttons a,.fab>a{background-color:var(--f7-fab-bg-color,var(--f7-theme-color));width:var(--f7-fab-size);height:var(--f7-fab-size);box-shadow:var(--f7-fab-box-shadow);border-radius:var(--f7-fab-border-radius);position:relative;transition-duration:.3s;display:flex;align-items:center;justify-content:center;overflow:hidden;z-index:1;color:var(--f7-fab-text-color)}.fab>a i{position:absolute;left:50%;top:50%;transform:translate3d(-50%,-50%,0) rotate(0deg) scale(1);transition:.3s}.fab>a i+i{transform:translate3d(-50%,-50%,0) rotate(-90deg) scale(.5);opacity:0}.fab-buttons a{border-radius:var(--f7-fab-border-radius);width:var(--f7-fab-button-size);height:var(--f7-fab-button-size)}.fab-buttons{display:flex;visibility:hidden;pointer-events:none;position:absolute}.fab-buttons a{opacity:0}.fab-opened:not(.fab-morph)>a i{transform:translate3d(-50%,-50%,0) rotate(90deg) scale(.5);opacity:0}.fab-opened:not(.fab-morph)>a i+i{transform:translate3d(-50%,-50%,0) rotate(0deg) scale(1);opacity:1}.fab-opened .fab-buttons{visibility:visible;pointer-events:auto}.fab-opened .fab-buttons a{opacity:1;transform:translate3d(0,0px,0) scale(1)!important}.fab-opened .fab-buttons a:nth-child(2){transition-delay:50ms}.fab-opened .fab-buttons a:nth-child(3){transition-delay:0.1s}.fab-opened .fab-buttons a:nth-child(4){transition-delay:150ms}.fab-opened .fab-buttons a:nth-child(5){transition-delay:0.2s}.fab-opened .fab-buttons a:nth-child(6){transition-delay:250ms}.fab-buttons-bottom,.fab-buttons-top{left:50%;width:var(--f7-fab-button-size);margin-left:calc(-1 * var(--f7-fab-button-size)/ 2)}.fab-buttons-top{bottom:100%;margin-bottom:16px;flex-direction:column-reverse}.fab-buttons-top a{transform:translate3d(0,8px,0) scale(.3);transform-origin:center bottom}.fab-buttons-top a+a{margin-bottom:16px}.fab-buttons-bottom{top:100%;margin-top:16px;flex-direction:column}.fab-buttons-bottom a{transform:translate3d(0,-8px,0) scale(.3);transform-origin:center top}.fab-buttons-bottom a+a{margin-top:16px}.fab-buttons-left,.fab-buttons-right{top:50%;height:var(--f7-fab-button-size);margin-top:calc(-1 * var(--f7-fab-button-size)/ 2)}.fab-buttons-left{right:100%;margin-right:16px;flex-direction:row-reverse}.fab-buttons-left a{transform:translate3d(8px,0px,0) scale(.3);transform-origin:right center}.fab-buttons-left a+a{margin-right:16px}.fab-buttons-right{left:100%;margin-left:16px}.fab-buttons-right a{transform:translate3d(-8px,0,0) scale(.3);transform-origin:left center}.fab-buttons-right a+a{margin-left:16px}.fab-buttons-center{left:0%;top:0%;width:100%;height:100%}.fab-buttons-center a{position:absolute}.fab-buttons-center a:first-child{left:50%;margin-left:calc(-1 * var(--f7-fab-button-size)/ 2);bottom:100%;margin-bottom:16px;transform:translateY(-8px) scale(.3);transform-origin:center bottom}.fab-buttons-center a:nth-child(2){left:100%;margin-top:calc(-1 * var(--f7-fab-button-size)/ 2);top:50%;margin-left:16px;transform:translateX(-8px) scale(.3);transform-origin:left center}.fab-buttons-center a:nth-child(3){left:50%;margin-left:calc(-1 * var(--f7-fab-button-size)/ 2);top:100%;margin-top:16px;transform:translateY(8px) scale(.3);transform-origin:center top}.fab-buttons-center a:nth-child(4){right:100%;margin-top:calc(-1 * var(--f7-fab-button-size)/ 2);top:50%;margin-right:16px;transform:translateX(8px) scale(.3);transform-origin:right center}.fab-morph{border-radius:var(--f7-fab-border-radius);background:var(--f7-fab-bg-color,var(--f7-theme-color));box-shadow:var(--f7-fab-box-shadow)}.fab-morph>a{box-shadow:none;background:0 0!important}.fab-opened.fab-morph>a i{opacity:0}.fab-morph,.fab-morph-target,.fab-morph>a{transition-duration:250ms}.fab-morph-target:not(.fab-morph-target-visible){display:none}.fab-extended{width:auto;min-width:var(--f7-fab-extended-size)}.fab-extended>a{width:100%;height:var(--f7-fab-extended-size)}.fab-extended>a i{left:calc(var(--f7-fab-extended-size)/ 2)}.fab-extended i~.fab-text{padding-left:var(--f7-fab-extended-size)}.fab-extended>a{width:100%!important}.fab-text{box-sizing:border-box;font-size:var(--f7-fab-extended-text-font-size);padding:var(--f7-fab-extended-text-padding);font-weight:var(--f7-fab-extended-text-font-weight);letter-spacing:var(--f7-fab-extended-text-letter-spacing);text-transform:var(--f7-fab-extended-text-transform)}.fab-label-button{overflow:visible!important}.fab-label{position:absolute;top:50%;padding:var(--f7-fab-label-padding);border-radius:var(--f7-fab-label-border-radius);background:var(--f7-fab-label-bg-color);color:var(--f7-fab-label-text-color);box-shadow:var(--f7-fab-label-box-shadow);white-space:nowrap;transform:translateY(-50%);pointer-events:none;font-size:var(--f7-fab-label-font-size)}.fab-right-bottom .fab-label,.fab-right-center .fab-label,.fab-right-top .fab-label{right:100%;margin-right:8px}.fab-left-bottom .fab-label,.fab-left-center .fab-label,.fab-left-top .fab-label{left:100%;margin-left:8px}.navbars~* .fab-center-top,.navbars~* .fab-left-top,.navbars~* .fab-right-top,.navbars~.fab-center-top,.navbars~.fab-left-top,.navbars~.fab-right-top,.navbar~* .fab-center-top,.navbar~* .fab-left-top,.navbar~* .fab-right-top,.navbar~.fab-center-top,.navbar~.fab-left-top,.navbar~.fab-right-top{margin-top:calc(var(--f7-navbar-height) + var(--f7-safe-area-top))}.ios .toolbar-top-ios~* .fab-center-top,.ios .toolbar-top-ios~* .fab-left-top,.ios .toolbar-top-ios~* .fab-right-top,.ios .toolbar-top-ios~.fab-center-top,.ios .toolbar-top-ios~.fab-left-top,.ios .toolbar-top-ios~.fab-right-top,.md .toolbar-top-md~* .fab-center-top,.md .toolbar-top-md~* .fab-left-top,.md .toolbar-top-md~* .fab-right-top,.md .toolbar-top-md~.fab-center-top,.md .toolbar-top-md~.fab-left-top,.md .toolbar-top-md~.fab-right-top,.toolbar-top~* .fab-center-top,.toolbar-top~* .fab-left-top,.toolbar-top~* .fab-right-top,.toolbar-top~.fab-center-top,.toolbar-top~.fab-left-top,.toolbar-top~.fab-right-top{margin-top:var(--f7-toolbar-height)}.ios .toolbar-bottom-ios~* .fab-center-bottom,.ios .toolbar-bottom-ios~* .fab-left-bottom,.ios .toolbar-bottom-ios~* .fab-right-bottom,.ios .toolbar-bottom-ios~.fab-center-bottom,.ios .toolbar-bottom-ios~.fab-left-bottom,.ios .toolbar-bottom-ios~.fab-right-bottom,.md .toolbar-bottom-md~* .fab-center-bottom,.md .toolbar-bottom-md~* .fab-left-bottom,.md .toolbar-bottom-md~* .fab-right-bottom,.md .toolbar-bottom-md~.fab-center-bottom,.md .toolbar-bottom-md~.fab-left-bottom,.md .toolbar-bottom-md~.fab-right-bottom,.toolbar-bottom~* .fab-center-bottom,.toolbar-bottom~* .fab-left-bottom,.toolbar-bottom~* .fab-right-bottom,.toolbar-bottom~.fab-center-bottom,.toolbar-bottom~.fab-left-bottom,.toolbar-bottom~.fab-right-bottom{margin-bottom:var(--f7-toolbar-height)}.ios .tabbar-icons.toolbar-bottom-ios~* .fab-center-bottom,.ios .tabbar-icons.toolbar-bottom-ios~* .fab-left-bottom,.ios .tabbar-icons.toolbar-bottom-ios~* .fab-right-bottom,.ios .tabbar-icons.toolbar-bottom-ios~.fab-center-bottom,.ios .tabbar-icons.toolbar-bottom-ios~.fab-left-bottom,.ios .tabbar-icons.toolbar-bottom-ios~.fab-right-bottom,.md .tabbar-icons.toolbar-bottom-md~* .fab-center-bottom,.md .tabbar-icons.toolbar-bottom-md~* .fab-left-bottom,.md .tabbar-icons.toolbar-bottom-md~* .fab-right-bottom,.md .tabbar-icons.toolbar-bottom-md~.fab-center-bottom,.md .tabbar-icons.toolbar-bottom-md~.fab-left-bottom,.md .tabbar-icons.toolbar-bottom-md~.fab-right-bottom,.tabbar-icons.toolbar-bottom~* .fab-center-bottom,.tabbar-icons.toolbar-bottom~* .fab-left-bottom,.tabbar-icons.toolbar-bottom~* .fab-right-bottom,.tabbar-icons.toolbar-bottom~.fab-center-bottom,.tabbar-icons.toolbar-bottom~.fab-left-bottom,.tabbar-icons.toolbar-bottom~.fab-right-bottom{margin-bottom:var(--f7-tabbar-icons-height)}.ios .tabbar-icons.toolbar-top-ios~* .fab-center-bottom,.ios .tabbar-icons.toolbar-top-ios~* .fab-left-bottom,.ios .tabbar-icons.toolbar-top-ios~* .fab-right-bottom,.ios .tabbar-icons.toolbar-top-ios~.fab-center-bottom,.ios .tabbar-icons.toolbar-top-ios~.fab-left-bottom,.ios .tabbar-icons.toolbar-top-ios~.fab-right-bottom,.md .tabbar-icons.toolbar-top-md~* .fab-center-bottom,.md .tabbar-icons.toolbar-top-md~* .fab-left-bottom,.md .tabbar-icons.toolbar-top-md~* .fab-right-bottom,.md .tabbar-icons.toolbar-top-md~.fab-center-bottom,.md .tabbar-icons.toolbar-top-md~.fab-left-bottom,.md .tabbar-icons.toolbar-top-md~.fab-right-bottom,.tabbar-icons.toolbar-top~* .fab-center-bottom,.tabbar-icons.toolbar-top~* .fab-left-bottom,.tabbar-icons.toolbar-top~* .fab-right-bottom,.tabbar-icons.toolbar-top~.fab-center-bottom,.tabbar-icons.toolbar-top~.fab-left-bottom,.tabbar-icons.toolbar-top~.fab-right-bottom{margin-top:var(--f7-tabbar-icons-height)}.messagebar~* .fab-center-bottom,.messagebar~* .fab-left-bottom,.messagebar~* .fab-right-bottom,.messagebar~.fab-center-bottom,.messagebar~.fab-left-bottom,.messagebar~.fab-right-bottom{margin-bottom:var(--f7-messagebar-height)}.ios .navbar+.toolbar-top-ios~* .fab-center-top,.ios .navbar+.toolbar-top-ios~* .fab-left-top,.ios .navbar+.toolbar-top-ios~* .fab-right-top,.ios .navbar+.toolbar-top-ios~.fab-center-top,.ios .navbar+.toolbar-top-ios~.fab-left-top,.ios .navbar+.toolbar-top-ios~.fab-right-top,.md .navbar+.toolbar-top-ios~* .fab-center-top,.md .navbar+.toolbar-top-ios~* .fab-left-top,.md .navbar+.toolbar-top-ios~* .fab-right-top,.md .navbar+.toolbar-top-ios~.fab-center-top,.md .navbar+.toolbar-top-ios~.fab-left-top,.md .navbar+.toolbar-top-ios~.fab-right-top,.navbar+.toolbar-top~* .fab-center-top,.navbar+.toolbar-top~* .fab-left-top,.navbar+.toolbar-top~* .fab-right-top,.navbar+.toolbar-top~.fab-center-top,.navbar+.toolbar-top~.fab-left-top,.navbar+.toolbar-top~.fab-right-top{margin-top:calc(var(--f7-toolbar-height) + var(--f7-navbar-height) + var(--f7-safe-area-top))}.ios .navbar+.toolbar-top-ios.tabbar-icons~* .fab-center-top,.ios .navbar+.toolbar-top-ios.tabbar-icons~* .fab-left-top,.ios .navbar+.toolbar-top-ios.tabbar-icons~* .fab-right-top,.ios .navbar+.toolbar-top-ios.tabbar-icons~.fab-center-top,.ios .navbar+.toolbar-top-ios.tabbar-icons~.fab-left-top,.ios .navbar+.toolbar-top-ios.tabbar-icons~.fab-right-top,.md .navbar+.toolbar-top-ios.tabbar-icons~* .fab-center-top,.md .navbar+.toolbar-top-ios.tabbar-icons~* .fab-left-top,.md .navbar+.toolbar-top-ios.tabbar-icons~* .fab-right-top,.md .navbar+.toolbar-top-ios.tabbar-icons~.fab-center-top,.md .navbar+.toolbar-top-ios.tabbar-icons~.fab-left-top,.md .navbar+.toolbar-top-ios.tabbar-icons~.fab-right-top,.navbar+.toolbar-top.tabbar-icons~* .fab-center-top,.navbar+.toolbar-top.tabbar-icons~* .fab-left-top,.navbar+.toolbar-top.tabbar-icons~* .fab-right-top,.navbar+.toolbar-top.tabbar-icons~.fab-center-top,.navbar+.toolbar-top.tabbar-icons~.fab-left-top,.navbar+.toolbar-top.tabbar-icons~.fab-right-top{margin-top:calc(var(--f7-tabbar-icons-height) + var(--f7-navbar-height) + var(--f7-safe-area-top))}.ios .navbars+.toolbar-top-ios~* .fab-center-top,.ios .navbars+.toolbar-top-ios~* .fab-left-top,.ios .navbars+.toolbar-top-ios~* .fab-right-top,.ios .navbars+.toolbar-top-ios~.fab-center-top,.ios .navbars+.toolbar-top-ios~.fab-left-top,.ios .navbars+.toolbar-top-ios~.fab-right-top,.navbars+.toolbar-top~* .fab-center-top,.navbars+.toolbar-top~* .fab-left-top,.navbars+.toolbar-top~* .fab-right-top,.navbars+.toolbar-top~.fab-center-top,.navbars+.toolbar-top~.fab-left-top,.navbars+.toolbar-top~.fab-right-top{margin-top:calc(var(--f7-toolbar-height) + var(--f7-navbar-height) + var(--f7-safe-area-top))}.ios .navbars+.toolbar-top-ios.tabbar-icons~* .fab-center-top,.ios .navbars+.toolbar-top-ios.tabbar-icons~* .fab-left-top,.ios .navbars+.toolbar-top-ios.tabbar-icons~* .fab-right-top,.ios .navbars+.toolbar-top-ios.tabbar-icons~.fab-center-top,.ios .navbars+.toolbar-top-ios.tabbar-icons~.fab-left-top,.ios .navbars+.toolbar-top-ios.tabbar-icons~.fab-right-top,.navbars+.toolbar-top.tabbar-icons~* .fab-center-top,.navbars+.toolbar-top.tabbar-icons~* .fab-left-top,.navbars+.toolbar-top.tabbar-icons~* .fab-right-top,.navbars+.toolbar-top.tabbar-icons~.fab-center-top,.navbars+.toolbar-top.tabbar-icons~.fab-left-top,.navbars+.toolbar-top.tabbar-icons~.fab-right-top{margin-top:calc(var(--f7-tabbar-icons-height) + var(--f7-navbar-height) + var(--f7-safe-area-top))}.ios .fab-buttons a.active-state,.ios .fab>a.active-state{transition-duration:0s;background-color:var(--f7-fab-pressed-bg-color,var(--f7-theme-color-shade))}.md .fab-buttons a.active-state,.md .fab>a.active-state{background-color:var(--f7-fab-pressed-bg-color,var(--f7-fab-bg-color,var(--f7-theme-color)))}:root{--f7-searchbar-input-border-width:0px;--f7-searchbar-input-border-color:transparent}.ios{--f7-searchbar-height:44px;--f7-searchbar-inner-padding-left:8px;--f7-searchbar-inner-padding-right:8px;--f7-searchbar-input-font-size:17px;--f7-searchbar-input-border-radius:8px;--f7-searchbar-input-height:32px;--f7-searchbar-inline-input-height:32px;--f7-searchbar-input-padding-horizontal:28px;--f7-searchbar-backdrop-bg-color:rgba(0, 0, 0, 0.4);--f7-searchbar-in-page-content-margin:0px;--f7-searchbar-in-page-content-box-shadow:none;--f7-searchbar-in-page-content-border-radius:0;--f7-searchbar-in-page-content-input-border-radius:0;--f7-searchbar-placeholder-color:rgba(0, 0, 0, 0.4);--f7-searchbar-input-text-color:#000;--f7-searchbar-search-icon-color:rgba(0, 0, 0, 0.4);--f7-searchbar-input-bg-color:#e4e4e4}.ios .dark,.ios.dark{--f7-searchbar-placeholder-color:rgba(255, 255, 255, 0.4);--f7-searchbar-input-text-color:#fff;--f7-searchbar-search-icon-color:rgba(255, 255, 255, 0.4);--f7-searchbar-input-bg-color:#2a2a2a}.md{--f7-searchbar-border-color:transparent;--f7-searchbar-height:48px;--f7-searchbar-inner-padding-left:8px;--f7-searchbar-inner-padding-right:8px;--f7-searchbar-input-font-size:16px;--f7-searchbar-input-border-radius:24px;--f7-searchbar-input-height:48px;--f7-searchbar-inline-input-height:48px;--f7-searchbar-inline-input-border-radius:24px;--f7-searchbar-input-padding-horizontal:16px;--f7-searchbar-inline-input-padding-horizontal:16px;--f7-searchbar-backdrop-bg-color:rgba(0, 0, 0, 0.25);--f7-searchbar-in-page-content-margin:16px 0;--f7-searchbar-in-page-content-box-shadow:none;--f7-searchbar-in-page-content-border-radius:24px;--f7-searchbar-in-page-content-input-border-radius:24px;--f7-searchbar-bg-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-searchbar-link-color:var(--f7-md-on-surface);--f7-searchbar-search-icon-color:var(--f7-md-on-surface);--f7-searchbar-input-clear-button-color:var(--f7-md-on-surface);--f7-searchbar-placeholder-color:var(--f7-md-on-surface-variant);--f7-searchbar-input-bg-color:var(--f7-md-secondary-container);--f7-searchbar-input-text-color:var(--f7-md-on-surface)}.searchbar{--f7-link-highlight-color:var(--f7-link-highlight-black);width:100%;position:relative;z-index:200;height:var(--f7-searchbar-height);background-color:var(--f7-searchbar-bg-color,var(--f7-bars-bg-color))}.dark .searchbar{--f7-link-highlight-color:var(--f7-link-highlight-white)}.searchbar input[type=search]::-webkit-search-decoration{display:none}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .searchbar{background-color:rgba(var(--f7-searchbar-bg-color-rgb,var(--f7-bars-bg-color-rgb)),var(--f7-bars-translucent-opacity));-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.ios .subnavbar .searchbar{background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.ios .subnavbar .searchbar:after{display:none!important}.searchbar.no-outline:after{display:none!important}.searchbar:after{content:'';position:absolute;background-color:var(--f7-searchbar-border-color,var(--f7-bars-border-color));display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}.page>.searchbar:not(.searchbar-inline){z-index:600}.searchbar input[type=search],.searchbar input[type=text]{box-sizing:border-box;width:100%;height:100%;display:block;border:var(--f7-searchbar-input-border-width) solid var(--f7-searchbar-input-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:inherit;font-weight:400;color:var(--f7-searchbar-input-text-color);font-size:var(--f7-searchbar-input-font-size);background-color:var(--f7-searchbar-input-bg-color);border-radius:var(--f7-searchbar-input-border-radius);position:relative;padding:0;padding-left:calc(var(--f7-searchbar-input-padding-horizontal) + var(--f7-searchbar-input-extra-padding-left,0px));padding-right:calc(var(--f7-searchbar-input-padding-horizontal) + var(--f7-searchbar-input-extra-padding-right,0px))}.searchbar input[type=search]::-moz-placeholder, .searchbar input[type=text]::-moz-placeholder{color:var(--f7-searchbar-placeholder-color);opacity:1}.searchbar input[type=search]::placeholder,.searchbar input[type=text]::placeholder{color:var(--f7-searchbar-placeholder-color);opacity:1}.searchbar input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.searchbar .searchbar-input-wrap{flex-shrink:1;width:100%;height:var(--f7-searchbar-input-height);position:relative}.searchbar a{color:var(--f7-searchbar-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.page>.searchbar:not(.searchbar-inline){position:absolute;left:0;top:0}.page-content .searchbar:not(.searchbar-inline){border-radius:var(--f7-searchbar-in-page-content-border-radius);margin:var(--f7-searchbar-in-page-content-margin);width:auto;box-shadow:var(--f7-searchbar-in-page-content-box-shadow)}.page-content .searchbar:not(.searchbar-inline) .searchbar-inner,.page-content .searchbar:not(.searchbar-inline) input[type=search],.page-content .searchbar:not(.searchbar-inline) input[type=text]{border-radius:var(--f7-searchbar-in-page-content-input-border-radius,var(--f7-searchbar-input-border-radius))}.searchbar .input-clear-button{color:var(--f7-searchbar-input-clear-button-color,var(--f7-input-clear-button-color))}.searchbar-expandable{--f7-searchbar-expandable-size:var(--f7-searchbar-height);position:absolute;transition-duration:.3s;pointer-events:none}.navbar .searchbar-expandable{background:0 0}.navbar .searchbar-expandable:after{display:none!important}.navbar .searchbar.searchbar-expandable{--f7-searchbar-expandable-size:calc(var(--f7-navbar-height) + var(--f7-safe-area-top))}.navbar .searchbar.searchbar-expandable .searchbar-inner{top:var(--f7-safe-area-top);height:calc(100% - var(--f7-safe-area-top))}.toolbar .searchbar.searchbar-expandable{--f7-searchbar-expandable-size:var(--f7-toolbar-height)}.subnavbar .searchbar.searchbar-expandable{--f7-searchbar-expandable-size:var(--f7-subnavbar-height)}.tabbar-icons .searchbar.searchbar-expandable{--f7-searchbar-expandable-size:var(--f7-tabbar-icons-height)}.searchbar-inner{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;box-sizing:border-box;padding:0 calc(var(--f7-searchbar-inner-padding-right) + var(--f7-safe-area-right)) 0 calc(var(--f7-searchbar-inner-padding-left) + var(--f7-safe-area-left))}.searchbar-disable-button{cursor:pointer;pointer-events:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:none;outline:0;padding:0;margin:0;width:auto;opacity:0}.searchbar-icon{pointer-events:none;background-position:center;background-repeat:no-repeat}.searchbar-icon:after{color:var(--f7-searchbar-search-icon-color);font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px}.searchbar-backdrop{position:absolute;left:0;top:0;width:100%;height:100%;z-index:100;opacity:0;pointer-events:none;transition-duration:.3s;transform:translate3d(0,0,0);background:var(--f7-searchbar-backdrop-bg-color)}.searchbar-backdrop.searchbar-backdrop-in{opacity:1;pointer-events:auto}.page-content>.searchbar-backdrop{position:fixed}.searchbar-not-found{display:none}.hidden-by-searchbar,.list .hidden-by-searchbar,.list li.hidden-by-searchbar,.list.li.hidden-by-searchbar{display:none!important}.navbar.with-searchbar-expandable-enabled-no-transition{--f7-navbar-large-collapse-progress:1}.navbar.with-searchbar-expandable-enabled{--f7-navbar-large-collapse-progress:1}.navbar.with-searchbar-expandable-enabled .navbar-bg,.navbar.with-searchbar-expandable-enabled .title-large,.navbar.with-searchbar-expandable-enabled .title-large-text{transition-duration:.3s}.navbar.with-searchbar-expandable-closing .navbar-bg,.navbar.with-searchbar-expandable-closing .title-large,.navbar.with-searchbar-expandable-closing .title-large-text{transition-duration:.3s}.page-content.with-searchbar-expandable-enabled{height:calc(100% + var(--f7-navbar-large-title-height));transform:translateY(calc(-1 * var(--f7-navbar-large-title-height)));transition-duration:.3s;transition-property:transform}.page-content.with-searchbar-expandable-closing{transition-duration:.3s}.navbars~.page:not(.no-navbar)>.searchbar,.navbar~.page:not(.no-navbar)>.searchbar,.page>.navbar~.searchbar{top:calc(var(--f7-navbar-height) + var(--f7-safe-area-top))}.navbars~.page-with-navbar-large:not(.no-navbar) .searchbar,.navbar~.page-with-navbar-large:not(.no-navbar) .searchbar,.page-with-navbar-large .navbar~* .searchbar,.page-with-navbar-large .navbar~.searchbar{top:calc(var(--f7-navbar-height) + var(--f7-navbar-large-title-height) + var(--f7-safe-area-top));transform:translate3d(0,calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)),0)}.navbars~.page-with-navbar-large:not(.no-navbar) .page-content .searchbar,.page-with-navbar-large .page-content .searchbar{top:0;transform:none}.searchbar~*{--f7-page-searchbar-offset:var(--f7-searchbar-height)}.ios .page>.toolbar-top-ios~.searchbar,.md .page>.toolbar-top-md~.searchbar,.page>.toolbar-top~.searchbar{top:var(--f7-toolbar-height)}.ios .page>.tabbar-icons.toolbar-top-ios~.searchbar,.md .page>.tabbar-icons.toolbar-top-md~.searchbar,.page>.tabbar-icons.toolbar-top~.searchbar{top:var(--f7-tabbar-icons-height)}.ios .page>.navbar~.toolbar-top-ios~.searchbar,.md .page>.navbar~.toolbar-top-md~.searchbar,.page>.navbar~.toolbar-top~.searchbar{top:calc(var(--f7-navbar-height) + var(--f7-toolbar-height) + var(--f7-safe-area-top))}.ios .page>.navbar~.tabbar-icons.toolbar-top-ios~.searchbar,.md .page>.navbar~.tabbar-icons.toolbar-top-md~.searchbar,.page>.navbar~.tabbar-icons.toolbar-top~.searchbar{top:calc(var(--f7-navbar-height) + var(--f7-tabbar-icons-height) + var(--f7-safe-area-top))}.searchbar.searchbar-inline{width:auto;height:auto;background-color:transparent;background-image:none}.searchbar.searchbar-inline:after,.searchbar.searchbar-inline:before{display:none!important}.searchbar.searchbar-inline .searchbar-input-wrap{height:var(--f7-searchbar-inline-input-height,var(--f7-searchbar-input-height))}.searchbar.searchbar-inline .searchbar-inner{padding:0;position:static;width:auto;height:auto}.searchbar.searchbar-inline input[type=search],.searchbar.searchbar-inline input[type=text]{font-size:var(--f7-searchbar-inline-input-font-size, var(--f7-searchbar-input-font-size));border-radius:var(--f7-searchbar-inline-input-border-radius,var(--f7-searchbar-input-border-radius));padding-left:calc(var(--f7-searchbar-inline-input-padding-horizontal,var(--f7-searchbar-input-padding-horizontal)) + var(--f7-searchbar-input-extra-padding-left,0px));padding-right:calc(var(--f7-searchbar-inline-input-padding-horizontal,var(--f7-searchbar-input-padding-horizontal)) + var(--f7-searchbar-input-extra-padding-right,0px))}.ios .searchbar input[type=search],.ios .searchbar input[type=text]{z-index:30}.ios .searchbar .input-clear-button{z-index:40;right:7px}.ios .searchbar-icon{width:13px;height:13px;position:absolute;top:50%;margin-top:-6px;z-index:40;left:8px}.ios .searchbar-icon:after{content:'search_ios';line-height:13px}.ios .searchbar-disable-button{font-size:17px;flex-shrink:0;transform:translate3d(0,0,0);transition-duration:.3s;color:var(--f7-searchbar-link-color,var(--f7-bars-link-color,var(--f7-theme-color)));display:none}.ios .searchbar-disable-button.active-state{transition-duration:0s;opacity:.3!important}.ios .searchbar-enabled .searchbar-disable-button{pointer-events:auto;opacity:1;margin-left:8px}.ios .searchbar:not(.searchbar-enabled) .searchbar-disable-button{transition-duration:.3s!important}.ios .searchbar-expandable{left:0;bottom:0;opacity:1;width:100%;height:0%;transform:translate3d(0,0,0);overflow:hidden}.ios .searchbar-expandable .searchbar-disable-button{margin-left:8px;opacity:1;display:block}.ios .searchbar-expandable .searchbar-inner{height:var(--f7-searchbar-expandable-size)}.ios .navbar.with-searchbar-expandable-closing .navbar-bg,.ios .navbar.with-searchbar-expandable-enabled .navbar-bg{transition-property:transform,opacity}.ios .navbar.with-searchbar-expandable-closing .left,.ios .navbar.with-searchbar-expandable-closing .navbar-bg,.ios .navbar.with-searchbar-expandable-closing .right,.ios .navbar.with-searchbar-expandable-closing .title,.ios .navbar.with-searchbar-expandable-enabled .left,.ios .navbar.with-searchbar-expandable-enabled .navbar-bg,.ios .navbar.with-searchbar-expandable-enabled .right,.ios .navbar.with-searchbar-expandable-enabled .title{transition-duration:.3s}.ios .navbar.with-searchbar-expandable-enabled .left,.ios .navbar.with-searchbar-expandable-enabled .right,.ios .navbar.with-searchbar-expandable-enabled .title,.ios .navbar.with-searchbar-expandable-enabled-no-transition .left,.ios .navbar.with-searchbar-expandable-enabled-no-transition .right,.ios .navbar.with-searchbar-expandable-enabled-no-transition .title{transform:translateY(calc(-1 * var(--f7-navbar-height)));opacity:0!important}.ios .searchbar-expandable.searchbar-enabled{opacity:1;height:var(--f7-searchbar-expandable-size);pointer-events:auto}.md .searchbar-disable-button,.md .searchbar-icon{position:absolute;top:50%;transition-duration:.3s}.md .searchbar-icon{width:48px;height:48px;left:0;top:0;display:flex;align-items:center;justify-content:center;left:var(--f7-safe-area-left)}.md .searchbar-icon:after{width:auto;height:auto;content:'search_md';line-height:1.2}.md .searchbar-disable-button{width:48px;height:48px;transform:rotate(-90deg) scale(.5);font-size:0!important;display:block;margin-top:-24px;color:var(--f7-searchbar-link-color,var(--f7-bars-link-color,var(--f7-theme-color)));left:calc(var(--f7-searchbar-inner-padding-left) + var(--f7-safe-area-left))}.md .searchbar-disable-button:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;line-height:48px;content:'arrow_left_md'}.md .searchbar-enabled:not(.searchbar-enabled-no-disable-button) .searchbar-disable-button{transform:rotate(0deg) scale(1);pointer-events:auto;opacity:1}.md .searchbar-enabled:not(.searchbar-enabled-no-disable-button) .searchbar-icon{opacity:0;transform:rotate(90deg) scale(.5)}.md .searchbar{--f7-searchbar-input-extra-padding-left:34px}.md .searchbar .input-clear-button{width:48px;height:48px;margin-top:-24px;right:0}.md .searchbar .input-clear-button:after{line-height:48px;content:'delete_round_md';opacity:1}.md .searchbar .input-clear-button:before{display:none}.md .searchbar-inline{--f7-searchbar-input-extra-padding-left:32px}.md .page>.searchbar,.md .searchbar-expandable,.md .subnavbar .searchbar{--f7-searchbar-input-extra-padding-left:34px}.md .page>.searchbar .searchbar-disable-button,.md .searchbar-expandable .searchbar-disable-button,.md .subnavbar .searchbar .searchbar-disable-button{left:calc(var(--f7-searchbar-inner-padding-left) + var(--f7-safe-area-left))}.md .page>.searchbar .searchbar-icon,.md .searchbar-expandable .searchbar-icon,.md .subnavbar .searchbar .searchbar-icon{left:var(--f7-safe-area-left)}.md .searchbar-expandable{--f7-searchbar-inner-padding-left:4px;--f7-searchbar-inner-padding-right:4px;height:var(--f7-searchbar-expandable-size);opacity:0;bottom:0;border-radius:calc(var(--f7-searchbar-expandable-size));width:calc(var(--f7-searchbar-expandable-size));margin-top:calc(var(--f7-searchbar-expandable-size) * -1 / 2);transform:translate3d(0px,0px,0px);background-color:var(--f7-searchbar-input-bg-color);left:100%;margin-left:calc(var(--f7-searchbar-expandable-size) * -1)}.md .searchbar-expandable.searchbar-enabled{width:100%;border-radius:0;opacity:1;pointer-events:auto;margin-top:0;left:0;margin-left:0}:root{--f7-message-text-header-opacity:0.65;--f7-message-text-header-font-size:12px;--f7-message-text-footer-opacity:0.65;--f7-message-text-footer-font-size:12px;--f7-message-bubble-line-height:1.2;--f7-message-header-font-size:12px;--f7-message-footer-font-size:11px;--f7-message-name-font-size:12px;--f7-message-name-font-weight:inherit;--f7-message-avatar-border-radius:50%;--f7-messages-title-font-weight:inherit;--f7-message-typing-indicator-bg-color:#000}:root .dark,:root.dark{--f7-message-typing-indicator-bg-color:#fff}.ios{--f7-message-text-header-text-color:inherit;--f7-message-text-footer-text-color:inherit;--f7-messages-title-font-size:11px;--f7-message-avatar-size:29px;--f7-message-margin:10px;--f7-message-bubble-min-height:32px;--f7-message-bubble-font-size:17px;--f7-message-bubble-border-radius:16px;--f7-message-bubble-padding-vertical:6px;--f7-message-bubble-padding-horizontal:16px;--f7-message-typing-indicator-opacity:0.35;--f7-message-sent-text-color:#fff;--f7-messages-content-bg-color:#fff;--f7-message-received-text-color:#000;--f7-message-received-bg-color:#e5e5ea;--f7-messages-title-text-color:rgba(0, 0, 0, 0.45);--f7-message-header-text-color:rgba(0, 0, 0, 0.45);--f7-message-footer-text-color:rgba(0, 0, 0, 0.45);--f7-message-name-text-color:rgba(0, 0, 0, 0.45)}.ios .dark,.ios.dark{--f7-message-received-bg-color:#252525;--f7-message-received-text-color:#fff;--f7-messages-content-bg-color:transparent;--f7-messages-title-text-color:rgba(255, 255, 255, 0.54);--f7-message-header-text-color:rgba(255, 255, 255, 0.54);--f7-message-name-text-color:rgba(255, 255, 255, 0.54);--f7-message-footer-text-color:rgba(255, 255, 255, 0.54)}.md{--f7-messages-content-bg-color:transparent;--f7-messages-title-font-size:12px;--f7-message-avatar-size:32px;--f7-message-margin:16px;--f7-message-bubble-min-height:40px;--f7-message-bubble-font-size:16px;--f7-message-bubble-border-radius:20px;--f7-message-bubble-padding-vertical:10px;--f7-message-bubble-padding-horizontal:16px;--f7-message-typing-indicator-opacity:0.6}.md,.md .dark,.md [class*=color-]{--f7-message-sent-bg-color:var(--f7-md-primary);--f7-message-sent-text-color:var(--f7-md-on-primary);--f7-message-received-bg-color:var(--f7-md-surface-variant);--f7-message-received-text-color:var(--f7-md-on-surface);--f7-message-text-header-text-color:var(--f7-md-on-surface-variant);--f7-message-text-footer-text-color:var(--f7-md-on-surface-variant);--f7-messages-title-text-color:var(--f7-md-on-surface-variant);--f7-message-header-text-color:var(--f7-md-on-surface-variant);--f7-message-footer-text-color:var(--f7-md-on-surface-variant);--f7-message-name-text-color:var(--f7-md-on-surface-variant)}.messages,.messages-content{background:var(--f7-messages-content-bg-color)}.messages{display:flex;flex-direction:column;min-height:100%;position:relative;z-index:1}.message,.messages-title{margin-top:var(--f7-message-margin)}.message:last-child,.messages-title:last-child{margin-bottom:var(--f7-message-margin)}.messages-title{text-align:center;width:100%;line-height:1;color:var(--f7-messages-title-text-color);font-size:var(--f7-messages-title-font-size);font-weight:var(--f7-messages-title-font-weight)}.message{max-width:70%;box-sizing:border-box;display:flex;align-items:flex-end;position:relative;z-index:1;transform:translate3d(0,0,0)}.message-avatar{border-radius:var(--f7-message-avatar-border-radius);position:relative;background-size:cover;align-self:flex-end;flex-shrink:0;width:var(--f7-message-avatar-size);height:var(--f7-message-avatar-size)}.message-content{position:relative;display:flex;flex-direction:column}.message-footer,.message-header,.message-name{line-height:1}.message-header{color:var(--f7-message-header-text-color);font-size:var(--f7-message-header-font-size)}.message-footer{color:var(--f7-message-footer-text-color);font-size:var(--f7-message-footer-font-size);margin-bottom:-1em}.message-name{color:var(--f7-message-name-text-color);font-size:var(--f7-message-name-font-size);font-weight:var(--f7-message-name-font-weight)}.message-bubble{box-sizing:border-box;word-break:break-word;display:flex;flex-direction:column;position:relative;line-height:var(--f7-message-bubble-line-height);font-size:var(--f7-message-bubble-font-size);border-radius:var(--f7-message-bubble-border-radius);padding:var(--f7-message-bubble-padding-vertical) var(--f7-message-bubble-padding-horizontal);min-height:var(--f7-message-bubble-min-height)}.message-image img{display:block;max-width:100%;height:auto;width:auto}.message-text-footer,.message-text-header{line-height:1}.message-text-header{color:var(--f7-message-text-header-text-color);opacity:var(--f7-message-text-header-opacity);font-size:var(--f7-message-text-header-font-size)}.message-text-footer{color:var(--f7-message-text-footer-text-color);opacity:var(--f7-message-text-footer-opacity);font-size:var(--f7-message-text-footer-font-size)}.message-text{text-align:left}.message-sent{text-align:right;flex-direction:row-reverse;align-self:flex-end}.message-sent .message-bubble{color:var(--f7-message-sent-text-color);background:var(--f7-message-sent-bg-color,var(--f7-theme-color))}.message-sent .message-content{align-items:flex-end}.message-received{flex-direction:row}.message-received .message-bubble{color:var(--f7-message-received-text-color);background:var(--f7-message-received-bg-color)}.message-received .message-content{align-items:flex-start}.message:not(.message-last) .message-avatar{opacity:0}.message:not(.message-first) .message-name{display:none}.message.message-same-name .message-name{display:none}.message.message-same-header .message-header{display:none}.message.message-same-footer .message-footer{display:none}.message-appear-from-bottom{animation:message-appear-from-bottom .3s}.message-appear-from-top{animation:message-appear-from-top .3s}.message-typing-indicator{display:inline-block;font-size:0;vertical-align:middle}.message-typing-indicator>div{display:inline-block;position:relative;background:var(--f7-message-typing-indicator-bg-color);opacity:var(--f7-message-typing-indicator-opacity);vertical-align:middle;border-radius:50%}@keyframes message-appear-from-bottom{from{transform:translate3d(0,100%,0)}to{transform:translate3d(0,0,0)}}@keyframes message-appear-from-top{from{transform:translate3d(0,-100%,0)}to{transform:translate3d(0,0,0)}}.ios .message-footer b,.ios .message-header b,.ios .message-name b,.ios .messages-title b{font-weight:600}.ios .message-header,.ios .message-name{margin-bottom:3px}.ios .message-footer{margin-top:3px}.ios .message-bubble{min-width:48px}.ios .message-image{margin:var(--f7-message-bubble-padding-vertical) calc(-1 * var(--f7-message-bubble-padding-horizontal))}.ios .message-image:first-child{margin-top:calc(-1 * var(--f7-message-bubble-padding-vertical))}.ios .message-image:first-child img{border-top-left-radius:var(--f7-message-bubble-border-radius);border-top-right-radius:var(--f7-message-bubble-border-radius)}.ios .message-image:last-child{margin-bottom:calc(-1 * var(--f7-message-bubble-padding-vertical))}.ios .message-image:last-child img{border-bottom-left-radius:var(--f7-message-bubble-border-radius);border-bottom-right-radius:var(--f7-message-bubble-border-radius)}.ios .message-text-header{margin-bottom:3px}.ios .message-text-footer{margin-top:3px}.ios .message-received{margin-left:calc(10px + var(--f7-safe-area-left))}.ios .message-received .message-footer,.ios .message-received .message-header,.ios .message-received .message-name{margin-left:var(--f7-message-bubble-padding-horizontal)}.ios .message-received .message-bubble{padding-left:calc(var(--f7-message-bubble-padding-horizontal) + 6px);-webkit-mask-box-image:url(\"data:image/svg+xml;charset=utf-8,\") 50% 42% 46% 56%}.ios .message-received .message-image{margin-left:calc(-1 * (var(--f7-message-bubble-padding-horizontal) + 6px))}.ios .message-received.message-tail .message-bubble{border-radius:var(--f7-message-bubble-border-radius) var(--f7-message-bubble-border-radius) var(--f7-message-bubble-border-radius) 0}.ios .message-received.message-tail:not(.message-typing) .message-bubble{-webkit-mask-box-image:url(\"data:image/svg+xml;charset=utf-8,\") 50% 42% 46% 56%}.ios .message-received.message-tail:not(.message-typing) .message-bubble .message-image:last-child img{border-bottom-left-radius:0px}.ios .message-sent{margin-right:calc(10px + var(--f7-safe-area-right))}.ios .message-sent .message-footer,.ios .message-sent .message-header,.ios .message-sent .message-name{margin-right:var(--f7-message-bubble-padding-horizontal)}.ios .message-sent .message-bubble{padding-right:calc(var(--f7-message-bubble-padding-horizontal) + 6px);-webkit-mask-box-image:url(\"data:image/svg+xml;charset=utf-8,\") 50% 56% 46% 42%}.ios .message-sent .message-image{margin-right:calc(-1 * (var(--f7-message-bubble-padding-horizontal) + 6px))}.ios .message-sent.message-tail .message-bubble{border-radius:var(--f7-message-bubble-border-radius) var(--f7-message-bubble-border-radius) 0 var(--f7-message-bubble-border-radius)}.ios .message-sent.message-tail .message-bubble{-webkit-mask-box-image:url(\"data:image/svg+xml;charset=utf-8,\") 50% 56% 46% 42%}.ios .message-sent.message-tail .message-bubble .message-image:last-child img{border-bottom-right-radius:0px}.ios .message+.message:not(.message-first){margin-top:1px}.ios .message-received.message-typing .message-content:after,.ios .message-received.message-typing .message-content:before{content:'';position:absolute;background:var(--f7-message-received-bg-color);border-radius:50%}.ios .message-received.message-typing .message-content:after{width:11px;height:11px;left:4px;bottom:0px}.ios .message-received.message-typing .message-content:before{width:6px;height:6px;left:-1px;bottom:-4px}.ios .message-typing-indicator>div{width:9px;height:9px}.ios .message-typing-indicator>div+div{margin-left:4px}.ios .message-typing-indicator>div:first-child{animation:ios-message-typing-indicator .9s infinite}.ios .message-typing-indicator>div:nth-child(2){animation:ios-message-typing-indicator .9s 150ms infinite}.ios .message-typing-indicator>div:nth-child(3){animation:ios-message-typing-indicator .9s .3s infinite}@keyframes ios-message-typing-indicator{0%{opacity:.35}25%{opacity:.2}50%{opacity:.2}}.md .message-footer b,.md .message-header b,.md .message-name b,.md .messages-title b{font-weight:500}.md .message-header,.md .message-name{margin-bottom:2px}.md .message-footer{margin-top:2px}.md .message-text-header{margin-bottom:4px}.md .message-text-footer{margin-top:4px}.md .message-image{margin:calc(-1 * var(--f7-message-bubble-padding-vertical)) calc(-1 * var(--f7-message-bubble-padding-horizontal))}.md .message-image,.md .message-image img{border-radius:var(--f7-message-bubble-border-radius)}.md .message-received{margin-left:calc(8px + var(--f7-safe-area-left))}.md .message-received .message-footer,.md .message-received .message-header,.md .message-received .message-name{margin-left:16px}.md .message-received.message-first:not(.message-last) .message-bubble,.md .message-received.message-first:not(.message-last) .message-image,.md .message-received.message-first:not(.message-last) .message-image img{border-bottom-left-radius:4px}.md .message-received.message-last:not(.message-first) .message-bubble,.md .message-received.message-last:not(.message-first) .message-image,.md .message-received.message-last:not(.message-first) .message-image img{border-top-left-radius:4px}.md .message-received:not(.message-last):not(.message-first) .message-bubble,.md .message-received:not(.message-last):not(.message-first) .message-image,.md .message-received:not(.message-last):not(.message-first) .message-image img{border-bottom-left-radius:4px;border-top-left-radius:4px}.md .message-received .message-avatar+.message-content{margin-left:8px}.md .message-sent{margin-right:calc(8px + var(--f7-safe-area-right))}.md .message-sent .message-footer,.md .message-sent .message-header,.md .message-sent .message-name{margin-right:16px}.md .message-sent.message-first:not(.message-last) .message-bubble,.md .message-sent.message-first:not(.message-last) .message-image,.md .message-sent.message-first:not(.message-last) .message-image img{border-bottom-right-radius:4px}.md .message-sent.message-last:not(.message-first) .message-bubble,.md .message-sent.message-last:not(.message-first) .message-image,.md .message-sent.message-last:not(.message-first) .message-image img{border-top-right-radius:4px}.md .message-sent:not(.message-last):not(.message-first) .message-bubble,.md .message-sent:not(.message-last):not(.message-first) .message-image,.md .message-sent:not(.message-last):not(.message-first) .message-image img{border-bottom-right-radius:4px;border-top-right-radius:4px}.md .message-sent .message-avatar+.message-content{margin-right:var(--f7-message-bubble-padding-horizontal)}.md .message+.message:not(.message-first){margin-top:2px}.md .message-typing-indicator>div{width:6px;height:6px}.md .message-typing-indicator>div+div{margin-left:6px}.md .message-typing-indicator>div:first-child{animation:md-message-typing-indicator .9s infinite}.md .message-typing-indicator>div:nth-child(2){animation:md-message-typing-indicator .9s 150ms infinite}.md .message-typing-indicator>div:nth-child(3){animation:md-message-typing-indicator .9s .3s infinite}@keyframes md-message-typing-indicator{0%{transform:translateY(0%)}25%{transform:translateY(-5px)}50%{transform:translateY(0%)}}:root{--f7-messagebar-attachments-height:155px;--f7-messagebar-sheet-height:252px;--f7-messagebar-sheet-landscape-height:192px}.ios{--f7-messagebar-height:44px;--f7-messagebar-font-size:17px;--f7-messagebar-textarea-bg-color:transparent;--f7-messagebar-border-color:transparent;--f7-messagebar-textarea-border-radius:17px;--f7-messagebar-textarea-padding:6px 16px;--f7-messagebar-textarea-height:34px;--f7-messagebar-textarea-font-size:17px;--f7-messagebar-textarea-line-height:20px;--f7-messagebar-sheet-bg-color:#d1d5da;--f7-messagebar-sheet-border-color:transparent;--f7-messagebar-attachment-border-radius:12px;--f7-messagebar-attachment-height:155px;--f7-messagebar-attachment-landscape-height:120px;--f7-messagebar-textarea-placeholder-color:rgba(0, 0, 0, 0.4);--f7-messagebar-textarea-text-color:#000;--f7-messagebar-textarea-border:1px solid #c8c8cd;--f7-messagebar-attachments-border-color:#c8c8cd;--f7-messagebar-bg-color:#fff;--f7-messagebar-bg-color-rgb:255,255,255}.ios .dark,.ios.dark{--f7-messagebar-textarea-placeholder-color:rgba(255, 255, 255, 0.4);--f7-messagebar-textarea-text-color:#fff;--f7-messagebar-textarea-border:1px solid var(--f7-bars-border-color);--f7-messagebar-attachments-border-color:var(--f7-bars-border-color);--f7-messagebar-bg-color:var(--f7-bars-bg-color);--f7-messagebar-bg-color-rgb:var(--f7-bars-bg-color-rgb)}.md{--f7-messagebar-height:64px;--f7-messagebar-font-size:16px;--f7-messagebar-textarea-border-radius:24px;--f7-messagebar-textarea-padding:12px 16px;--f7-messagebar-textarea-height:48px;--f7-messagebar-textarea-font-size:16px;--f7-messagebar-textarea-line-height:22px;--f7-messagebar-textarea-border:1px solid transparent;--f7-messagebar-attachment-border-radius:12px;--f7-messagebar-attachment-height:72px;--f7-messagebar-attachment-landscape-height:72px;--f7-messagebar-border-color:transparent;--f7-messagebar-attachments-border-color:transparent}.md,.md .dark,.md [class*=color-]{--f7-messagebar-textarea-placeholder-color:var(--f7-md-on-surface-variant);--f7-messagebar-textarea-bg-color:var(--f7-md-surface-variant);--f7-messagebar-bg-color:var(--f7-md-surface);--f7-messagebar-textarea-text-color:var(--f7-md-on-surface);--f7-messagebar-sheet-bg-color:var(--f7-md-surface);--f7-messagebar-sheet-border-color:var(--f7-md-outline-variant);--f7-messagebar-link-color:var(--f7-md-on-surface)}.messagebar{transform:translate3d(0,0,0);background:var(--f7-messagebar-bg-color);height:auto;min-height:var(--f7-messagebar-height);font-size:var(--f7-messagebar-font-size);padding-bottom:var(--f7-safe-area-bottom);bottom:0}.messagebar:before{content:'';position:absolute;background-color:var(--f7-messagebar-border-color);display:block;z-index:15;top:0;right:auto;bottom:auto;left:0;height:1px;width:100%;transform-origin:50% 0%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .messagebar{background-color:rgba(var(--f7-messagebar-bg-color-rgb),var(--f7-bars-translucent-opacity));-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.messagebar.no-outline:before{display:none!important}.messagebar.toolbar-hidden:after{display:none!important}.messagebar .toolbar-inner{top:auto;position:relative;height:auto;bottom:auto;padding-left:calc(var(--f7-messagebar-inner-padding-left,var(--f7-toolbar-inner-padding-left)) + var(--f7-safe-area-left));padding-right:calc(var(--f7-messagebar-inner-padding-right,var(--f7-toolbar-inner-padding-right)) + var(--f7-safe-area-right))}.messagebar.messagebar-sheet-visible>.toolbar-inner{bottom:0}.messagebar .messagebar-area{width:100%;flex-shrink:1;overflow:hidden;position:relative}.messagebar textarea{width:100%;flex-shrink:1;background-color:var(--f7-messagebar-textarea-bg-color);border-radius:var(--f7-messagebar-textarea-border-radius);padding:var(--f7-messagebar-textarea-padding);height:var(--f7-messagebar-textarea-height);color:var(--f7-messagebar-textarea-text-color);font-size:var(--f7-messagebar-textarea-font-size);line-height:var(--f7-messagebar-textarea-line-height);border:var(--f7-messagebar-textarea-border)}.messagebar textarea::-moz-placeholder{color:var(--f7-messagebar-textarea-placeholder-color)}.messagebar textarea::placeholder{color:var(--f7-messagebar-textarea-placeholder-color)}.messagebar a.link{align-self:flex-end;flex-shrink:0;color:var(--f7-messagebar-link-color,var(--f7-theme-color))}.messagebar-attachments{width:100%;overflow:auto;-webkit-overflow-scrolling:touch;font-size:0;white-space:nowrap;box-sizing:border-box;position:relative}.messagebar:not(.messagebar-attachments-visible) .messagebar-attachments{display:none}.messagebar-attachment{background-size:cover;background-position:center;background-repeat:no-repeat;display:inline-block;vertical-align:middle;white-space:normal;height:var(--f7-messagebar-attachment-height);position:relative;border-radius:var(--f7-messagebar-attachment-border-radius)}@media (orientation:landscape){.messagebar-attachment{height:var(--f7-messagebar-attachment-landscape-height)}}.messagebar-attachment img{display:block;width:auto;height:100%;border-radius:var(--f7-messagebar-attachment-border-radius)}.messagebar-sheet{overflow:auto;-webkit-overflow-scrolling:touch;display:flex;flex-wrap:wrap;flex-direction:column;align-content:flex-start;height:var(--f7-messagebar-sheet-height);background-color:var(--f7-messagebar-sheet-bg-color);border-top:1px solid var(--f7-messagebar-sheet-border-color);padding-left:var(--f7-safe-area-left);padding-right:var(--f7-safe-area-right)}@media (orientation:landscape){.messagebar-sheet{height:var(--f7-messagebar-sheet-landscape-height)}}.messagebar-sheet-image{background-size:cover;background-position:center;background-repeat:no-repeat}.messagebar-sheet-image>img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;border-radius:inherit;transition-duration:.2s}.messagebar-attachment-delete{display:block;position:absolute;border-radius:50%;box-sizing:border-box;cursor:pointer}.messagebar-attachment-delete:after,.messagebar-attachment-delete:before{position:absolute;content:'';left:50%;top:50%}.messagebar-attachment-delete:after{transform:rotate(45deg)}.messagebar-attachment-delete:before{transform:rotate(-45deg)}.messagebar:not(.messagebar-sheet-visible) .messagebar-sheet{display:none}.messagebar~*{--f7-page-toolbar-bottom-offset:var(--f7-messagebar-height)}.ios .messagebar a.link.icon-only:first-child{margin-left:-8px}.ios .messagebar a.link.icon-only:last-child{margin-right:-8px}.ios .messagebar a.link:not(.icon-only)+.messagebar-area{margin-left:8px}.ios .messagebar .messagebar-area+a.link:not(.icon-only){margin-left:8px}.ios .messagebar-area{margin-top:5px;margin-bottom:5px}.ios .messagebar-attachments{padding:5px;border-radius:var(--f7-messagebar-textarea-border-radius) var(--f7-messagebar-textarea-border-radius) 0 0;border:1px solid var(--f7-messagebar-attachments-border-color);border-bottom:none}.ios .messagebar-attachments-visible .messagebar-attachments+textarea{border-radius:0 0 var(--f7-messagebar-textarea-border-radius) var(--f7-messagebar-textarea-border-radius)}.ios .messagebar-attachment{font-size:14px}.ios .messagebar-attachment+.messagebar-attachment{margin-left:8px}.ios .messagebar-attachment-delete{right:5px;top:5px;width:20px;height:20px;background:#7d7e80;border:2px solid #fff;box-shadow:0px 0px 2px rgba(0,0,0,.2)}.ios .messagebar-attachment-delete:after,.ios .messagebar-attachment-delete:before{width:10px;height:2px;background:#fff;margin-left:-5px;margin-top:-1px}.ios .messagebar-sheet-image,.ios .messagebar-sheet-item{box-sizing:border-box;flex-shrink:0;margin-top:1px;position:relative;overflow:hidden;height:calc((var(--f7-messagebar-sheet-height) - 2px)/ 2);width:calc((var(--f7-messagebar-sheet-height) - 2px)/ 2);margin-left:1px}@media (orientation:landscape){.ios .messagebar-sheet-image,.ios .messagebar-sheet-item{width:calc((var(--f7-messagebar-sheet-landscape-height) - 2px)/ 2);height:calc((var(--f7-messagebar-sheet-landscape-height) - 2px)/ 2)}}.ios .messagebar-sheet-image .icon-checkbox,.ios .messagebar-sheet-image .icon-radio,.ios .messagebar-sheet-item .icon-checkbox,.ios .messagebar-sheet-item .icon-radio{position:absolute;right:8px;bottom:8px;z-index:1}.md .messagebar{--f7-toolbar-link-height:var(--f7-messagebar-height)}.md .messagebar-attachments{padding:16px 16px 0;border-bottom:1px solid var(--f7-messagebar-attachments-border-color)}.md .messagebar-attachment img{width:var(--f7-messagebar-attachment-height);height:var(--f7-messagebar-attachment-height);-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center}.md .messagebar-attachment+.messagebar-attachment{margin-left:16px}.md .messagebar-attachments-visible .messagebar-attachments{background:var(--f7-messagebar-textarea-bg-color);border-radius:var(--f7-messagebar-textarea-border-radius) var(--f7-messagebar-textarea-border-radius) 0 0}.md .messagebar-attachments-visible textarea{border-top-left-radius:0;border-top-right-radius:0}.md .messagebar-area{margin-top:8px;margin-bottom:8px}.md .messagebar-attachment-delete{right:-6px;top:-6px;width:24px;height:24px;background-color:var(--f7-md-inverse-surface);border-radius:24px;border:2px solid var(--f7-messagebar-textarea-bg-color)}.md .messagebar-attachment-delete:after,.md .messagebar-attachment-delete:before{width:12px;height:2px;background:var(--f7-messagebar-textarea-bg-color);margin-left:-6px;margin-top:-1px}.md .messagebar-sheet-image,.md .messagebar-sheet-item{--f7-touch-ripple-color:transparent;box-sizing:border-box;flex-shrink:0;margin-top:8px;position:relative;overflow:hidden;height:calc((var(--f7-messagebar-sheet-height) - 24px)/ 2);width:calc((var(--f7-messagebar-sheet-height) - 24px)/ 2);border-radius:4px;margin-left:8px}@media (orientation:landscape){.md .messagebar-sheet-image,.md .messagebar-sheet-item{width:calc((var(--f7-messagebar-sheet-landscape-height) - 8px)/ 2);height:calc((var(--f7-messagebar-sheet-landscape-height) - 24px)/ 2)}}.md .messagebar-sheet-image input:checked~img,.md .messagebar-sheet-item input:checked~img{transform:scale(.85)}.md .messagebar-sheet-image input:checked~.icon-checkbox,.md .messagebar-sheet-image input:checked~.icon-radio,.md .messagebar-sheet-item input:checked~.icon-checkbox,.md .messagebar-sheet-item input:checked~.icon-radio{transform:translate(-50%,-50%) scale(1)}.md .messagebar-sheet-image .icon-checkbox,.md .messagebar-sheet-image .icon-radio,.md .messagebar-sheet-item .icon-checkbox,.md .messagebar-sheet-item .icon-radio{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.85);border:none;z-index:1;--f7-checkbox-inactive-color:var(--f7-md-surface);--f7-checkbox-active-color:var(--f7-md-surface)}.md .messagebar-sheet-image .icon-checkbox::after,.md .messagebar-sheet-image .icon-radio::after,.md .messagebar-sheet-item .icon-checkbox::after,.md .messagebar-sheet-item .icon-radio::after{color:var(--f7-md-on-surface);font-size:18px;width:auto;height:100%;line-height:32px;left:0;position:static}@font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, 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');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;overflow:clip;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);box-sizing:content-box}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader,.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.swiper-virtual .swiper-slide{-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:var(--swiper-navigation-top-offset,50%);width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next svg,.swiper-button-prev svg{width:100%;height:100%;-o-object-fit:contain;object-fit:contain;transform-origin:center}.swiper-rtl .swiper-button-next svg,.swiper-rtl .swiper-button-prev svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:var(--swiper-navigation-sides-offset,10px);right:auto}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-lock{display:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;font-variant:initial;line-height:1}.swiper-button-prev:after,.swiper-rtl .swiper-button-next:after{content:'prev'}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-next:after,.swiper-rtl .swiper-button-prev:after{content:'next'}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:var(--swiper-pagination-bottom,8px);top:var(--swiper-pagination-top,auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius,50%);background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:var(--swiper-pagination-right,8px);left:var(--swiper-pagination-left,auto);top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color,inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color,rgba(0,0,0,.25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size,4px);left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:var(--swiper-pagination-progressbar-size,4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:var(--swiper-scrollbar-border-radius,10px);position:relative;-ms-touch-action:none;background:var(--swiper-scrollbar-bg-color,rgba(0,0,0,.1))}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:var(--swiper-scrollbar-sides-offset,1%);bottom:var(--swiper-scrollbar-bottom,4px);top:var(--swiper-scrollbar-top,auto);z-index:50;height:var(--swiper-scrollbar-size,4px);width:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar.swiper-scrollbar-vertical,.swiper-vertical>.swiper-scrollbar{position:absolute;left:var(--swiper-scrollbar-left,auto);right:var(--swiper-scrollbar-right,4px);top:var(--swiper-scrollbar-sides-offset,1%);z-index:50;width:var(--swiper-scrollbar-size,4px);height:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:var(--swiper-scrollbar-drag-bg-color,rgba(0,0,0,.5));border-radius:var(--swiper-scrollbar-border-radius,10px);left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move;touch-action:none}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active{pointer-events:auto}.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-cube .swiper-slide-next+.swiper-slide{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top{z-index:0;backface-visibility:hidden}.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top{z-index:0;backface-visibility:hidden}.swiper-creative .swiper-slide{backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;backface-visibility:hidden;overflow:hidden}:root{--f7-photobrowser-bg-color:#fff;--f7-photobrowser-bars-bg-color:rgba(var(--f7-bars-bg-color-rgb), 0.95);--f7-photobrowser-bars-text-color:var(--f7-bars-text-color);--f7-photobrowser-bars-link-color:var(--f7-bars-link-color);--f7-photobrowser-caption-font-size:13px;--f7-photobrowser-caption-font-weight:500;--f7-photobrowser-caption-light-text-color:#000;--f7-photobrowser-caption-dark-text-color:#fff;--f7-photobrowser-exposed-bg-color:#000;--f7-photobrowser-dark-bg-color:#000;--f7-photobrowser-dark-bars-bg-color:rgba(27, 27, 27, 0.8);--f7-photobrowser-dark-bars-text-color:#fff;--f7-photobrowser-dark-bars-link-color:#fff}.photo-browser{position:absolute;left:0;top:0;width:100%;height:100%;z-index:400}.photo-browser-standalone.modal-in{transition-duration:0s;animation:photo-browser-in .4s}.photo-browser-standalone.modal-out{transition-duration:0s;animation:photo-browser-out .4s!important}.photo-browser-standalone.modal-out.swipe-close-to-bottom,.photo-browser-standalone.modal-out.swipe-close-to-top{animation:none!important}.photo-browser-standalone.photo-browser-transitioning{transition:.4s;animation:none!important}.photo-browser-popup.modal-out.swipe-close-to-bottom,.photo-browser-popup.modal-out.swipe-close-to-top{transition-duration:.3s}.photo-browser-popup.modal-out.swipe-close-to-bottom{transform:translate3d(0,100vh,0)}.photo-browser-popup.modal-out.swipe-close-to-top{transform:translate3d(0,-100vh,0)}.photo-browser-page{background:0 0}.photo-browser-page .toolbar{transform:none}.photo-browser-popup{background:0 0}.photo-browser-of{margin:0 5px}.photo-browser-captions{pointer-events:none;position:absolute;left:0;width:100%;bottom:var(--f7-safe-area-bottom);z-index:10;opacity:1;transition-duration:.4s}.photo-browser-captions.photo-browser-captions-exposed{opacity:0}.toolbar~.toolbar.photo-browser-thumbs{bottom:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom))}.page~.photo-browser-page:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs,.photo-browser-popup:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs,.photo-browser-standalone:not(.photo-browser-exposed) .toolbar~.toolbar.photo-browser-thumbs{height:var(--f7-toolbar-height)}.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs{transform:translate3d(0,calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom,0)),0)}.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs .swiper{height:calc(100% - var(--f7-safe-area-bottom,0))}.navbar+.toolbar.photo-browser-thumbs .swiper{height:calc(100% - var(--f7-safe-area-bottom,0))}.toolbar~.photo-browser-captions{bottom:calc(var(--f7-toolbar-height) + var(--f7-safe-area-bottom));transform:translate3d(0,0px,0)}.toolbar~.photo-browser-captions.photo-browser-captions-exposed{transform:translate3d(0,0px,0)}.toolbar~.toolbar~.photo-browser-captions{bottom:calc(var(--f7-toolbar-height) * 2 + var(--f7-safe-area-bottom))}.toolbar~.toolbar~.photo-browser-captions.photo-browser-captions-exposed{transform:translate3d(0,var(--f7-toolbar-height),0)}.photo-browser-thumbs{transition-property:transform,background-color,color}.photo-browser-thumbs .swiper{width:100%;height:100%}.photo-browser-thumbs .swiper-slide{width:auto;display:flex;align-items:center;justify-content:center}.photo-browser-thumbs img{width:auto;height:75%;display:block;border-radius:2px;min-width:4px}.photo-browser-thumbs .swiper-slide img{transform:translateX(-4px);transition-duration:150ms}.photo-browser-thumbs .swiper-slide-active img{transform:scale(1.2)}.photo-browser-thumbs .swiper-slide-active~.swiper-slide img{transform:translateX(4px)}.photo-browser-caption{box-sizing:border-box;transition-duration:.4s;position:absolute;bottom:0;left:0;opacity:0;padding:4px 5px;width:100%;text-align:center;font-size:var(--f7-photobrowser-caption-font-size);font-weight:var(--f7-photobrowser-caption-font-weight)}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-bars .photo-browser-caption{-webkit-backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur));backdrop-filter:saturate(180%) blur(var(--f7-bars-translucent-blur))}}.photo-browser-caption:empty{display:none}.photo-browser-caption.photo-browser-caption-active{opacity:1}.photo-browser-captions-light .photo-browser-caption{color:var(--f7-photobrowser-caption-light-text-color)}.dark .photo-browser-caption,.photo-browser-captions-dark .photo-browser-caption{color:var(--f7-photobrowser-caption-dark-text-color)}.photo-browser-swiper-container{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;background:var(--f7-photobrowser-bg-color);transition:.4s;transition-property:background-color;touch-action:none}.photo-browser-next.swiper-button-disabled,.photo-browser-prev.swiper-button-disabled{opacity:.3;pointer-events:none}.photo-browser-slide{width:100%;height:100%;position:relative;overflow:hidden;display:flex;justify-content:center;align-items:center;flex-shrink:0;box-sizing:border-box}.photo-browser-slide span.swiper-zoom-container{display:none}.photo-browser-slide img{width:auto;height:auto;max-width:100%;max-height:100%;display:none}.photo-browser-slide.swiper-slide-active span.swiper-zoom-container,.photo-browser-slide.swiper-slide-next span.swiper-zoom-container,.photo-browser-slide.swiper-slide-prev span.swiper-zoom-container{display:flex}.photo-browser-slide.swiper-slide-active img,.photo-browser-slide.swiper-slide-next img,.photo-browser-slide.swiper-slide-prev img{display:inline}.photo-browser-slide.swiper-slide-active.photo-browser-slide-lazy .preloader,.photo-browser-slide.swiper-slide-next.photo-browser-slide-lazy .preloader,.photo-browser-slide.swiper-slide-prev.photo-browser-slide-lazy .preloader{display:block}.photo-browser-slide iframe{width:100%;height:100%}.photo-browser-slide .preloader{display:none;position:absolute;width:42px;height:42px;margin-left:-21px;margin-top:-21px;left:50%;top:50%}.navbar-photo-browser .right .link i,.navbar-photo-browser .right .link svg{width:24px;height:24px;display:block}.navbar-photo-browser .navbar-bg,.photo-browser-caption,.photo-browser-page .navbar-bg,.photo-browser-page .toolbar{background-color:var(--f7-photobrowser-bars-bg-color,rgba(var(--f7-bars-bg-color-rgb),.95))}.photo-browser-page{touch-action:none}.photo-browser-page .navbar,.photo-browser-page .toolbar{transform:translate3d(0,0,0);transition-duration:.4s;color:var(--f7-photobrowser-bars-text-color,var(--f7-bars-text-color))}.photo-browser-page .navbar a,.photo-browser-page .toolbar a{color:var(--f7-photobrowser-bars-link-color,var(--f7-bars-link-color,var(--f7-theme-color)))}.photo-browser-exposed .navbar,.photo-browser-exposed .toolbar:not(.photo-browser-thumbs){opacity:0;visibility:hidden;pointer-events:none}.photo-browser-exposed .toolbar:not(.photo-browser-thumbs)~.photo-browser-captions,.photo-browser-exposed .toolbar~.toolbar.photo-browser-thumbs~.photo-browser-captions{transform:translate3d(0,var(--f7-toolbar-height),0)}.photo-browser-exposed .photo-browser-swiper-container{background:var(--f7-photobrowser-exposed-bg-color)}.photo-browser-dark .photo-browser-thumbs,.photo-browser-dark .toolbar,.photo-browser-exposed .photo-browser-thumbs,.photo-browser-exposed .toolbar{background-color:var(--f7-photobrowser-dark-bars-bg-color)}.photo-browser-dark .photo-browser-caption,.photo-browser-exposed .photo-browser-caption{color:var(--f7-photobrowser-caption-dark-text-color);background-color:var(--f7-photobrowser-dark-bars-bg-color)}.view.with-photo-browser-page-exposed .navbar{opacity:0;pointer-events:none}.photo-browser-page .toolbar:after,.photo-browser-page .toolbar:before{display:none!important}.navbar-photo-browser-dark .navbar-bg,.photo-browser-page-dark .navbar-bg{background:var(--f7-photobrowser-dark-bars-bg-color)}.navbar-photo-browser-dark .navbar-bg:after,.navbar-photo-browser-dark .navbar-bg:before,.photo-browser-page-dark .navbar-bg:after,.photo-browser-page-dark .navbar-bg:before{display:none!important}.navbar-photo-browser-dark,.photo-browser-dark .navbar,.photo-browser-dark .toolbar,.photo-browser-page-dark .navbar,.photo-browser-page-dark .toolbar{color:var(--f7-photobrowser-dark-bars-text-color)}.navbar-photo-browser-dark a,.photo-browser-dark .navbar a,.photo-browser-dark .toolbar a,.photo-browser-page-dark .navbar a,.photo-browser-page-dark .toolbar a{color:var(--f7-photobrowser-dark-bars-link-color)}.photo-browser-dark .photo-browser-swiper-container,.photo-browser-page-dark .photo-browser-swiper-container{background:var(--f7-photobrowser-dark-bg-color)}@keyframes photo-browser-in{0%{transform:translate3d(0,0,0) scale(.5);opacity:0}50%{transform:translate3d(0,0,0) scale(1.05);opacity:1}100%{transform:translate3d(0,0,0) scale(1);opacity:1}}@keyframes photo-browser-out{0%{transform:translate3d(0,0,0) scale(1);opacity:1}50%{transform:translate3d(0,0,0) scale(1.05);opacity:1}100%{transform:translate3d(0,0,0) scale(.5);opacity:0}}:root{--f7-notification-max-width:568px;--f7-notification-subtitle-text-transform:none;--f7-notification-subtitle-line-height:1.35;--f7-notification-text-text-transform:none;--f7-notification-text-font-weight:400}.ios{--f7-notification-margin:8px;--f7-notification-padding-horizontal:10px;--f7-notification-padding-vertical:10px;--f7-notification-border-radius:12px;--f7-notification-box-shadow:0px 5px 25px -10px rgba(0, 0, 0, 0.7);--f7-notification-icon-size:20px;--f7-notification-title-font-size:13px;--f7-notification-title-text-transform:uppercase;--f7-notification-title-line-height:1.4;--f7-notification-title-font-weight:400;--f7-notification-title-letter-spacing:0.02em;--f7-notification-title-right-font-size:13px;--f7-notification-subtitle-font-size:15px;--f7-notification-subtitle-font-weight:600;--f7-notification-text-font-size:15px;--f7-notification-text-line-height:1.2;--f7-notification-bg-color:rgba(250, 250, 250, 0.95);--f7-notification-bg-color-rgb:255,255,255;--f7-notification-title-color:#000;--f7-notification-title-right-color:rgba(0, 0, 0, 0.45);--f7-notification-subtitle-color:#000;--f7-notification-text-color:#000}.ios .dark,.ios.dark{--f7-notification-bg-color:rgba(30, 30, 30, 0.95);--f7-notification-bg-color-rgb:30,30,30;--f7-notification-title-color:#fff;--f7-notification-text-color:#fff;--f7-notification-subtitle-color:#fff;--f7-notification-title-right-color:rgba(255, 255, 255, 0.55)}.md{--f7-notification-margin:16px;--f7-notification-padding-vertical:20px;--f7-notification-padding-horizontal:16px;--f7-notification-border-radius:16px;--f7-notification-box-shadow:none;--f7-notification-icon-size:24px;--f7-notification-title-font-size:16px;--f7-notification-title-text-transform:none;--f7-notification-title-line-height:1.35;--f7-notification-title-font-weight:500;--f7-notification-title-right-font-size:12px;--f7-notification-subtitle-font-size:14px;--f7-notification-subtitle-font-weight:400;--f7-notification-text-font-size:14px;--f7-notification-text-line-height:1.35}.md,.md .dark,.md [class*=color-]{--f7-notification-title-color:var(--f7-md-on-surface);--f7-notification-bg-color:var(--f7-md-surface-5);--f7-notification-text-color:var(--f7-md-on-surface-variant);--f7-notification-title-right-color:var(--f7-md-on-surface-variant);--f7-notification-subtitle-color:var(--f7-md-on-surface)}.notification{position:absolute;left:var(--f7-notification-margin);top:var(--f7-notification-margin);width:calc(100% - var(--f7-notification-margin) * 2);z-index:20000;font-size:14px;margin:0;border:none;display:none;box-sizing:border-box;transition-property:transform;direction:ltr;max-width:var(--f7-notification-max-width);padding:var(--f7-notification-padding-vertical) var(--f7-notification-padding-horizontal);border-radius:var(--f7-notification-border-radius);box-shadow:var(--f7-notification-box-shadow);background:var(--f7-notification-bg-color);margin-top:var(--f7-safe-area-top)}@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))){.ios-translucent-modals .notification{background-color:rgba(var(--f7-notification-bg-color-rgb),.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}}@media (min-width:568px){.notification{left:50%;width:var(--f7-notification-max-width);margin-left:calc(-1 * var(--f7-notification-max-width)/ 2)}}.notification-title{color:var(--f7-notification-title-color,var(--f7-theme-color));font-size:var(--f7-notification-title-font-size);text-transform:var(--f7-notification-title-text-transform);line-height:var(--f7-notification-title-line-height);font-weight:var(--f7-notification-title-font-weight);letter-spacing:var(--f7-notification-title-letter-spacing)}.notification-subtitle{color:var(--f7-notification-subtitle-color);font-size:var(--f7-notification-subtitle-font-size);text-transform:var(--f7-notification-subtitle-text-transform);line-height:var(--f7-notification-subtitle-line-height);font-weight:var(--f7-notification-subtitle-font-weight)}.notification-text{color:var(--f7-notification-text-color);font-size:var(--f7-notification-text-font-size);text-transform:var(--f7-notification-text-text-transform);line-height:var(--f7-notification-text-line-height);font-weight:var(--f7-notification-text-font-weight)}.notification-title-right-text{color:var(--f7-notification-title-right-color);font-size:var(--f7-notification-title-right-font-size)}.notification-icon{font-size:0;line-height:var(--f7-notification-icon-size)}.notification-icon,.notification-icon i{width:var(--f7-notification-icon-size)!important;height:var(--f7-notification-icon-size)!important}.notification-icon i{font-size:var(--f7-notification-icon-size)}.notification-icon img{height:var(--f7-notification-icon-size)}.notification-header{display:flex;justify-content:flex-start;align-items:center}.notification-close-button{margin-left:auto;cursor:pointer;position:relative}.notification-close-button:after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';display:block;width:100%;height:100%;font-size:20px;position:absolute;left:50%;top:50%;text-align:center}.ios .notification{transition-duration:450ms;transform:translate3d(0%,-200%,0)}.ios .notification.modal-in{transform:translate3d(0%,0%,0);opacity:1}.ios .notification.modal-out{transform:translate3d(0%,-200%,0)}.ios .notification-icon{margin-right:8px}.ios .notification-header+.notification-content{margin-top:10px}.ios .notification-title-right-text{margin-right:6px;margin-left:auto}.ios .notification-title-right-text+.notification-close-button{margin-left:10px}.ios .notification-close-button{font-size:14px;width:20px;height:20px;opacity:.3;transition-duration:.3s}.ios .notification-close-button.active-state{transition-duration:0s;opacity:.1}.ios .notification-close-button:after{color:#000;content:'notification_close_ios';font-size:.65em;line-height:44px;width:44px;height:44px;margin-left:-22px;margin-top:-22px}.ios .dark .notification-close-button:after,.ios.dark .notification-close-button:after{color:#fff}.md .notification{transform:translate3d(0,-150%,0)}.md .notification.modal-in{transition-duration:.5s;transform:translate3d(0,0%,0);transition-timing-function:cubic-bezier(0,0.8,0.34,1)}.md .notification.modal-in.notification-transitioning{transition-duration:.2s}.md .notification.modal-out{animation:none;transition-duration:.2s;transition-timing-function:ease-in;transform:translate3d(0,-150%,0)}.md .notification-with-icon .notification-icon{position:absolute;left:var(--f7-notification-padding-horizontal);top:var(--f7-notification-padding-vertical)}.md .notification-with-icon .notification-content,.md .notification-with-icon .notification-header{margin-left:calc(var(--f7-notification-icon-size) + 16px)}.md .notification-icon{margin-right:8px}.md .notification-subtitle+.notification-text{margin-top:4px}.md .notification-header+.notification-content{margin-top:8px}.md .notification-title-right-text{margin-left:4px}.md .notification-title-right-text:before{content:'';width:3px;height:3px;border-radius:50%;display:inline-block;vertical-align:middle;margin-right:4px;background:var(--f7-notification-title-right-color)}.md .notification-close-button{width:16px;height:16px;transition-duration:.3s}.md .notification-close-button:after,.md .notification-close-button:before{width:48px;height:48px;left:50%;top:50%;margin-left:-24px;margin-top:-24px}.md .notification-close-button:after{color:var(--f7-md-on-surface-variant);content:'delete_round_md';line-height:48px;font-size:24px}@keyframes notification-md-in{0%{transform:translate3d(0,-150%,0)}50%{transform:translate3d(0,10%,0)}100%{transform:translate3d(0,0%,0)}}:root{--f7-autocomplete-dropdown-placeholder-color:#a9a9a9;--f7-autocomplete-dropdown-preloader-size:20px;--f7-autocomplete-dropdown-font-size:var(--f7-list-font-size)}.ios{--f7-autocomplete-dropdown-box-shadow:0px 3px 3px rgba(0, 0, 0, 0.2);--f7-autocomplete-dropdown-text-matching-font-weight:600;--f7-autocomplete-dropdown-bg-color:#fff;--f7-autocomplete-dropdown-text-color:#000;--f7-autocomplete-dropdown-text-matching-color:#000}.ios .dark,.ios.dark{--f7-autocomplete-dropdown-bg-color:#1c1c1d;--f7-autocomplete-dropdown-text-color:#fff;--f7-autocomplete-dropdown-text-matching-color:#fff}.md{--f7-autocomplete-dropdown-box-shadow:none;--f7-autocomplete-dropdown-text-matching-font-weight:500;--f7-autocomplete-dropdown-text-matching-color:#000}.md .dark,.md.dark{--f7-autocomplete-dropdown-text-matching-color:#fff}.md,.md .dark,.md [class*=color-]{--f7-autocomplete-dropdown-bg-color:var(--f7-md-surface-2);--f7-autocomplete-dropdown-text-color:var(--f7-md-on-surface)}.autocomplete-page .autocomplete-found{display:block}.autocomplete-page .autocomplete-not-found{display:none}.autocomplete-page .autocomplete-values{display:block}.autocomplete-page .list ul:empty{display:none}.autocomplete-preloader:not(.autocomplete-preloader-visible){visibility:hidden}.autocomplete-preloader:not(.autocomplete-preloader-visible),.autocomplete-preloader:not(.autocomplete-preloader-visible) *{animation:none}.autocomplete-dropdown{background:var(--f7-autocomplete-dropdown-bg-color);box-shadow:var(--f7-autocomplete-dropdown-box-shadow);box-sizing:border-box;position:absolute;z-index:500;width:100%;left:0}.autocomplete-dropdown .autocomplete-dropdown-inner{position:relative;overflow:auto;-webkit-overflow-scrolling:touch;height:100%;z-index:1}.autocomplete-dropdown .autocomplete-preloader{display:none;position:absolute;bottom:100%;width:var(--f7-autocomplete-dropdown-preloader-size);height:var(--f7-autocomplete-dropdown-preloader-size)}.autocomplete-dropdown .autocomplete-preloader-visible{display:block}.autocomplete-dropdown .autocomplete-dropdown-placeholder{color:var(--f7-autocomplete-dropdown-placeholder-color)}.autocomplete-dropdown .list{margin:0;color:var(--f7-autocomplete-dropdown-text-color);font-size:var(--f7-autocomplete-dropdown-font-size)}.autocomplete-dropdown .list b{color:var(--f7-autocomplete-dropdown-text-matching-color);font-weight:var(--f7-autocomplete-dropdown-text-matching-font-weight)}.autocomplete-dropdown .list ul{background:0 0!important}.autocomplete-dropdown .list ul:after,.autocomplete-dropdown .list ul:before{display:none!important}.autocomplete-dropdown .autocomplete-dropdown-selected{background:var(--f7-autocomplete-dropdown-selected-bg-color,rgba(var(--f7-theme-color-rgb),.2))}.searchbar-input-wrap .autocomplete-dropdown{background-color:var(--f7-searchbar-input-bg-color,var(--f7-searchbar-bg-color));border-radius:var(--f7-searchbar-input-border-radius);margin-top:calc(-1 * var(--f7-searchbar-input-height));top:100%;z-index:-1}.searchbar-input-wrap .autocomplete-dropdown .autocomplete-dropdown-inner{padding-top:var(--f7-searchbar-input-height)}.searchbar-input-wrap .autocomplete-dropdown .autocomplete-dropdown-placeholder{color:var(--f7-searchbar-placeholder-color)}.searchbar-input-wrap .autocomplete-dropdown li:last-child{border-radius:0 0 var(--f7-searchbar-input-border-radius) var(--f7-searchbar-input-border-radius);position:relative;overflow:hidden}.searchbar-input-wrap .autocomplete-dropdown .item-content{padding-left:calc(var(--f7-searchbar-input-padding-horizontal) + var(--f7-searchbar-input-extra-padding-left,0px))}.ios .autocomplete-dropdown .autocomplete-preloader{right:16px;margin-bottom:12px}.md .autocomplete-page .navbar .autocomplete-preloader{margin-right:8px}.md .autocomplete-popup .navbar .autocomplete-preloader{margin-left:8px;margin-right:16px}.md .autocomplete-dropdown .autocomplete-preloader{right:16px;margin-bottom:8px}.md .autocomplete-dropdown .autocomplete-preloader circle{stroke-width:3}:root{--f7-tooltip-padding:8px 16px;--f7-tooltip-font-size:14px;--f7-tooltip-font-weight:500;--f7-tooltip-desktop-padding:6px 8px;--f7-tooltip-desktop-font-size:12px}.ios{--f7-tooltip-border-radius:4px;--f7-tooltip-bg-color:rgba(0, 0, 0, 0.87);--f7-tooltip-text-color:#fff}.md{--f7-tooltip-border-radius:8px}.md,.md .dark,.md [class*=color-]{--f7-tooltip-bg-color:var(--f7-md-secondary);--f7-tooltip-text-color:var(--f7-md-on-secondary)}.tooltip{position:absolute;z-index:20000;background:var(--f7-tooltip-bg-color);border-radius:var(--f7-tooltip-border-radius);padding:var(--f7-tooltip-padding);color:var(--f7-tooltip-text-color);font-size:var(--f7-tooltip-font-size);font-weight:var(--f7-tooltip-font-weight);box-sizing:border-box;line-height:1.2;opacity:0;transform:scale(.9);transition-duration:150ms;transition-property:opacity,transform;z-index:99000}.tooltip.tooltip-in{transform:scale(1);opacity:1}.tooltip.tooltip-out{opacity:0;transform:scale(1)}.device-desktop .tooltip{font-size:var(--f7-tooltip-desktop-font-size);padding:var(--f7-tooltip-desktop-padding)}.gauge{position:relative;text-align:center;margin-left:auto;margin-right:auto;display:inline-block}.gauge svg,.gauge-svg{max-width:100%;height:auto}.gauge svg circle,.gauge svg path,.gauge-svg circle,.gauge-svg path{transition-duration:.4s}:root{--skeleton-color:#ccc;--skeleton-icon-color:rgba(0, 0, 0, 0.25)}.skeleton-block{height:1em;background:var(--skeleton-color)!important;width:100%;display:block}@font-face{font-family:skeleton;src:url(\"data:application/font-woff;charset=utf-8;base64,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\") format(\"woff\");font-weight:100,200,300,400,500,600,700,800,900;font-style:normal,italic;font-display:block}.skeleton-text{font-family:skeleton!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.skeleton-text,.skeleton-text *{color:var(--skeleton-color)!important;letter-spacing:-.03em!important}.skeleton-image{display:inline-block}.skeleton-image svg{max-width:100%;height:auto}.skeleton-image polygon{fill:var(--skeleton-color)}.skeleton-image path{fill:var(--skeleton-icon-color)}.skeleton-avatar{display:inline-block}.skeleton-avatar svg{max-width:100%;height:auto}.skeleton-avatar rect{fill:var(--skeleton-color)}.skeleton-avatar path{fill:var(--skeleton-icon-color)}.skeleton-effect-blink,.skeleton-effect-wave{-webkit-mask-image:linear-gradient(to right,transparent 0%,black 25%,black 75%,transparent 100%);mask-image:linear-gradient(to right,transparent 0%,black 25%,black 75%,transparent 100%);-webkit-mask-size:200% 100%;mask-size:200% 100%;-webkit-mask-repeat:repeat;mask-repeat:repeat;-webkit-mask-position:50% top;mask-position:50% top;animation:skeleton-effect-wave 1s infinite}.skeleton-effect-fade{animation:skeleton-effect-fade 1s infinite}.skeleton-effect-pulse{animation:skeleton-effect-pulse 1s infinite}@keyframes skeleton-effect-fade{0%{opacity:1}50%{opacity:.2}100%{opacity:1}}@keyframes skeleton-effect-wave{0%{-webkit-mask-position:50% top;mask-position:50% top}100%{-webkit-mask-position:-150% top;mask-position:-150% top}}@keyframes skeleton-effect-pulse{0%{transform:scale(1)}40%{transform:scale(1)}50%{transform:scale(.975)}100%{transform:scale(1)}}:root{--skeleton-color:#ccc;--skeleton-icon-color:rgba(0, 0, 0, 0.25)}.dark{--skeleton-color:#515151;--skeleton-icon-color:rgba(255, 255, 255, 0.25)}:root{--f7-color-picker-popover-width:350px;--f7-color-picker-slider-size:6px;--f7-color-picker-slider-knob-size:16px;--f7-color-picker-bar-size:50px;--f7-color-picker-bar-min-height:260px;--f7-color-picker-value-width:64px;--f7-color-picker-value-height:32px;--f7-color-picker-value-font-size:16px;--f7-color-picker-value-border-radius:4px;--f7-color-picker-hex-value-width:84px;--f7-color-picker-label-font-size:14px;--f7-color-picker-label-width:10px;--f7-color-picker-label-height:14px;--f7-color-picker-sb-spectrum-height:260px;--f7-color-picker-sb-spectrum-handle-size:16px;--f7-color-picker-wheel-width:330px;--f7-color-picker-palette-value-width:36px;--f7-color-picker-palette-value-height:36px;--f7-color-picker-initial-current-color-height:40px;--f7-color-picker-initial-current-color-border-radius:4px;--f7-color-picker-sheet-bg-color:#fff;--f7-color-picker-popup-bg-color:#fff;--f7-color-picker-value-bg-color:rgba(0, 0, 0, 0.05);--f7-color-picker-group-bg-color:rgba(0, 0, 0, 0.05);--f7-color-picker-group-value-bg-color:#fff}:root .dark,:root.dark{--f7-color-picker-sheet-bg-color:#121212;--f7-color-picker-popup-bg-color:#121212;--f7-color-picker-value-bg-color:rgba(255, 255, 255, 0.1);--f7-color-picker-group-bg-color:#000;--f7-color-picker-group-value-bg-color:rgba(255, 255, 255, 0.12)}.color-picker{overflow:hidden;width:100%;display:flex;flex-direction:column}.color-picker-popover .color-picker,.color-picker-popup .color-picker,.color-picker.color-picker-inline{position:relative}.color-picker-sheet-modal{background:var(--f7-color-picker-sheet-bg-color)}.color-picker-sheet-modal:before{z-index:600}.color-picker-sheet-modal .sheet-modal-inner{margin-bottom:var(--f7-safe-area-bottom)}.color-picker-popup .page{background:var(--f7-color-picker-popup-bg-color)}.color-picker-popup .page-content{padding-bottom:var(--f7-safe-area-bottom)}.color-picker-page .color-picker,.color-picker-popover .color-picker,.color-picker-popup .color-picker{height:100%}.color-picker-page .color-picker .toolbar,.color-picker-popover .color-picker .toolbar,.color-picker-popup .color-picker .toolbar{position:absolute}.color-picker-popover{width:var(--f7-color-picker-popover-width);max-width:90vw;max-height:80vh}.md .color-picker-popover .popover-inner{padding:8px}.color-picker-popover .color-picker{max-height:80vh}.color-picker-popover .toolbar-top{border-top-left-radius:var(--f7-popover-border-radius);border-top-right-radius:var(--f7-popover-border-radius)}.color-picker-popover .color-picker-module-palette{overflow:hidden;flex-shrink:0}.color-picker-popover .color-picker-module-palette:first-child{border-top-left-radius:var(--f7-popover-border-radius);border-top-right-radius:var(--f7-popover-border-radius)}.color-picker-popover .color-picker-module-palette:last-child{border-bottom-left-radius:var(--f7-popover-border-radius);border-bottom-right-radius:var(--f7-popover-border-radius)}.color-picker-popover .color-picker-module-palette:first-child:last-child{border-radius:var(--f7-popover-border-radius)}.color-picker-popover .toolbar~.page-content .color-picker-module-palette:first-child{border-top-left-radius:0;border-top-right-radius:0}.color-picker-page .page-content,.color-picker-popover .page-content,.color-picker-popup .page-content,.color-picker-sheet-modal .page-content{display:flex;justify-content:flex-start;align-items:stretch;flex-direction:column;overflow-x:hidden}.color-picker-module{margin-top:5px}.color-picker-module:last-child{margin-bottom:5px}.color-picker-module-hs-spectrum,.color-picker-module-sb-spectrum{margin-left:10px;margin-right:10px}.color-picker-module-hs-spectrum:first-child,.color-picker-module-sb-spectrum:first-child{margin-top:10px}.color-picker-module-hs-spectrum .color-picker-hs-spectrum,.color-picker-module-hs-spectrum .color-picker-sb-spectrum,.color-picker-module-sb-spectrum .color-picker-hs-spectrum,.color-picker-module-sb-spectrum .color-picker-sb-spectrum{height:var(--f7-color-picker-sb-spectrum-height)}.ios .color-picker-module-hs-spectrum .color-picker-hs-spectrum,.ios .color-picker-module-hs-spectrum .color-picker-sb-spectrum,.ios .color-picker-module-sb-spectrum .color-picker-hs-spectrum,.ios .color-picker-module-sb-spectrum .color-picker-sb-spectrum{border-radius:4px}.md .color-picker-module-hs-spectrum .color-picker-hs-spectrum,.md .color-picker-module-hs-spectrum .color-picker-sb-spectrum,.md .color-picker-module-sb-spectrum .color-picker-hs-spectrum,.md .color-picker-module-sb-spectrum .color-picker-sb-spectrum{border-radius:12px}.md .color-picker-module-hs-spectrum .color-picker-hs-spectrum::after,.md .color-picker-module-hs-spectrum .color-picker-sb-spectrum::after,.md .color-picker-module-sb-spectrum .color-picker-hs-spectrum::after,.md .color-picker-module-sb-spectrum .color-picker-sb-spectrum::after{border-radius:inherit}.color-picker-sb-spectrum{background-color:#000;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,#000 100%),linear-gradient(to left,rgba(255,255,255,0) 0%,#fff 100%);position:relative}.color-picker-hs-spectrum{position:relative;background-image:linear-gradient(to right,red,#feff00,#0f0,#00feff,#00f,#ff00fe,red)}.color-picker-hs-spectrum:after{content:'';position:absolute;left:0;top:0;width:100%;height:100%;background-image:linear-gradient(to bottom,rgba(255,255,255,0),#fff)}.color-picker-hs-spectrum-handle,.color-picker-sb-spectrum-handle{width:4px;height:4px;position:absolute;left:-2px;top:-2px;z-index:1}.color-picker-hs-spectrum-handle:after,.color-picker-sb-spectrum-handle:after{background-color:inherit;content:'';position:absolute;width:var(--f7-color-picker-sb-spectrum-handle-size);height:var(--f7-color-picker-sb-spectrum-handle-size);border:1px solid #fff;border-radius:50%;box-shadow:0px 0px 2px rgba(0,0,0,.5);box-sizing:border-box;left:50%;top:50%;transform:translate(-50%,-50%);transition:150ms;transition-property:transform;transform-origin:center}.color-picker-hs-spectrum-handle.color-picker-hs-spectrum-handle-pressed:after,.color-picker-hs-spectrum-handle.color-picker-sb-spectrum-handle-pressed:after,.color-picker-sb-spectrum-handle.color-picker-hs-spectrum-handle-pressed:after,.color-picker-sb-spectrum-handle.color-picker-sb-spectrum-handle-pressed:after{transform:scale(1.5) translate(-33.333%,-33.333%)}.color-picker-module-wheel{margin-left:10px;margin-right:10px}.color-picker-wheel{position:relative;width:var(--f7-color-picker-wheel-width);max-width:100%;height:auto;font-size:0;margin-left:auto;margin-right:auto}.color-picker-wheel svg{width:100%;height:auto}.color-picker-wheel .color-picker-wheel-handle{width:16.66666667%;height:16.66666667%;position:absolute;box-sizing:border-box;border:2px solid #fff;box-shadow:0px 0px 5px rgba(0,0,0,.5);background:red;border-radius:50%;left:0;top:0}.color-picker-wheel .color-picker-sb-spectrum{width:45%;height:45%;left:50%;top:50%;transform:translate3d(-50%,-50%,0);position:absolute}.color-picker-slider-wrap{display:flex;align-items:center;margin-bottom:2px}.color-picker-slider-wrap+.color-picker-slider-wrap{margin-top:5px}.color-picker-hex-wrap{justify-content:space-between;display:flex;align-items:center}.color-picker-hex-label,.color-picker-slider-label{font-size:var(--f7-color-picker-label-font-size);width:var(--f7-color-picker-label-size);flex-shrink:0;margin-right:12px}.color-picker-hex-label{width:auto}.color-picker-bar-value,.color-picker-hex-value,.color-picker-slider-value{width:var(--f7-color-picker-value-width);height:var(--f7-color-picker-value-height);background:var(--f7-color-picker-value-bg-color);border-radius:var(--f7-color-picker-value-border-radius);text-align:center;font-size:var(--f7-color-picker-value-font-size);display:flex;justify-content:center;align-items:center;flex-shrink:0;margin-left:10px}.color-picker-bar-value input,.color-picker-hex-value input,.color-picker-slider-value input{width:100%;height:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;background:0 0;color:inherit;font-family:inherit;font-size:inherit;text-align:center;display:block;border-radius:4px}.color-picker-bar-value input::-webkit-inner-spin-button,.color-picker-bar-value input::-webkit-outer-spin-button,.color-picker-hex-value input::-webkit-inner-spin-button,.color-picker-hex-value input::-webkit-outer-spin-button,.color-picker-slider-value input::-webkit-inner-spin-button,.color-picker-slider-value input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0;display:none}.color-picker-hex-value{width:var(--f7-color-picker-hex-value-width)}.color-picker-hex-value:first-child{margin-left:auto}.color-picker-slider{--f7-range-bar-active-bg-color:transparent;--f7-range-bar-size:var(--f7-color-picker-slider-size);--f7-range-bar-border-radius:var(--f7-color-picker-slider-size);--f7-range-knob-size:var(--f7-color-picker-slider-knob-size);--f7-range-knob-box-shadow:0 1px 2px rgba(0, 0, 0, 0.3)}.color-picker-slider .range-knob{transition-duration:.2s;transition-property:transform}.color-picker-slider .range-knob:after{width:30px;height:30px;margin-left:-16px;margin-top:-16px}.color-picker-slider .range-knob-active-state .range-knob{transform:scale(1.5)}.md .color-picker-slider.range-slider-min:not(.range-slider-dual) .range-knob{background:var(--f7-range-knob-color)!important;border:none}.color-picker-module-rgb-bars{display:flex;justify-content:space-around;justify-content:space-evenly;align-items:stretch;height:100%;min-height:var(--f7-color-picker-bar-min-height);padding-bottom:10px;padding-top:10px;box-sizing:border-box}.color-picker-bar-wrap{display:flex;align-items:center;flex-direction:column-reverse}.color-picker-bar{--f7-range-bar-active-bg-color:transparent;--f7-range-bar-size:var(--f7-color-picker-bar-size);--f7-range-bar-border-radius:2px;--f7-range-knob-size:6px;--f7-range-knob-box-shadow:0 0px 3px rgba(0, 0, 0, 0.3);--f7-range-knob-color:#fff}.color-picker-bar .range-knob{transition-duration:0s;transition-property:transform;border-radius:3px}.color-picker-bar .range-knob-wrap{height:6px;width:calc(var(--f7-color-picker-bar-size) - 4px);margin-left:calc(-.5 * (var(--f7-color-picker-bar-size) - 4px))}.color-picker-bar .range-knob-active-state .range-knob{transform:scale(1)}.md .color-picker-bar.range-slider-min:not(.range-slider-dual) .range-knob{background:var(--f7-range-knob-color)!important;border:none}.color-picker-bar-label{font-size:var(--f7-color-picker-label-size);margin-top:12px;line-height:1;height:var(--f7-color-picker-label-height);flex-shrink:0}.color-picker-bar-value{margin-left:0;margin-bottom:10px}.color-picker-slider-alpha{--f7-range-knob-color:#fff}.color-picker-slider-alpha .range-bar{background-image:linear-gradient(to right,rgba(0,0,0,0),#000),linear-gradient(to right,rgba(255,255,255,.2) 50%,rgba(0,0,0,.2) 50%),linear-gradient(to left,rgba(255,255,255,.2) 50%,rgba(0,0,0,.2) 50%);background-size:100% 100%,6px 3px,6px 3px;background-position:0 0,0px 3px,0 0;background-repeat:repeat-y,repeat-x,repeat-x}.color-picker-slider-hue .range-bar{background-image:linear-gradient(to right,red,#feff00,#0f0,#00feff,#00f,#ff00fe,red)}.color-picker-slider-brightness .range-bar{background-image:linear-gradient(to right,#000,#fff)}.color-picker-module-palette{margin-top:16px}.color-picker-module-palette:first-child{margin-top:0}.color-picker-module-palette:last-child{margin-bottom:0}.color-picker-module-palette:first-child:last-child{margin:0}.color-picker-palette{display:flex;flex-wrap:wrap}.color-picker-palette-row{width:100%;display:flex;flex-wrap:nowrap}.color-picker-palette-row .color-picker-palette-value{width:100%}.color-picker-palette-value{width:var(--f7-color-picker-palette-value-width);height:var(--f7-color-picker-palette-value-height);cursor:pointer}.color-picker-module-current-color,.color-picker-module-initial-current-colors{margin-left:10px;margin-right:10px;border-radius:var(--f7-color-picker-initial-current-color-border-radius);overflow:hidden;flex-shrink:0}.color-picker-current-color,.color-picker-initial-color{height:var(--f7-color-picker-initial-current-color-height)}.color-picker-initial-current-colors{display:flex}.color-picker-initial-current-colors .color-picker-current-color,.color-picker-initial-current-colors .color-picker-initial-color{width:50%}.color-picker-module-alpha-slider,.color-picker-module-brightness-slider,.color-picker-module-hex,.color-picker-module-hsb-sliders,.color-picker-module-hue-slider,.color-picker-module-rgb-sliders{margin-left:10px;margin-right:10px}.color-picker-grouped-modules .color-picker-module-alpha-slider,.color-picker-grouped-modules .color-picker-module-brightness-slider,.color-picker-grouped-modules .color-picker-module-hex,.color-picker-grouped-modules .color-picker-module-hsb-sliders,.color-picker-grouped-modules .color-picker-module-hue-slider,.color-picker-grouped-modules .color-picker-module-rgb-sliders{background:var(--f7-color-picker-group-bg-color);padding:8px;border-radius:8px;margin-top:16px;margin-left:8px;margin-right:8px}.color-picker-grouped-modules .color-picker-module-alpha-slider:last-child,.color-picker-grouped-modules .color-picker-module-brightness-slider:last-child,.color-picker-grouped-modules .color-picker-module-hex:last-child,.color-picker-grouped-modules .color-picker-module-hsb-sliders:last-child,.color-picker-grouped-modules .color-picker-module-hue-slider:last-child,.color-picker-grouped-modules .color-picker-module-rgb-sliders:last-child{margin-bottom:16px}.color-picker-grouped-modules .color-picker-hex-value,.color-picker-grouped-modules .color-picker-slider-value{background:var(--f7-color-picker-group-value-bg-color)}.color-picker-grouped-modules .color-picker-hex-label,.color-picker-grouped-modules .color-picker-slider-label{margin-left:5px}.color-picker-grouped-modules .color-picker-module-alpha-slider .range-slider:first-child,.color-picker-grouped-modules .color-picker-module-brightness-slider .range-slider:first-child,.color-picker-grouped-modules .color-picker-module-hsb-sliders .range-slider:first-child,.color-picker-grouped-modules .color-picker-module-hue-slider .range-slider:first-child,.color-picker-grouped-modules .color-picker-module-rgb-sliders .range-slider:first-child{margin-left:5px}.color-picker-grouped-modules .color-picker-module-alpha-slider .range-slider:last-child,.color-picker-grouped-modules .color-picker-module-brightness-slider .range-slider:last-child,.color-picker-grouped-modules .color-picker-module-hsb-sliders .range-slider:last-child,.color-picker-grouped-modules .color-picker-module-hue-slider .range-slider:last-child,.color-picker-grouped-modules .color-picker-module-rgb-sliders .range-slider:last-child{margin-right:5px}:root{--f7-treeview-item-height:34px;--f7-treeview-item-padding-left:16px;--f7-treeview-item-padding-right:16px;--f7-treeview-toggle-size:24px;--f7-treeview-children-offset:29px;--f7-treeview-label-font-weight:400;--f7-treeview-label-text-color:inherit;--f7-treeview-icon-size:24px;--f7-treeview-toggle-color:rgba(0, 0, 0, 0.5);--f7-treeview-toggle-hover-bg-color:rgba(0, 0, 0, 0.1);--f7-treeview-toggle-pressed-bg-color:rgba(0, 0, 0, 0.15);--f7-treeview-icon-color:rgba(0, 0, 0, 0.5);--f7-treeview-selectable-hover-bg-color:rgba(0, 0, 0, 0.1);--f7-treeview-link-hover-bg-color:rgba(0, 0, 0, 0.1);--f7-treeview-link-pressed-bg-color:rgba(0, 0, 0, 0.15)}:root .dark,:root.dark{--f7-treeview-toggle-color:rgba(255, 255, 255, 0.5);--f7-treeview-toggle-hover-bg-color:rgba(255, 255, 255, 0.03);--f7-treeview-toggle-pressed-bg-color:rgba(255, 255, 255, 0.1);--f7-treeview-icon-color:rgba(255, 255, 255, 0.75);--f7-treeview-selectable-hover-bg-color:rgba(255, 255, 255, 0.03);--f7-treeview-link-hover-bg-color:rgba(255, 255, 255, 0.03);--f7-treeview-link-pressed-bg-color:rgba(255, 255, 255, 0.11)}.ios{--f7-treeview-label-font-size:17px}.md{--f7-treeview-label-font-size:16px}.treeview-item-root{padding-left:var(--f7-treeview-item-padding-left);padding-right:var(--f7-treeview-item-padding-right);min-height:var(--f7-treeview-item-height);display:flex;align-items:center;justify-content:flex-start}.treeview-item-content{display:flex;justify-content:flex-start;align-items:center}.treeview-item-content>.f7-icons,.treeview-item-content>.material-icons,.treeview-item-content>i{font-size:var(--f7-treeview-icon-size);color:var(--f7-treeview-icon-color)}.treeview-item-content:first-child{margin-left:calc(var(--f7-treeview-toggle-size) + 5px)}.treeview-item-content>*+*{margin-left:5px}.treeview-item-label{font-size:var(--f7-treeview-label-font-size);font-weight:var(--f7-treeview-label-font-weight);color:var(--f7-treeview-label-text-color)}.treeview-toggle{width:var(--f7-treeview-toggle-size);height:var(--f7-treeview-toggle-size);cursor:pointer;border-radius:4px;background-color:rgba(0,0,0,0);transition-duration:.2s;position:relative;margin-right:5px}.treeview-toggle.active-state{background-color:var(--f7-treeview-toggle-pressed-bg-color)}.treeview-toggle:after{transition-duration:.2s;content:'';position:absolute;left:50%;top:50%;width:0;height:0;border-top:5px solid transparent;border-bottom:5px solid transparent;transform:translate(-50%,-50%);border-left:6px solid var(--f7-treeview-toggle-color)}.treeview-toggle-hidden{opacity:0;pointer-events:none;visibility:hidden}.treeview-preloader{--f7-preloader-size:var(--f7-treeview-toggle-size);margin-right:calc(-1 * var(--f7-treeview-toggle-size))}.treeview-item-children{display:none}.treeview-item-opened>.treeview-item-children{display:block}.treeview-item-opened>.treeview-item-root .treeview-toggle:after{transform:translate(-50%,-50%) rotate(90deg)}a.treeview-item-root{color:var(--f7-treeview-label-text-color)}.treeview-item-selectable.treeview-item-root,.treeview-item-selectable>.treeview-item-root{cursor:pointer;transition-duration:150ms}a.treeview-item-root{transition-duration:150ms}a.treeview-item-root.active-state{background:var(--f7-treeview-link-pressed-bg-color)}.treeview-item-toggle.treeview-item-root,.treeview-item-toggle>.treeview-item-root{cursor:pointer}.treeview-item-selected.treeview-item-root,.treeview-item-selected>.treeview-item-root{background:var(--f7-treeview-selectable-selected-bg-color,rgba(var(--f7-theme-color-rgb),.2))}.treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 1)}.treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 2)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 3)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 4)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 5)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 6)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 7)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 8)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 9)}.treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item .treeview-item-root{padding-left:calc(var(--f7-treeview-item-padding-left) + var(--f7-treeview-children-offset) * 10)}:root{--f7-text-editor-font-size:inherit;--f7-text-editor-font-weight:inherit;--f7-text-editor-border-width:1px;--f7-text-editor-height:250px;--f7-text-editor-margin:16px;--f7-text-editor-padding:8px;--f7-text-editor-button-bg-color:transparent;--f7-text-editor-button-size:28px;--f7-text-editor-button-icon-size:20px;--f7-text-editor-button-margin:2px;--f7-text-editor-text-color:#000;--f7-text-editor-bg-color:#fff;--f7-text-editor-button-divider-color:rgba(0, 0, 0, 0.15)}:root .dark,:root.dark{--f7-text-editor-bg-color:#121212;--f7-text-editor-text-color:#fff;--f7-text-editor-button-divider-color:rgba(255, 255, 255, 0.15)}.ios{--f7-text-editor-toolbar-padding:6px;--f7-text-editor-button-border-radius:2px;--f7-text-editor-placeholder-color:rgba(0, 0, 0, 0.35);--f7-text-editor-toolbar-border-color:rgba(0, 0, 0, 0.25);--f7-text-editor-toolbar-bg-color:#fff;--f7-text-editor-border-color:rgba(0, 0, 0, 0.1);--f7-text-editor-button-text-color:#333}.ios .dark,.ios.dark{--f7-text-editor-placeholder-color:rgba(255, 255, 255, 0.35);--f7-text-editor-toolbar-bg-color:#121212;--f7-text-editor-toolbar-border-color:rgba(255, 255, 255, 0.1);--f7-text-editor-toolbar-bg-color:#202020;--f7-text-editor-border-color:rgba(255, 255, 255, 0.1);--f7-text-editor-button-text-color:#fff}.md{--f7-text-editor-button-border-radius:8px;--f7-text-editor-toolbar-padding:8px}.md,.md .dark,.md [class*=color-]{--f7-text-editor-placeholder-color:var(--f7-md-on-surface-variant);--f7-text-editor-toolbar-bg-color:var(--f7-md-surface-1);--f7-text-editor-border-color:var(--f7-md-outline);--f7-text-editor-button-text-color:var(--f7-md-on-surface)}.text-editor{margin:var(--f7-text-editor-margin);background-color:var(--f7-text-editor-bg-color);display:block;position:relative;border:var(--f7-text-editor-border-width) solid var(--f7-text-editor-border-color);display:flex;flex-direction:column;align-items:stretch;height:var(--f7-text-editor-height);box-sizing:border-box}.text-editor.text-editor-resizable{height:auto}.text-editor-toolbar{display:flex;flex-wrap:wrap;background:var(--f7-text-editor-toolbar-bg-color);z-index:100;position:relative;position:sticky;left:0;top:0;padding:var(--f7-text-editor-toolbar-padding);flex-shrink:0;box-sizing:border-box}.text-editor-toolbar:after{content:'';position:absolute;background-color:var(--f7-text-editor-toolbar-border-color);display:block;z-index:15;top:auto;right:auto;bottom:0;left:0;height:1px;width:100%;transform-origin:50% 100%;transform:scaleY(calc(1 / var(--f7-device-pixel-ratio)))}button.text-editor-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;padding:0;margin:0;outline:0;font-family:inherit;background:0 0;cursor:pointer;box-shadow:none;border-radius:var(--f7-text-editor-button-border-radius);position:relative;z-index:1;display:flex;width:auto;overflow:hidden;width:var(--f7-text-editor-button-size);height:var(--f7-text-editor-button-size);align-items:center;justify-content:center;margin:var(--f7-text-editor-button-margin);box-sizing:border-box;color:var(--f7-text-editor-button-text-color);background-color:var(--f7-text-editor-button-bg-color);flex-shrink:0}button.text-editor-button .f7-icons,button.text-editor-button .material-icons,button.text-editor-button i{font-size:var(--f7-text-editor-button-icon-size);font-style:normal}button.text-editor-button .f7-icons sub,button.text-editor-button .f7-icons sup,button.text-editor-button .material-icons sub,button.text-editor-button .material-icons sup,button.text-editor-button i sub,button.text-editor-button i sup{font-size:60%}.text-editor-button-divider{width:1px;background:var(--f7-text-editor-button-divider-color);margin:0 2px;flex-shrink:0}.text-editor-content{-webkit-user-modify:read-write;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;height:100%;-webkit-user-select:text;-moz-user-select:text;user-select:text;padding:var(--f7-text-editor-padding);overflow:auto;flex-shrink:10;box-sizing:border-box;color:var(--f7-text-editor-text-color);font-size:var(--f7-text-editor-font-size);font-weight:var(--f7-text-editor-font-weight)}.text-editor-content .text-editor-placeholder{pointer-events:none;color:var(--f7-text-editor-placeholder-color)}.text-editor-content img{max-width:100%}.text-editor-content a{pointer-events:none}.text-editor-popover{z-index:12500;width:auto;max-width:80vw}.text-editor-popover .popover-inner{display:flex;flex-wrap:wrap;padding:3px}.text-editor-keyboard-toolbar{position:absolute;z-index:6000;--f7-safe-area-bottom:0px}.text-editor-keyboard-toolbar .toolbar-inner{justify-content:flex-start!important;overflow:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;scrollbar-color:transparent}.text-editor-keyboard-toolbar .toolbar-inner::-webkit-scrollbar{-webkit-appearance:none;appearance:none;width:0px;display:none;opacity:0;background:0 0}.text-editor-keyboard-toolbar .toolbar-inner::-webkit-scrollbar-track{box-shadow:none;background:0 0}.text-editor-keyboard-toolbar .toolbar-inner::-webkit-scrollbar-thumb{background-color:transparent;outline:0;border-radius:9999px;position:relative}.text-editor-keyboard-toolbar .toolbar-inner .text-editor-button-divider{height:100%}.item-input .text-editor{border:none;margin:0;background-color:var(--f7-input-bg-color,transparent)}.item-input .text-editor-content{padding-top:var(--f7-textarea-padding-vertical);padding-bottom:var(--f7-textarea-padding-vertical);padding-left:var(--f7-input-padding-left);padding-right:var(--f7-input-padding-right);color:var(--f7-input-text-color);font-size:var(--f7-input-font-size)}.item-input .text-editor-toolbar{box-shadow:none}.item-input .text-editor-toolbar:after{display:none!important}.item-input-outline .text-editor-content{border-radius:var(--f7-input-outline-border-radius)}.ios button.text-editor-button{transition:opacity .3s}.ios button.text-editor-button.active-state{opacity:.3;transition-duration:0s}.md button.text-editor-button{--f7-touch-ripple-color:rgba(var(--f7-theme-color-rgb), 0.25)}.md .text-editor-keyboard-toolbar .toolbar-inner{padding-left:8px;padding-right:8px}.pie-chart{position:relative}.pie-chart svg{display:block;width:100%;font-size:0;height:auto;margin:0 auto}.pie-chart path{transition-duration:150ms}.pie-chart-hidden{opacity:.4}.pie-chart-tooltip{pointer-events:none;text-align:left;font-size:12px;line-height:1.4;white-space:nowrap;width:auto;max-width:none}.pie-chart-tooltip-label{display:flex;align-items:center}.pie-chart-tooltip-color{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:4px}:root{--f7-area-chart-current-line-stroke-width:2px;--f7-area-chart-current-line-stroke:rgba(0, 0, 0, 0.15);--f7-area-chart-axis-text-color:inherit;--f7-area-chart-axis-height:1px;--f7-area-chart-axis-font-size:10px;--f7-area-chart-axis-font-weight:500;--f7-area-chart-tooltip-font-size:12px;--f7-area-chart-tooltip-total-font-size:16px;--f7-area-chart-tooltip-total-font-weight:bold;--f7-area-chart-tooltip-color-size:10px;--f7-area-chart-legend-font-size:14px;--f7-area-chart-legend-font-weight:500;--f7-area-chart-legend-text-color:inherit;--f7-area-chart-legend-padding:4px 8px;--f7-area-chart-legend-border-radius:4px;--f7-area-chart-legend-color-size:14px;--f7-area-chart-line-stroke-width:2px;--f7-area-chart-axis-bg-color:rgba(0, 0, 0, 0.15);--f7-area-chart-legend-disabled-text-color:rgba(0, 0, 0, 0.22)}:root .dark,:root.dark{--f7-area-chart-axis-bg-color:rgba(255, 255, 255, 0.15);--f7-area-chart-legend-disabled-text-color:rgba(255, 255, 255, 0.22)}.ios{--f7-area-chart-tooltip-total-label-text-color:rgba(255, 255, 255, 0.75)}.md{--f7-area-chart-tooltip-total-label-text-color:inherit}.area-chart{position:relative}.area-chart svg{display:block;width:100%;font-size:0;height:auto;margin:0 auto}.area-chart path{fill:none;stroke-width:var(--f7-area-chart-line-stroke-width)}.area-chart-current-line{stroke:var(--f7-area-chart-current-line-stroke);stroke-width:var(--f7-area-chart-current-line-stroke-width)}.area-chart-axis{height:var(--f7-area-chart-axis-height);background:var(--f7-area-chart-axis-bg-color);color:var(--f7-area-chart-axis-text-color);display:flex;font-size:var(--f7-area-chart-axis-font-size);font-weight:var(--f7-area-chart-axis-font-weight);justify-content:space-between;line-height:1;margin-bottom:2em}.area-chart-axis>span{padding-top:10px;width:0;display:flex;align-items:flex-start;justify-content:center;white-space:nowrap}.area-chart-axis>span:first-child{justify-content:flex-start}.area-chart-axis>span:last-child{justify-content:flex-end}.area-chart-tooltip{pointer-events:none;text-align:left;font-size:var(--f7-area-chart-tooltip-font-size);line-height:1.4}.area-chart-tooltip-label{color:var(--f7-area-chart-tooltip-total-label-text-color)}.area-chart-tooltip-total{font-size:var(--f7-area-chart-tooltip-total-font-size);font-weight:var(--f7-area-chart-tooltip-total-font-weight)}.area-chart-tooltip-list{list-style:none;margin:0;padding:0}.area-chart-tooltip-list li{white-space:nowrap}.area-chart-tooltip-list span{display:inline-block;width:var(--f7-area-chart-tooltip-color-size);height:var(--f7-area-chart-tooltip-color-size);border-radius:50%;margin-right:4px}.area-chart-axis~.area-chart-legend{margin-top:2em}.area-chart-legend{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;font-size:var(--f7-area-chart-legend-font-size);width:100%;margin-top:1em}.area-chart-legend-button{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;background-color:transparent;border-radius:0;border:none;outline:0!important;cursor:pointer;font-family:inherit;font-size:inherit;box-shadow:none!important}.area-chart-legend-item{position:relative;color:var(--f7-area-chart-legend-text-color);width:auto;display:flex;align-items:center;font-weight:var(--f7-area-chart-legend-font-weight);transition-duration:.2s;padding:var(--f7-area-chart-legend-padding);border-radius:var(--f7-area-chart-legend-border-radius);overflow:hidden}.area-chart-legend-item span{width:var(--f7-area-chart-legend-color-size);height:var(--f7-area-chart-legend-color-size);margin-right:4px;border-radius:50%;transition-duration:.2s}.area-chart-legend-item-hidden{color:var(--f7-area-chart-legend-disabled-text-color)}.area-chart-legend-item-hidden span{background-color:var(--f7-area-chart-legend-disabled-text-color)!important}:root{--f7-breadcrumbs-spacing:12px;--f7-breadcrumbs-padding:2px 0;--f7-breadcrumbs-icon-size:24px;--f7-breadcrumbs-separator-color:rgba(0, 0, 0, 0.35)}:root .dark,:root.dark{--f7-breadcrumbs-separator-color:rgba(255, 255, 255, 0.35)}.ios{--f7-breadcrumbs-item-bg-color:transparent;--f7-breadcrumbs-collapsed-border-radius:4px;--f7-breadcrumbs-collapsed-padding:0px 6px;--f7-breadcrumbs-separator-icon:'chevron_right_ios';--f7-breadcrumbs-font-size:17px;--f7-breadcrumbs-item-border-radius:0px;--f7-breadcrumbs-item-padding:0px;--f7-breadcrumbs-item-font-weight:normal;--f7-breadcrumbs-item-active-font-weight:600;--f7-breadcrumbs-item-color:rgba(0, 0, 0, 0.55);--f7-breadcrumbs-item-active-color:#000;--f7-breadcrumbs-collapsed-bg-color:rgba(0, 0, 0, 0.15);--f7-breadcrumbs-collapsed-color:rgba(0, 0, 0, 0.75)}.ios .dark,.ios.dark{--f7-breadcrumbs-item-color:rgba(255, 255, 255, 0.75);--f7-breadcrumbs-item-active-color:#fff;--f7-breadcrumbs-collapsed-bg-color:rgba(255, 255, 255, 0.15);--f7-breadcrumbs-collapsed-color:rgba(255, 255, 255, 0.75)}.md{--f7-breadcrumbs-collapsed-border-radius:8px;--f7-breadcrumbs-collapsed-padding:12px 8px;--f7-breadcrumbs-separator-icon:'chevron_right_md';--f7-breadcrumbs-font-size:14px;--f7-breadcrumbs-item-border-radius:8px;--f7-breadcrumbs-item-padding:4px 8px;--f7-breadcrumbs-item-font-weight:500;--f7-breadcrumbs-item-active-font-weight:500}.md,.md .dark,.md [class*=color-]{--f7-breadcrumbs-item-color:var(--f7-theme-color);--f7-breadcrumbs-item-bg-color:var(--f7-md-secondary-container);--f7-breadcrumbs-item-active-color:var(--f7-md-on-secondary-container);--f7-breadcrumbs-collapsed-color:var(--f7-theme-color);--f7-breadcrumbs-collapsed-bg-color:var(--f7-md-secondary-container)}.breadcrumbs{display:flex;align-items:center;justify-content:flex-start;font-size:var(--f7-breadcrumbs-font-size);overflow:auto;white-space:nowrap;padding:var(--f7-breadcrumbs-padding);scrollbar-width:none;scrollbar-color:transparent}.breadcrumbs::-webkit-scrollbar{-webkit-appearance:none;appearance:none;width:0px;display:none;opacity:0;background:0 0}.breadcrumbs::-webkit-scrollbar-track{box-shadow:none;background:0 0}.breadcrumbs::-webkit-scrollbar-thumb{background-color:transparent;outline:0;border-radius:9999px;position:relative}.breadcrumbs-collapsed,.breadcrumbs-item,.breadcrumbs-separator{flex-shrink:0;--f7-touch-ripple-color:transparent!important}.breadcrumbs-collapsed+.breadcrumbs-collapsed,.breadcrumbs-collapsed+.breadcrumbs-item,.breadcrumbs-collapsed+.breadcrumbs-separator,.breadcrumbs-item+.breadcrumbs-collapsed,.breadcrumbs-item+.breadcrumbs-item,.breadcrumbs-item+.breadcrumbs-separator,.breadcrumbs-separator+.breadcrumbs-collapsed,.breadcrumbs-separator+.breadcrumbs-item,.breadcrumbs-separator+.breadcrumbs-separator{margin-left:var(--f7-breadcrumbs-spacing)}.breadcrumbs-item{color:var(--f7-breadcrumbs-item-color);font-weight:var(--f7-breadcrumbs-item-font-weight);padding:var(--f7-breadcrumbs-item-padding);background-color:var(--f7-breadcrumbs-item-bg-color);display:flex;align-items:center;border-radius:var(--f7-breadcrumbs-item-border-radius)}.breadcrumbs-item .icon{font-size:var(--f7-breadcrumbs-icon-size);width:var(--f7-breadcrumbs-icon-size);height:var(--f7-breadcrumbs-icon-size)}.breadcrumbs-item a{color:inherit;--f7-touch-ripple-color:transparent!important}.breadcrumbs-item-active{color:var(--f7-breadcrumbs-item-active-color,var(--f7-breadcrumbs-item-color));font-weight:var(--f7-breadcrumbs-item-active-font-weight)}.breadcrumbs-separator{color:var(--f7-breadcrumbs-separator-color);height:24px;overflow:hidden;display:flex;align-items:center}.breadcrumbs-separator::after{font-family:framework7-core-icons;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga';text-align:center;display:block;width:100%;height:100%;font-size:20px;content:var(--f7-breadcrumbs-separator-icon);width:12px}.ios .breadcrumbs-separator::after{font-size:12px;height:11px}.md .breadcrumbs-separator::after{font-size:18px;height:18px}.breadcrumbs-collapsed{display:flex;align-items:center;padding:var(--f7-breadcrumbs-collapsed-padding);background:var(--f7-breadcrumbs-collapsed-bg-color);min-height:1em;border-radius:var(--f7-breadcrumbs-collapsed-border-radius);cursor:pointer}.breadcrumbs-collapsed span,.breadcrumbs-collapsed::after,.breadcrumbs-collapsed::before{content:'';width:4px;height:4px;background:var(--f7-breadcrumbs-collapsed-color);border-radius:50%}.breadcrumbs-collapsed span{margin:0 3px}:root{--f7-typography-padding:16px;--f7-typography-margin:16px}.display-flex{display:flex!important}.display-block{display:block!important}.display-inline-flex{display:inline-flex!important}.display-inline-block{display:inline-block!important}.display-inline{display:inline!important}.display-none{display:none!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-shrink-2{flex-shrink:2!important}.flex-shrink-3{flex-shrink:3!important}.flex-shrink-4{flex-shrink:4!important}.flex-shrink-5{flex-shrink:5!important}.flex-shrink-6{flex-shrink:6!important}.flex-shrink-7{flex-shrink:7!important}.flex-shrink-8{flex-shrink:8!important}.flex-shrink-9{flex-shrink:9!important}.flex-shrink-10{flex-shrink:10!important}.flex-direction-row{flex-direction:row!important}.flex-direction-row-reverse{flex-direction:row-reverse!important}.flex-direction-column{flex-direction:column!important}.flex-direction-column-reverse{flex-direction:column-reverse!important}.justify-content-flex-start{justify-content:flex-start!important}.justify-content-center{justify-content:center!important}.justify-content-flex-end{justify-content:flex-end!important}.justify-content-space-between{justify-content:space-between!important}.justify-content-space-around{justify-content:space-around!important}.justify-content-space-evenly{justify-content:space-evenly!important}.justify-content-stretch{justify-content:stretch!important}.justify-content-start{justify-content:start!important}.justify-content-end{justify-content:end!important}.justify-content-left{justify-content:left!important}.justify-content-right{justify-content:right!important}.align-content-flex-start{align-content:flex-start!important}.align-content-flex-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-space-between{align-content:space-between!important}.align-content-space-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-items-baseline{align-items:baseline!important}.align-items-flex-start{align-items:flex-start!important}.align-items-flex-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-stretch{align-items:stretch!important}.align-self-flex-start{align-self:flex-start!important}.align-self-flex-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-stretch{align-self:stretch!important}.text-align-left{text-align:left!important}.text-align-center{text-align:center!important}.text-align-right{text-align:right!important}.text-align-justify{text-align:justify!important}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}.vertical-align-bottom{vertical-align:bottom!important}.vertical-align-middle{vertical-align:middle!important}.vertical-align-top{vertical-align:top!important}.no-padding{padding:0!important}.no-padding-left{padding-left:0!important}.no-padding-right{padding-right:0!important}.no-padding-horizontal{padding-left:0!important;padding-right:0!important}.no-padding-top{padding-top:0!important}.no-padding-bottom{padding-bottom:0!important}.no-padding-vertical{padding-top:0!important;padding-bottom:0!important}.no-margin{margin:0!important}.no-margin-left{margin-left:0!important}.no-margin-right{margin-right:0!important}.no-margin-horizontal{margin-left:0!important;margin-right:0!important}.no-margin-top{margin-top:0!important}.no-margin-bottom{margin-bottom:0!important}.no-margin-vertical{margin-top:0!important;margin-bottom:0!important}.width-auto{width:auto!important}.width-100{width:100%!important}.padding{padding:var(--f7-typography-padding)!important}.padding-half{padding:calc(var(--f7-typography-padding)/ 2)!important}.padding-top{padding-top:var(--f7-typography-padding)!important}.padding-top-half{padding-top:calc(var(--f7-typography-padding)/ 2)!important}.padding-bottom{padding-bottom:var(--f7-typography-padding)!important}.padding-bottom-half{padding-bottom:calc(var(--f7-typography-padding)/ 2)!important}.padding-left{padding-left:var(--f7-typography-padding)!important}.padding-left-half{padding-left:calc(var(--f7-typography-padding)/ 2)!important}.padding-right{padding-right:var(--f7-typography-padding)!important}.padding-right-half{padding-right:calc(var(--f7-typography-padding)/ 2)!important}.padding-vertical{padding-top:var(--f7-typography-padding)!important;padding-bottom:var(--f7-typography-padding)!important}.padding-vertical-half{padding-top:calc(var(--f7-typography-padding)/ 2)!important;padding-bottom:calc(var(--f7-typography-padding)/ 2)!important}.padding-horizontal{padding-left:var(--f7-typography-padding)!important;padding-right:var(--f7-typography-padding)!important}.padding-horizontal-half{padding-left:calc(var(--f7-typography-padding)/ 2)!important;padding-right:calc(var(--f7-typography-padding)/ 2)!important}.margin{margin:var(--f7-typography-margin)!important}.margin-half{margin:calc(var(--f7-typography-margin)/ 2)!important}.margin-top{margin-top:var(--f7-typography-margin)!important}.margin-top-half{margin-top:calc(var(--f7-typography-margin)/ 2)!important}.margin-bottom{margin-bottom:var(--f7-typography-margin)!important}.margin-bottom-half{margin-bottom:calc(var(--f7-typography-margin)/ 2)!important}.margin-left{margin-left:var(--f7-typography-margin)!important}.margin-left-half{margin-left:calc(var(--f7-typography-margin)/ 2)!important}.margin-right{margin-right:var(--f7-typography-margin)!important}.margin-right-half{margin-right:calc(var(--f7-typography-margin)/ 2)!important}.margin-vertical{margin-top:var(--f7-typography-margin)!important;margin-bottom:var(--f7-typography-margin)!important}.margin-vertical-half{margin-top:calc(var(--f7-typography-margin)/ 2)!important;margin-bottom:calc(var(--f7-typography-margin)/ 2)!important}.margin-horizontal{margin-left:var(--f7-typography-margin)!important;margin-right:var(--f7-typography-margin)!important}.margin-horizontal-half{margin-left:calc(var(--f7-typography-margin)/ 2)!important;margin-right:calc(var(--f7-typography-margin)/ 2)!important}[class*=text-color-]{color:var(--f7-theme-color-text-color)!important}[class*=bg-color-]{background-color:var(--f7-theme-color-bg-color)!important}[class*=border-color-]{border-color:var(--f7-theme-color-border-color)!important}", "/* Below is the code necessary to handle\n the sheet modal swipe handler when the\n sheet is open\n*/\n.swipe-handler:after {\n content: '';\n width: 36px;\n height: 6px;\n position: absolute;\n left: 50%;\n top: 50%;\n margin-left: -18px;\n margin-top: -3px;\n border-radius: 3px;\n background: #121212;\n }\n \n .light .split-layout .page-content:not(.login-screen-content, .panel-content),\n .light .single-layout .page-content:not(.login-screen-content, .panel-content),\n .light .tab-layout .page-content:not(.login-screen-content, .panel-content),\n .light div.messages {\n background-color: gainsboro;\n }\n \n .panel.theme-dark {\n --f7-panel-bg-color: #000;\n }\n \n .split-layout .view-main {\n margin-left: 260px;\n }\n \n /* Left Panel right border when it is visible by breakpoint */\n .split-layout .panel-left.panel-visible-by-breakpoint:before {\n position: absolute;\n right: 0;\n top: 0;\n height: 100%;\n width: 1px;\n background: rgba(0,0,0,0.1);\n content: \"\";\n z-index: 6000;\n }\n \n /* Hide navbar link which opens left panel when it is visible by breakpoint */\n .split-layout .panel-left.panel-visible-by-breakpoint ~ .view .navbar .panel-open[data-panel=\"left\"] {\n display: none;\n }\n \n /*\n Extra borders for main view and left panel for iOS theme when it behaves as panel (before breakpoint size)\n */\n .ios .split-layout .panel-left:not(.panel-visible-by-breakpoint).panel-active ~ .view-main:before,\n .ios .split-layout .panel-left:not(.panel-visible-by-breakpoint).panel-closing ~ .view-main:before {\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n width: 1px;\n background: rgba(0,0,0,0.1);\n content: \"\";\n z-index: 6000;\n }\n \n /* FAB label in dark mode */\n .theme-dark .fab-label {\n background-color: #333;\n color: white;\n }\n \n /* Tabs standalone issue */\n .tabs-standalone {\n height: auto;\n }\n \n .popup {\n overflow-y: auto;\n }\n \n .swiper {\n margin-top: 20px;\n width: 90%;\n }\n \n .theme-dark .swiper-slide {\n background-color: #1c1c1d;\n }\n \n .swiper-slide {\n border-radius: var(--f7-card-border-radius);\n min-height: 400px;\n }\n \n .light .swiper-slide {\n background-color: white;\n }\n ", "/* Below is the code necessary to handle\n the sheet modal swipe handler when the\n sheet is open\n*/\n.swipe-handler:after {\n content: \"\";\n width: 36px;\n height: 6px;\n position: absolute;\n left: 50%;\n top: 50%;\n margin-left: -18px;\n margin-top: -3px;\n border-radius: 3px;\n background: #121212;\n}\n\n.light .split-layout .page-content:not(.login-screen-content, .panel-content),\n.light .single-layout .page-content:not(.login-screen-content, .panel-content),\n.light .tab-layout .page-content:not(.login-screen-content, .panel-content),\n.light div.messages {\n background-color: gainsboro;\n}\n\n.panel.theme-dark {\n --f7-panel-bg-color: #000;\n}\n\n.split-layout .view-main {\n margin-left: 260px;\n}\n\n/* Left Panel right border when it is visible by breakpoint */\n.split-layout .panel-left.panel-visible-by-breakpoint:before {\n position: absolute;\n right: 0;\n top: 0;\n height: 100%;\n width: 1px;\n background: rgba(0, 0, 0, 0.1);\n content: \"\";\n z-index: 6000;\n}\n\n/* Hide navbar link which opens left panel when it is visible by breakpoint */\n.split-layout .panel-left.panel-visible-by-breakpoint ~ .view .navbar .panel-open[data-panel=left] {\n display: none;\n}\n\n/*\nExtra borders for main view and left panel for iOS theme when it behaves as panel (before breakpoint size)\n*/\n.ios .split-layout .panel-left:not(.panel-visible-by-breakpoint).panel-active ~ .view-main:before,\n.ios .split-layout .panel-left:not(.panel-visible-by-breakpoint).panel-closing ~ .view-main:before {\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n width: 1px;\n background: rgba(0, 0, 0, 0.1);\n content: \"\";\n z-index: 6000;\n}\n\n/* FAB label in dark mode */\n.theme-dark .fab-label {\n background-color: #333;\n color: white;\n}\n\n/* Tabs standalone issue */\n.tabs-standalone {\n height: auto;\n}\n\n.popup {\n overflow-y: auto;\n}\n\n.swiper {\n margin-top: 20px;\n width: 90%;\n}\n\n.theme-dark .swiper-slide {\n background-color: #1c1c1d;\n}\n\n.swiper-slide {\n border-radius: var(--f7-card-border-radius);\n min-height: 400px;\n}\n\n.light .swiper-slide {\n background-color: white;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL1VzZXJzL2RhdmlkZ3Jhbmpvbi9kYXZpZC9SaW50ZVJmYWNlL3NoaW55TW9iaWxlL3N0eWxlcyIsInNvdXJjZXMiOlsibWFpbi5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtBQUFBO0FBQUE7RUFJRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0FBQ0E7RUFDRTs7O0FBR0Y7QUFBQTtBQUFBO0FBR0E7QUFBQTtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0FBQ0E7RUFDRTtFQUNBOzs7QUFHRjtBQUNBO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFIiwic291cmNlc0NvbnRlbnQiOlsiLyogQmVsb3cgaXMgdGhlIGNvZGUgbmVjZXNzYXJ5IHRvIGhhbmRsZVxuICAgdGhlIHNoZWV0IG1vZGFsIHN3aXBlIGhhbmRsZXIgd2hlbiB0aGVcbiAgIHNoZWV0IGlzIG9wZW5cbiovXG4uc3dpcGUtaGFuZGxlcjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgd2lkdGg6IDM2cHg7XG4gICAgaGVpZ2h0OiA2cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0b3A6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLTE4cHg7XG4gICAgbWFyZ2luLXRvcDogLTNweDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgYmFja2dyb3VuZDogIzEyMTIxMjtcbiAgfVxuICBcbiAgLmxpZ2h0IC5zcGxpdC1sYXlvdXQgLnBhZ2UtY29udGVudDpub3QoLmxvZ2luLXNjcmVlbi1jb250ZW50LCAucGFuZWwtY29udGVudCksXG4gIC5saWdodCAuc2luZ2xlLWxheW91dCAucGFnZS1jb250ZW50Om5vdCgubG9naW4tc2NyZWVuLWNvbnRlbnQsIC5wYW5lbC1jb250ZW50KSxcbiAgLmxpZ2h0IC50YWItbGF5b3V0IC5wYWdlLWNvbnRlbnQ6bm90KC5sb2dpbi1zY3JlZW4tY29udGVudCwgLnBhbmVsLWNvbnRlbnQpLFxuICAubGlnaHQgZGl2Lm1lc3NhZ2VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBnYWluc2Jvcm87XG4gIH1cbiAgXG4gIC5wYW5lbC50aGVtZS1kYXJrIHtcbiAgICAtLWY3LXBhbmVsLWJnLWNvbG9yOiAjMDAwO1xuICB9XG4gIFxuICAuc3BsaXQtbGF5b3V0IC52aWV3LW1haW4ge1xuICAgIG1hcmdpbi1sZWZ0OiAyNjBweDtcbiAgfVxuICBcbiAgLyogTGVmdCBQYW5lbCByaWdodCBib3JkZXIgd2hlbiBpdCBpcyB2aXNpYmxlIGJ5IGJyZWFrcG9pbnQgKi9cbiAgLnNwbGl0LWxheW91dCAucGFuZWwtbGVmdC5wYW5lbC12aXNpYmxlLWJ5LWJyZWFrcG9pbnQ6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMXB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHotaW5kZXg6IDYwMDA7XG4gIH1cbiAgXG4gIC8qIEhpZGUgbmF2YmFyIGxpbmsgd2hpY2ggb3BlbnMgbGVmdCBwYW5lbCB3aGVuIGl0IGlzIHZpc2libGUgYnkgYnJlYWtwb2ludCAqL1xuICAuc3BsaXQtbGF5b3V0IC5wYW5lbC1sZWZ0LnBhbmVsLXZpc2libGUtYnktYnJlYWtwb2ludCB+IC52aWV3IC5uYXZiYXIgLnBhbmVsLW9wZW5bZGF0YS1wYW5lbD1cImxlZnRcIl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgXG4gIC8qXG4gIEV4dHJhIGJvcmRlcnMgZm9yIG1haW4gdmlldyBhbmQgbGVmdCBwYW5lbCBmb3IgaU9TIHRoZW1lIHdoZW4gaXQgYmVoYXZlcyBhcyBwYW5lbCAoYmVmb3JlIGJyZWFrcG9pbnQgc2l6ZSlcbiAgKi9cbiAgLmlvcyAuc3BsaXQtbGF5b3V0IC5wYW5lbC1sZWZ0Om5vdCgucGFuZWwtdmlzaWJsZS1ieS1icmVha3BvaW50KS5wYW5lbC1hY3RpdmUgfiAudmlldy1tYWluOmJlZm9yZSxcbiAgLmlvcyAuc3BsaXQtbGF5b3V0IC5wYW5lbC1sZWZ0Om5vdCgucGFuZWwtdmlzaWJsZS1ieS1icmVha3BvaW50KS5wYW5lbC1jbG9zaW5nIH4gLnZpZXctbWFpbjpiZWZvcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDFweDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMSk7XG4gICAgY29udGVudDogXCJcIjtcbiAgICB6LWluZGV4OiA2MDAwO1xuICB9XG4gIFxuICAvKiBGQUIgbGFiZWwgaW4gZGFyayBtb2RlICovXG4gIC50aGVtZS1kYXJrIC5mYWItbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgY29sb3I6IHdoaXRlO1xuICB9XG4gIFxuICAvKiBUYWJzIHN0YW5kYWxvbmUgaXNzdWUgKi9cbiAgLnRhYnMtc3RhbmRhbG9uZSB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICB9XG4gIFxuICAucG9wdXAge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cbiAgXG4gIC5zd2lwZXIge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgd2lkdGg6IDkwJTtcbiAgfVxuICBcbiAgLnRoZW1lLWRhcmsgLnN3aXBlci1zbGlkZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzFjMWMxZDtcbiAgfVxuICBcbiAgLnN3aXBlci1zbGlkZSB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tZjctY2FyZC1ib3JkZXItcmFkaXVzKTtcbiAgICBtaW4taGVpZ2h0OiA0MDBweDtcbiAgfVxuICBcbiAgLmxpZ2h0IC5zd2lwZXItc2xpZGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB9XG4gICJdfQ== */"],
"mappings": "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AO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,kBAAkB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,sBAAsB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,mBAAmB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,sBAAsB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,mBAAmB,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,qBAAqB,MAAM,qCAAqC,MAAM,4BAA4B,MAAM,6BAA6B,MAAM,2BAA2B,MAAM,8BAA8B,MAAM,mCAAmC,YAAY,6BAA6B,EAAE,IAAI,oCAAoC,KAAK,kCAAkC,QAAQ,6BAA6B,IAAI,mCAAmC,KAAK,sCAAsC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,oCAAoC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,qCAAqC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,MAAM,CAN/y4F,KAMqz4F,KAAK,CAN1z4F,KAMg04F,sCAAsC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,oCAAoC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,qCAAqC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAI,CAAC,CAN7x5F,IAMky5F,kCAAkC,KAAK,4BAA4B,KAAK,+BAA+B,KAAK,iCAAiC,IAAI,6BAA6B,EAAE,IAAI,4BAA4B,KAAK,+BAA+B,KAAK,iCAAiC,KAAK,4BAA4B,KAAK,uBAAuB,KAAK,+BAA+B,KAAK,sCAAsC,KAAK,kCAAkC,IAAI,+BAA+B,IAAI,KAAK,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAI,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,mCAAmC,QAAQ,iCAAiC,QAAQ,6BAA6B,KAAK,qCAAqC,QAAQ,6BAA6B,KAAK,6BAA6B,KAAK,+BAA+B,KAAK,6BAA6B,OAAO,CAAC,CANnr7F,IAMwr7F,CANv56F,KAM656F,CAN9r7F,GAMks7F,CANj66F,KAMu66F,mCAAmC,QAAQ,iCAAiC,IAAI,wBAAwB,6BAA6B,QAAQ,qCAAqC,KAAK,6BAA6B,QAAQ,6BAA6B,KAAK,+BAA+B,KAAK,6BAA6B,IAAI,CAAC,CANhk7F,GAMok7F,iCAAiC,YAAY,4BAA4B,KAAK,+BAA+B,KAAK,iCAAiC,IAAI,6BAA6B,EAAE,KAAK,4BAA4B,KAAK,+BAA+B,KAAK,iCAAiC,KAAK,4BAA4B,KAAK,6BAA6B,KAAK,uBAAuB,KAAK,+BAA+B,KAAK,sCAAsC,KAAK,kCAAkC,KAAK,+BAA+B,IAAI,CAAC,CANnm8F,GAMum8F,CANvm8F,GAM2m8F,CANtx8F,KAM4x8F,CANjn8F,GAMqn8F,CAAC,eAAe,6BAA6B,IAAI,mBAAmB,kCAAkC,IAAI,oBAAoB,qCAAqC,IAAI,4BAA4B,6BAA6B,IAAI,oBAAoB,mCAAmC,KAAK,IAAI,+BAA+B,EAAE,KAAM,+BAA+B,IAAI,kBAAkB,6BAA6B,IAAI,kBAAkB,CAAC,CAAC,SAAS,SAAS,OAAO,OAAO,IAAI,sBAAsB,MAAM,KAAK,QAAQ,KAAK,eAAe,MAAM,CAAC,CAAxG,QAAiH,CAFqse,SAE3re,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,OAAO,CAA9L,QAAuM,CAAC,eAAe,OAAO,IAAI,qCAAqC,CAAC,CAAxQ,QAAiR,CAAC,eAAe,OAAO,KAAK,MAAM,EAAE,IAAI,oBAAoB,CAAC,CAAC,CAA/U,QAAwV,CAAC,gBAAgB,CAAzW,QAAkX,CAAC,iBAAiB,CAApY,SAA8Y,SAAS,QAAQ,CAAC,CAAxN,eAAwO,wBAAwB,IAAI,kCAAkC,WAAW,IAAI,8BAA8B,eAAe,IAAI,uBAAuB,OAAO,KAAK,IAAI,sBAAsB,EAAE,IAAI,uBAAuB,CAAC,CAAjc,cAAgd,QAAQ,QAAQ,GAAG,CAAC,CAA1Z,eAA0a,CAFjkvE,OAEykvE,QAAQ,CAAzV,iBAA2W,CAFnmvE,OAE2mvE,QAAQ,CAAtiB,eAAsjB,CAFnovE,OAE2ovE,QAAQ,QAAQ,IAAI,CAAC,CAAxa,iBAA0b,MAAM,IAAI,4BAA4B,CAAC,CAAje,iBAAmf,CAAC,gBAAgB,CAApgB,iBAAshB,CAFh9sE,YAE69sE,cAAc,IAAI,4BAA4B,IAAI,4BAA4B,EAAE,EAAE,SAAS,MAAM,CAAC,CAAroB,iBAAupB,CAAnK,eAAmL,CAAC,CAFlmtE,YAhB9w1B,cAkB24iG,CAAC,CAAC,CAArsB,iBAAutB,CAAC,gBAAgB,CAAxuB,iBAA0vB,CAF5trE,eAE4urE,cAAc,EAAE,EAAE,IAAI,4BAA4B,IAAI,2BAA2B,CAAC,CAA51B,iBAA82B,CAAjuC,SAA2uC,OAAO,IAAI,8BAA8B,SAAS,SAAS,QAAQ,CAAC,CAAC,CAA77B,iBAA+8B,CAAC,sBAAsB,CAAt+B,iBAAw/B,CAAC,qBAAqB,CAA9gC,iBAAgiC,CAAC,qBAAqB,cAAc,IAAI,2BAA2B,CAAC,CAApmC,iBAAsnC,CAAtK,sBAA6L,CAAC,OAAO,CAArpC,iBAAuqC,CAA9K,qBAAoM,CAA/C,OAAuD,CAArsC,iBAAutC,CAAtL,qBAA4M,CAA/F,OAAuG,OAAO,KAAK,QAAQ,KAAK,eAAe,MAAM,CAAC,CAAhzB,gBAAi0B,MAAM,KAAK,SAAS,SAAS,SAAS,OAAO,YAAY,EAAE,YAAY,OAAO,cAAc,SAAS,WAAW,WAAW,QAAQ,IAAI,8BAA8B,iBAAiB,IAAI,6BAA6B,CAAC,IAAI,qBAAqB,MAAM,IAAI,+BAA+B,CAAC,IAAI,uBAAuB,OAAO,IAAI,6BAA6B,YAAY,IAAI,6BAA6B,UAAU,IAAI,gCAAgC,YAAY,IAAI,iCAAiC,CAAC,CAA5yC,gBAA6zC,EAAE,MAAM,IAAI,+BAA+B,CAAC,IAAI,oBAAoB,CAAC,IAAI,mBAAmB,CAAC,CAAtrC,gBAAusC,MAAM,KAAK,YAAY,EAAE,QAAQ,IAAI,8BAA8B,iBAAiB,IAAI,6BAA6B,CAAC,IAAI,qBAAqB,MAAM,IAAI,+BAA+B,CAAC,IAAI,uBAAuB,OAAO,IAAI,6BAA6B,UAAU,IAAI,gCAAgC,QAAQ,KAAK,gBAAgB,SAAS,WAAW,WAAW,YAAY,OAAO,SAAS,QAAQ,CAAC,CAAllD,gBAAmmD,EAAE,MAAM,IAAI,+BAA+B,CAAC,IAAI,oBAAoB,CAAC,IAAI,mBAAmB,CAAC,CAAhsD,eAAgtD,QAAQ,QAAQ,GAAG,SAAS,SAAS,iBAAiB,IAAI,iCAAiC,CAAC,IAAI,yBAAyB,QAAQ,MAAM,QAAQ,GAAG,MAAI,EAAQ,KAAY,KAAU,EAAE,OAAO,IAAI,MAAM,KAAK,iBAAiB,IAAI,GAAG,UAAU,OAAO,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,CAAtyF,eAAszF,SAAS,SAAS,OAAO,IAAI,4BAA4B,SAAS,OAAO,IAAI,IAAI,KAAK,IAAI,UAAU,MAAM,UAAU,IAAI,+BAA+B,UAAU,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,oBAAoB,UAAU,QAAQ,KAAK,QAAQ,MAAM,WAAW,IAAI,8BAA8B,MAAM,IAAI,cAAc,IAAI,mCAAmC,WAAW,IAAI,gCAAgC,2BAA2B,aAAa,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC,CAAxvG,cAAuwG,CAF6xX,SAEnxX,CAAjxG,cAAgyG,CAFw0X,UAE7zX,oBAAoB,GAAG,CAAC,CAAn0G,cAAk1G,CAFktX,SAExsX,UAAU,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAA/3G,cAA84G,CAF0tX,UAE/sX,UAAU,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,qBAAqB,QAAQ,KAAK,WAAW,WAAW,SAAS,SAAS,UAAU,IAAI,qCAAqC,iBAAiB,IAAI,kCAAkC,CAAC,IAAI,qBAAqB,MAAM,IAAI,oCAAoC,CAAC,IAAI,uBAAuB,OAAO,IAAI,kCAAkC,aAAa,IAAI,qBAAqB,cAAc,IAAI,qBAAqB,CAAC,CAAnZ,qBAAya,CAAC,kBAAkB,YAAY,EAAE,MAAM,KAAK,KAAK,EAAE,GAAG,WAAW,OAAO,YAAY,IAAI,iCAAiC,CAAC,CAAC,gBAAgB,MAAM,KAAK,OAAO,KAAK,SAAS,OAAO,SAAS,SAAS,YAAY,EAAE,CAAC,CAAC,wBAAwB,SAAS,SAAS,MAAM,KAAK,OAAO,KAAK,WAAW,GAAG,CAAC,CAAC,eAAe,QAAQ,KAAK,eAAe,OAAO,MAAM,KAAK,OAAO,KAAK,SAAS,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,OAAO,aAAa,QAAQ,KAAK,YAAY,EAAE,MAAM,KAAK,SAAS,SAAS,WAAW,WAAW,aAAa,IAAI,qBAAqB,cAAc,IAAI,qBAAqB,CAAC,CAAl7I,eAAk8I,CAAhe,eAAgf,aAAa,CAA1O,YAAuP,YAAY,QAAQ,CAA/5I,iBAAi7I,CAAhjB,eAAgkB,aAAa,CAA1T,YAAuU,YAAY,QAAQ,QAAQ,cAAc,CAAC,CAAC,aAAa,YAAY,EAAE,QAAQ,KAAK,gBAAgB,OAAO,YAAY,OAAO,WAAW,WAAW,MAAM,aAAa,WAAW,OAAO,OAAO,QAAQ,QAAQ,GAAG,MAAM,IAAI,8BAA8B,OAAO,KAAK,UAAU,IAAI,4BAA4B,CAAC,CAAC,mBAAmB,CAAC,oBAAoB,MAAM,IAAI,8BAA8B,CAAC,IAAI,mBAAmB,iBAAiB,IAAI,6BAA6B,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,MAAM,IAAI,mCAAmC,CAAC,CAAC,sBAAsB,MAAM,IAAI,mCAAmC,OAAO,IAAI,CAAC,CAAC,sBAAsB,CAAlU,oBAAuV,MAAM,IAAI,mCAAmC,iBAAiB,IAAI,+BAA+B,CAAC,IAAI,kBAAkB,CAAC,CAAhd,oBAAqe,QAAQ,aAlBv9rG,cAkBk/rG,IAAI,SAAS,SAAS,MAAM,IAAI,wBAAwB,OAAO,IAAI,wBAAwB,YAAY,IAAI,uBAAuB,CAAC,CAAC,oBAAoB,SAAS,SAAS,QAAQ,KAAK,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,YAAY,OAAO,gBAAgB,OAAO,WAAW,GAAG,CAAC,CAAC,mBAAmB,MAAM,IAAI,8BAA8B,OAAO,IAAI,8BAA8B,cAAc,KAAK,IAAI,6BAA6B,EAAE,GAAG,iBAAiB,IAAI,6BAA6B,CAAC,CAAhN,kBAAmO,CAAC,CAApO,mBAAwP,YAAY,GAAG,CAAC,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,4BAA4B,SAAS,QAAQ,CAAC,CAAvG,0BAAkI,QAAQ,CAA9G,2BAA0I,QAAQ,CAArH,2BAAiJ,QAAQ,MAAM,KAAK,OAAO,IAAI,wBAAwB,QAAQ,GAAG,SAAS,SAAS,KAAK,EAAE,IAAI,IAAI,UAAU,WAAW,MAAM,QAAQ,GAAG,iBAAiB,IAAI,+BAA+B,CAAC,IAAI,mBAAmB,QAAQ,EAAE,CAAC,CAAza,0BAAoc,QAAQ,CAAhb,2BAA4c,YAAY,QAAQ,KAAK,KAAK,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,uBAAuB,EAAE,GAAG,cAAc,IAAI,wBAAwB,EAAE,EAAE,IAAI,uBAAuB,CAAC,CAA7mB,2BAAyoB,WAAW,QAAQ,CAA/nB,2BAA2pB,QAAQ,MAAM,KAAK,IAAI,EAAE,IAAI,uBAAuB,EAAE,GAAG,cAAc,EAAE,IAAI,wBAAwB,IAAI,wBAAwB,CAAC,CAAC,CAAv1B,0BAAk3B,WAAW,QAAQ,CAA50B,2BAAw2B,YAAY,QAAQ,QAAQ,IAAI,CAAC,CAAl8B,0BAA69B,CAAp6B,2BAAg8B,QAAQ,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAA//B,4BAA4hC,CAArlE,oBAA0mE,iBAAiB,YAAY,MAAM,OAAO,CAAC,CAAC,wBAAwB,CAAC,uBAAuB,QAAQ,KAAK,gBAAgB,cAAc,YAAY,OAAO,MAAM,IAAI,UAAU,MAAM,YAAY,GAAG,YAAY,KAAK,aAAa,IAAI,CAAC,CAA1L,wBAAmN,CAAz2E,oBAA83E,CAA/M,uBAAuO,CAAt5E,oBAA26E,YAAY,EAAE,SAAS,SAAS,SAAS,OAAO,cAAc,QAAQ,CAAC,CAA5V,wBAAqX,CAAC,CAFropG,UAEgppG,CAAxW,uBAAgY,CAAC,CAFzqpG,UAEorpG,UAAU,IAAI,CAAC,CAA55M,sBAAm7M,CAA14M,qBAAg6M,CAAx3M,qBAA84M,SAAS,SAAS,MAAM,KAAK,OAAO,KAAK,oBAAoB,KAAK,iBAAiB,KAAK,YAAY,KAAK,WAAW,EAAE,CAAC,CAAC,CAAvlN,sBAA8mN,CAAC,eAAe,CAA7iN,qBAAmkN,CAArC,eAAqD,WAAW,MAAM,CAAC,CAAC,2BAA2B,CAAC,0BAA0B,QAAQ,KAAK,gBAAgB,OAAO,YAAY,OAAO,SAAS,SAAS,SAAS,OAAO,OAAO,QAAQ,oBAAoB,IAAI,WAAW,UAAU,CAAC,CAA5M,2BAAwO,KAAK,CAAjN,0BAA4O,KAAK,YAAY,OAAO,cAAc,SAAS,WAAW,WAAW,SAAS,SAAS,SAAS,OAAO,eAAe,IAAI,CAAC,CAAnY,0BAA8Z,CAN7s5E,aAM2t5E,CAAhZ,yBAA0a,CANrv5E,aAMmw5E,WAAW,IAAI,sCAAsC,CAAC,CAA1gB,2BAlB/0wG,QAkB63xG,GAAG,CAAC,CAN/7wG,YAM48wG,CAA/jB,2BAA2lB,MAAM,IAAI,OAAO,YAAY,CAAC,CANtgxG,YAMmhxG,CAAtoB,0BAAiqB,gBAAgB,QAAQ,QAAQ,cAAc,CAAC,CAN7lxG,YAM0mxG,CAA7tB,0BAAwvB,eAAe,OAAO,QAAQ,cAAc,CAAC,CAA7gR,eAA6hR,CAArzB,2BAAi1B,CAFm9wB,QAE18wB,CAA11B,2BAAs3B,MAAM,aAAa,OAAO,GAAG,CAAC,CAA5nR,eAA4oR,CAAp6B,0BAA+7B,gBAAgB,QAAQ,CAF60wB,QAEp0wB,CAAh+B,0BAA2/B,gBAAgB,QAAQ,QAAQ,cAAc,CAAC,CAAlxR,eAAkyR,CAA1jC,0BAAqlC,gBAAgB,OAAO,CAFwrwB,QAE/qwB,CAArnC,0BAAgpC,gBAAgB,OAAO,QAAQ,cAAc,CAAC,CAAC,mCAAmC,CAAC,kCAAkC,MAAM,IAAI,wCAAwC,CAAC,IAAI,kBAAkB,CAAC,CAAr7P,qBAA28P,SAAS,KAAK,4BAA4B,KAAK,CAAC,CAAz3C,0BAAo5C,OAAO,KAAK,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,uBAAuB,YAAY,EAAE,UAAU,IAAI,uCAAuC,SAAS,SAAS,QAAQ,KAAK,gBAAgB,cAAc,YAAY,OAlB38zG,QAkB09zG,KAAK,IAAI,CAAC,CAA5L,uBAAoN,EAAE,SAAS,OAAO,SAAS,SAAS,gBAAgB,OAAO,YAAY,OAAO,QAAQ,KAAK,WAAW,WAAW,OAAO,IAAI,oCAAoC,iBAAiB,IAAI,sCAlBjr0G,QAkB+t0G,EAAE,KAlBju0G,cAkBov0G,GAAG,CAAC,CAAhd,sBAAue,CAAC,KAAK,YAAY,GAAG,CAAC,CAA7f,uBAAqhB,CAF37U,UAEs8U,YAAY,GAAG,CAAC,CAAC,8BAA8B,CAAC,6BAA6B,CAAC,6BAA6B,OAAO,MAAM,MAAM,KAAK,CAAC,CAAnH,8BAAkJ,CAFgzxB,cAEjyxB,CAAlI,6BAAgK,CAFmwxB,cAEpvxB,CAAjJ,6BAA+K,CAFstxB,cAEvsxB,OAAO,KAAK,SAAS,MAAM,CAAC,CAA/6R,qBAAq8R,2BAA2B,KAAK,0BAA0B,IAAI,CAAC,CAApgS,qBAA0hS,CAF3wiF,QAEoxiF,YAAY,EAAE,IAAI,WAAW,CAAC,CAAjkS,qBAAulS,CAAl8R,OAA08R,OAAO,KAAK,QAAQ,KAAK,eAAe,MAAM,CAAC,MAAM,mBAAmB,MAAM,0BAA0B,MAAM,2BAA2B,MAAM,0BAA0B,MAAM,6BAA6B,MAAM,wBAAwB,IAAI,CAAC,CANhrzG,IAMqrzG,6BAA6B,KAAK,qCAAqC,KAAK,mCAAmC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,+BAA+B,KAAK,4BAA4B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,CAN54zG,IAMi5zG,CANhnzG,KAMsnzG,CANv5zG,GAM25zG,CAN1nzG,KAMgozG,qCAAqC,KAAK,mCAAmC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,+BAA+B,KAAK,4BAA4B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANrpzG,GAMypzG,6BAA6B,IAAI,CAAC,CAN3rzG,GAM+rzG,CAN/rzG,GAMmszG,CAN92zG,KAMo3zG,CANzszG,GAM6szG,CAAC,eAAe,qCAAqC,IAAI,oBAAoB,4BAA4B,IAAI,4BAA4B,+BAA+B,IAAI,oBAAoB,uCAAuC,IAAI,gBAAgB,CAAC,CAA95T,OAAs6T,MAAM,KAAK,OAAO,IAAI,mBAAmB,CAAC,CAAh9T,MAAu9T,CAAC,cAAc,OAAO,IAAI,0BAA0B,CAAC,CAFixrB,QAExwrB,CAArhU,OAA6hU,OAAO,IAAI,2BAA2B,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,OAAO,CAA1nU,MAAioU,KAAK,CAA9K,eAA8L,OAAO,IAAI,6BAA6B,CAAC,CAAC,CAAhsU,MAAusU,CAN3l3G,YAMwm3G,WAAW,IAAI,0BAA0B,CAAC,IAAI,qBAAqB,CAAC,CAAC,eAAe,MAAM,IAAI,0BAA0B,CAAC,CAApD,eAAoE,CAFnulF,QAE4ulF,WAAW,EAAE,EAAE,cAAc,IAAI,4BAA4B,IAAI,4BAA4B,EAAE,CAAC,CAAC,CAA9K,eAA8L,CAF71lF,OAEq2lF,QAAQ,QAAQ,cAAc,CAAC,CAArO,eAAqP,CAFp5lF,OAE45lF,CAAC,CAAtmI,eAAsnI,OAAO,KAAK,KAAK,EAAE,IAAI,qBAAqB,CAAC,CAAnqI,eAAmrI,QAAQ,KAAK,SAAS,OAAO,gBAAgB,OAlBv+4G,QAkBs/4G,EAAE,WAAW,MAAM,OAAO,KAAK,SAAS,SAAS,UAAU,IAAI,8BAA8B,0BAA0B,WAAW,CAAC,CAF0/pB,QAEj/pB,CAA33I,eAA24I,cAAc,EAAE,EAAE,IAAI,4BAA4B,IAAI,2BAA2B,CAAC,CAA79I,cAA4+I,OAAQ,CAAp/I,cAAmgJ,QAAS,QAAQ,GAAG,SAAS,SAAS,KAAK,EAAE,MAAM,KAAK,OAAO,IAAI,QAAQ,IAAI,eAAe,IAAI,CAAC,CANt4kG,KAM44kG,CAA5mJ,eAA4nJ,0BAA0B,IAAI,mBAAmB,CAAC,CAF10+D,aAEw1+D,CAA5rJ,eAA4sJ,0BAA0B,IAAI,2BAA2B,CAAC,CAAC,aAAa,CAApxJ,eAAoyJ,0BAA0B,IAAI,0BAA0B,EAAE,IAAI,qBAAqB,CAAC,CAAhhC,eAAgiC,CAAx4J,eAAw5J,0BAA0B,IAAI,sBAAsB,CAAC,CAA78J,cAA49J,QAAS,IAAI,EAAE,iBAAiB,gBAAgB,GAAG,MAAM,CAAC,IAAI,0BAA0B,CAAC,YAAY,CAAC,CAAlkK,cAAilK,OAAQ,OAAO,EAAE,iBAAiB,gBAAgB,GAAG,GAAG,CAAC,IAAI,0BAA0B,CAAC,YAAY,CAAC,CAAC,cAAc,SAAS,SAAS,WAAW,KAAK,QAAQ,EAAE,CAAC,CAA3D,aAAyE,CAAC,mBAAmB,CAAC,mBAAmB,MAAM,IAAI,CAAC,CAA5H,aAA0I,CAAC,mBAAmB,WAAW,IAAI,CAAC,CAA9K,aAA4L,CAAC,qBAAqB,WAAW,MAAM,CAAC,CAApO,aAAkP,CAAC,oBAAoB,WAAW,KAAK,CAAC,CAAxR,aAAsS,CAAC,sBAAsB,QAAQ,KAAK,YAAY,OAAO,MAAM,IAAI,+BAA+B,CAAC,CAAC,aAAa,SAAS,KAAK,iBAAiB,EAAE,UAAU,OAAO,KAAK,WAAW,WAAW,QAAQ,IAAI,0BAA0B,CAAC,KAAK,IAAI,gBAAgB,KAAK,gBAAgB,WAAW,CAAC,CAA3L,YAAwM,oBAAoB,mBAAmB,KAAK,WAAW,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAApT,YAAiU,0BAA0B,WAAW,KAAK,WAAW,EAAE,CAAC,CAAC,CAA1X,YAAuY,0BAA0B,iBAAiB,YAAY,QAAQ,EAlB5w8G,cAkB4x8G,OAAO,SAAS,QAAQ,CAAC,CAAC,YAAY,OAAO,IAAI,yBAAyB,YAAY,IAAI,yBAAyB,YAAY,OAAO,SAAS,SAAS,SAAS,OAAO,cAAc,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,WAAW,WAAW,MAAM,IAAI,6BAA6B,OAAO,QAAQ,kBAAkB,MAAM,CAAC,CAAlS,YAA+S,KAlBrm9G,QAkBkn9G,EAAE,IAAI,CAAC,CAAnU,WAA+U,CAAC,gBAAgB,eAAe,IAAI,CAAC,CAApX,WAAgY,CAAC,qBAAqB,MAAM,IAAI,sCAAsC,UAAU,WAAgB,GAAG,QAAQ,EAAK,CAAC,CAAC,wBAAwB,CAA1gB,YAAuhB,kBAAkB,IAAI,CAAC,CAAC,wBAAwB,OAAO,IAAI,yBAAyB,WAAW,WAAW,SAAS,SAAS,IAAI,IAAI,WAAW,KAAK,GAAG,EAAE,IAAI,wBAAwB,EAAE,GAAG,eAAe,IAAI,CAAC,CAAC,UAAU,CAA/xN,eAA+yN,SAAS,MAAM,CAAC,CAA1C,UAAqD,CAAnpD,cAAkqD,CAApE,UAA+E,CAArzB,YAAk0B,CAA5F,UAAuG,CAA7zC,aAA20C,gBAAgB,WAAW,CAAC,CAAjJ,UAA4J,CAA1vD,cAAywD,SAAS,OAAO,CAAC,CAA5L,UAAuM,CAA76B,YAA07B,YAAY,OAAO,SAAS,OAAO,CAAC,CAAxP,UAAmQ,CAAz+B,WAAq/B,CAAC,KAAK,oBAAoB,OAAO,QAAQ,MAAM,gBAAgB,YAAY,SAAS,SAAS,SAAS,OAAO,cAAc,SAAS,WAAW,WAAW,UAAU,KAAK,iBAAiB,OAAO,OAAO,MAAM,CAAC,CAN3p8G,IAMgq8G,CAA1pB,wBAAmrB,KAAK,KAAK,MAAM,KAAK,iBAAiB,IAAI,oCAlBlk/G,cAkBon/G,GAAG,CAAC,CAF2/jB,QAEl/jB,CANly8G,IAMuy8G,CAAjyB,wBAA0zB,KAAK,IAAI,MAAM,GAAG,CAAC,CANv47G,GAM247G,CAAj1B,wBAA02B,KAAK,EAAE,MAAM,EAAE,WAAW,IAAI,MAAM,IAAI,iBAAiB,cAAc,IAAI,MAAM,IAAI,gBAAgB,CAAC,CAAC,0BAA0B,YAAY,KAAK,aAAa,KAAK,WAAW,MAAM,CAAC,CAA/E,yBAAyG,CAF/uS,UAE0vS,QAAQ,KAAK,CAAC,CANzl9G,IAM8l9G,CAAvI,0BAAkK,WAAW,KAAK,cAAc,IAAI,CAAC,CAN5p9G,IAMiq9G,CAA1M,0BAAqO,CAF32S,UAEs3S,CANvs9G,IAM4s9G,CAArP,yBAA+Q,CAFr5S,UAEg6S,MAAM,KAAK,OAAO,IAAI,CAAC,CAN5z8G,GAMg08G,CAArT,0BAAgV,WAAW,KAAK,cAAc,IAAI,CAAC,CAN109G,IAM+09G,wBAAwB,KAAK,cAAc,IAAI,CAAC,CANn78G,GAMu78G,wBAAwB,KAAK,cAAc,IAAI,CAAC,CANv+8G,GAM2+8G,CAN3+8G,GAM++8G,CAN1p9G,KAMgq9G,CANr/8G,GAMy/8G,CAAC,eAAe,4BAA4B,IAAI,mBAAmB,yBAAyB,IAAI,gBAAgB,CAAC,CAAC,cAAc,SAAS,SAAS,IAAI,IAAI,YAAY,CAAC,GAAG,OAAO,IAAI,eAAe,eAAe,IAAI,CAAC,CAAtG,cAAqH,CAF31T,UAEs2T,SAAS,SAAS,KAAK,IAAI,MAAM,IAAI,yBAAyB,OAAO,IAAI,yBAAyB,YAAY,KAAK,GAAG,EAAE,IAAI,wBAAwB,EAAE,GAAG,WAAW,KAAK,GAAG,EAAE,IAAI,wBAAwB,EAAE,GAAG,IAAI,IAAI,WAAW,MAAM,CAAC,CAAC,WAAW,CAArX,cAAoY,IAAI,KAAK,OAAO,EAAE,SAAS,KAAK,CAAC,CAAC,kCAAkC,CAAxc,cAAud,CAAC,4BAA4B,CAApf,cAAmgB,IAAI,KAAK,GAAG,EAAE,IAAI,uBAAuB,CAAC,KAAK,EAAE,IAAI,oBAAoB,CAAC,CANpo/G,IAMyo/G,CAAllB,cAAimB,cAAc,KAAK,GAAG,EAAE,IAAI,gBAAgB,MAAM,KAAK,KAAK,EAAE,IAAI,EAAE,SAAS,QAAQ,CAAC,CAN9u/G,IAMmv/G,CAA5rB,cAA2sB,CAFj7U,UAE47U,WAAW,OAAO,CAAC,CANhy/G,IAMqy/G,CAAC,WAAW,KAAK,CAAC,eAAe,KAAK,CAAC,aAAa,CAAlyB,cAAizB,CAFvhV,UAEkiV,CANn3/G,IAMw3/G,CAAlF,WAA8F,KAAK,CAAlF,eAAkG,KAAK,CAAlF,aAAgG,CAAr3B,cAAo4B,CAF4oyC,gBAE3nyC,UAAU,IAAI,CAAC,CAN39/G,IAMg+/G,CAA1L,WAAsM,CAAC,YAAY,CAAl8B,cAAi9B,CAFyg0C,qBAEn/zC,CAN9hgH,IAMmigH,CAA7P,WAAyQ,KAAK,CAA7P,eAA6Q,KAAK,CAA7P,YAA0Q,KAAK,CAAC,eAAe,CAApjC,cAAmkC,CAFu5zC,qBAEj4zC,QAAQ,WAAW,CAAC,CANpqgH,IAMyqgH,CAAlX,cAAiY,CAAC,EAAE,CAN3rgH,IAMgsgH,CAAC,iBAAiB,CAAC,EAAE,oBAAoB,IAAI,oBAAoB,SAAS,CAAC,CAN3wgH,IAMgxgH,CAA/E,kBAAkG,CAA5uC,cAA2vC,CAF+tzC,qBAEzszC,oBAAoB,GAAG,CAAC,CANh2gH,IAMq2gH,CAAzhB,YAAsiB,CAA3zC,cAA00C,CAFhjW,UAE2jW,UAAU,uBAAuB,GAAG,SAAS,QAAQ,CAAC,CANl8gH,IAMu8gH,CAAhpB,cAA+pB,KAAK,CAA1jC,YAAukC,UAAU,IAAI,CAAC,CANv/gH,IAM4/gH,CAArsB,cAAotB,KAAK,CAA/mC,WAA2nC,CAAC,EAAE,UAAU,YAAY,CAAC,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,CAN7khH,IAMklhH,CAA3xB,cAA0yB,KAAK,CAArsC,WAAitC,CAAC,CAA5jD,cAA2kD,UAAU,WAAgB,EAAE,CAAC,CAN/phH,IAMoqhH,CAAnwC,WAA+wC,CAAznD,cAAwoD,cAAc,EAAE,WAAW,KAAK,GAAG,EAAE,IAAI,gBAAgB,SAAS,QAAQ,CAAC,CAN1whH,IAM+whH,CAA92C,UAAy3C,CAAn+B,cAAk/B,CAAC,EAAE,CAN5yhH,IAMizhH,CAAh5C,UAA25C,CAA3nB,iBAA6oB,CAAC,EAAE,oBAAoB,IAAI,oBAAoB,SAAS,CAAC,CANv4hH,IAM44hH,CAA3+C,UAAs/C,CAAhmC,eAAgnC,UAAU,IAAI,CAAC,CANt7hH,IAM27hH,CAA1hD,UAAqiD,CAA/oC,cAA8pC,CAAC,EAAE,UAAU,YAAY,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,eAAe,CAAC,EAAE,CAAC,CANjhiH,IAMshiH,CAArnD,UAAgoD,CAA1uC,cAAyvC,CAAC,CAA1/D,cAAygE,UAAU,WAAgB,EAAE,CAAC,WAAvsB,uBAAyuB,GAAK,UAAU,OAAO,EAAK,CAAC,GAAG,UAAU,OAAO,OAAO,CAAC,CAAC,CAN5uhH,GAMgvhH,aAAa,IAAI,CAAC,CANlwhH,GAMswhH,CAA3pE,cAA0qE,MAAM,IAAI,eAlB1klH,cAkBumlH,IAAI,WAAW,IAAI,6BAA6B,qBAAqB,IAAI,0BAA0B,WAAW,KAAK,GAAG,EAAE,IAAI,gBAAgB,QAAQ,IAAI,WAAW,EAAI,IAAI,IAAI,KAAK,KAAc,CAAC,EAAI,IAAI,IAAQ,SAAe,CAAC,EAAI,IAAI,IAAQ,UAAgB,KAAK,IAAI,YAAY,KAAK,GAAG,EAAE,IAAI,cAAc,EAAE,EAAE,CAAC,CANrniH,GAMyniH,CAA9gF,cAA6hF,CAFnwY,UAE8wY,OAAO,aAAa,CAAC,CAAC,CANzqiH,GAM6qiH,CAAC,UAAU,MAAM,KAAK,OAAO,KAAK,WAAW,WAAW,OAAO,IAAI,MAAM,IAAI,sBAAsB,SAAS,SAAS,KAAK,IAAI,IAAI,IAAI,YAAY,MAAM,WAAW,MAAM,kBAAkB,YAlBnpmH,cAkB6qmH,IAAI,QAAQ,EAAE,UAAU,OAAO,OAAO,CAAC,CANz6iH,GAM66iH,CAA/P,SAAyQ,OAAO,QAAQ,GAAG,MAAM,IAAI,OAAO,IAAI,SAAS,SAAS,KAAK,KAAK,OAAO,EAAI,oBAAoB,IAAI,oBAAoB,MAAM,oBAAoB,QAAQ,YAAY,IAAI,MAAM,YAAY,aAAa,IAAI,MAAM,YAAY,UAAU,OAAO,OAAO,CAAC,CANjrjH,GAMqrjH,CAA31E,WAAu2E,KAAK,CAA31E,eAA22E,KAAK,CAA31E,aAAy2E,CAA9nG,cAA6oG,CAFn3Z,UAE83Z,CANnwjH,GAMuwjH,CAA76E,WAAy7E,KAAK,CAA76E,eAA67E,KAAK,CAA76E,aAA27E,CAAhtG,cAA+tG,CAFiztC,gBAEhytC,CAN31jH,GAM+1jH,CAArgF,WAAihF,KAAK,CAArgF,eAAqhF,KAAK,CAArgF,aAAmhF,CAAxyG,cAAuzG,OAAO,UAAU,IAAI,CAAC,CANx7jH,GAM47jH,CAA5jF,YAAykF,CAA91G,cAA62G,CAFnla,UAE8la,CANn+jH,GAMu+jH,CAA5nF,eAA4oF,CAA54G,cAA25G,CAFjoa,UAE4oa,WAAW,OAAO,CAAC,CANpikH,GAMwikH,CAAxqF,YAAqrF,CAAv4B,UAAk5B,CANhkkH,GAMokkH,CAAztF,eAAyuF,CAAt6B,UAAi7B,WAAW,MAAM,CAAC,CANjnkH,GAMqnkH,CAA1wF,eAA0xF,CAA1hH,cAAyiH,UAAU,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CANprkH,GAMwrkH,CAAn8E,kBAAs9E,CAA7hC,UAAwiC,WAAW,GAAG,CAAC,CANrukH,GAMyukH,CAAz2F,YAAs3F,CAAxkC,UAAmlC,WAAW,IAAI,UAAU,OAAO,kBAAkB,QAAQ,CAAC,CAAC,CAN7zkH,GAMi0kH,CAAt9F,eAAs+F,CAAtuH,cAAqvH,CANh2kH,GAMo2kH,CAA/mF,kBAAkoF,CAA5wH,cAA2xH,oBAAoB,IAAI,oBAAoB,SAAS,CAAC,OAAO,CAAC,CANp8kH,GAMw8kH,CAAn/G,WAA+/G,CAAz2H,cAAw3H,WAAW,EAAE,cAAc,KAAK,GAAG,EAAE,IAAI,eAAe,EAAE,IAAI,CAAC,CANlilH,GAMsilH,CAAjlH,UAA4lH,CAAtsG,eAAstG,CAAt9H,cAAq+H,UAAU,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CANjnlH,GAMqnlH,CAApmH,kCAAuoH,CAA7iI,cAA4jI,CANvqlH,GAM2qlH,CAAxmH,4BAAqoH,CAA7lI,cAA4mI,QAAQ,CAAC,CAAC,CANjulH,GAMqulH,CAAptH,iCAAsvH,CAAvnG,cAAsoG,CAA3qI,cAA0rI,CANrylH,GAMyylH,CAAxxH,iCAA0zH,CAA38G,YAAw9G,CAA7uI,cAA4vI,CANv2lH,GAM22lH,CAA11H,iCAA43H,CAAliH,eAAkjH,CAAlzI,cAAi0I,CAN56lH,GAMg7lH,CAA72H,2BAAy4H,CAA5zG,cAA20G,CAAh3I,cAA+3I,CAN1+lH,GAM8+lH,CAA36H,2BAAu8H,CAA1oH,YAAupH,CAA56I,cAA27I,CANtimH,GAM0imH,CAAv+H,2BAAmgI,CAA3tH,eAA2uH,CAA3+I,cAA0/I,QAAQ,CAAC,CAAC,CAN/mmH,GAMmnmH,CAAlmI,iCAAooI,CAApnH,YAAioH,CAAvjJ,cAAskJ,CANjrmH,GAMqrmH,CAAlnI,2BAA8oI,CAAhrH,YAA6rH,CAAnnJ,cAAkoJ,QAAQ,EAAE,oBAAoB,GAAG,CAAC,MAAM,0BAA0B,KAAK,0BAA0B,KAAK,4BAA4B,KAAK,wBAAwB,KAAK,2BAA2B,KAAK,oCAAoC,KAAK,oCAAoC,KAAK,yBAAyB,YAAY,gCAAgC,YAAY,8BAA8B,KAAK,iCAAiC,IAAI,+BAA+B,IAAI,CAAC,MAAM,CANj3nH,KAMu3nH,KAAK,CAN53nH,KAMk4nH,+BAA+B,KAAK,4BAA4B,IAAI,CAAC,CANxuoH,IAM6uoH,4BAA4B,IAAI,4BAA4B,KAAK,0BAA0B,KAAK,4BAA4B,KAAK,mCAAmC,KAAK,wCAAwC,KAAK,yCAAyC,KAAK,+BAA+B,KAAK,2BAA2B,KAAK,6BAA6B,IAAI,yBAAyB,KAAK,2BAA2B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,6BAA6B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,6BAA6B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,4BAA4B,IAAI,CAAC,CAN31pH,IAMg2pH,CAN/jpH,KAMqkpH,CANt2pH,GAM02pH,CANzkpH,KAM+kpH,2BAA2B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,6BAA6B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,6BAA6B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,iCAAiC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANlopH,GAMsopH,4BAA4B,IAAI,4BAA4B,KAAK,0BAA0B,KAAK,4BAA4B,KAAK,mCAAmC,KAAK,wCAAwC,KAAK,yCAAyC,KAAK,+BAA+B,KAAK,2BAA2B,KAAK,6BAA6B,IAAI,yBAAyB,KAAK,mCAAmC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,8BAA8B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,4BAA4B,OAAO,CAAC,CAN1pqH,GAM8pqH,CANz0qH,KAM+0qH,CANpqqH,EAMuqqH,CANl1qH,KAMw1qH,mCAAmC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,8BAA8B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANlyqH,GAMsyqH,CANtyqH,GAM0yqH,CANr9qH,KAM29qH,CANhzqH,GAMozqH,CAAC,eAAe,2BAA2B,IAAI,4BAA4B,6BAA6B,IAAI,4BAA4B,iCAAiC,IAAI,6BAA6B,6BAA6B,IAAI,gBAAgB,CAAC,CAFric,WAEijc,WAAW,IAAI,CAAC,CAFjkc,WAE6kc,MAAM,KAAK,CAFxlc,WAEomc,MAAM,KAAK,OAAO,KAlB56uH,QAkBy7uH,EAlBz7uH,OAkBk8uH,EAAE,gBAAgB,SAAS,WAAW,IAAI,CAAC,CAFvrc,WAEmsc,MAAM,GAAG,CAF5sc,WAEwtc,MAAM,GAAG,UAAU,IAAI,2BAA2B,YAAY,IAAI,6BAA6B,SAAS,OAAO,YAAY,OAAO,cAAc,SAAS,YAAY,KAAK,OAAO,IAAI,6BAA6B,iBAAiB,IAAI,yBAAyB,CAAC,CAFz9c,WAEq+c,MAAM,EAAE,KAAK,CAAC,sBAAsB,CAFzgd,WAEqhd,MAAM,EAAE,KAAK,CAA/C,sBAAsE,MAAM,IAAI,2BAA2B,CAAC,CAF/ld,WAE2md,MAAM,CAAC,CAFn8+B,SAE68+B,CAF5nd,WAEwod,MAAM,CAAC,CAF/siH,KAEqtiH,CAFrpd,WAEiqd,MAAM,CAAC,CAFl8+B,eAEk9+B,eAAe,IAAI,UAAU,IAAI,0BAA0B,CAAC,CAFpvd,WAEgwd,MAAM,UAAU,IAAI,0BAA0B,CAAC,CAF/yd,WAE2zd,MAAM,GAAG,CAFp0d,WAEg1d,MAAM,GAAG,OAAO,IAAI,4BAA4B,CAAC,CAFj4d,WAE64d,MAAM,EAAE,CAAC,wBAAwB,CAAC,eAAe,CAF97d,WAE08d,MAAM,EAAE,OAAO,WAAW,IAAI,iCAAiC,CAAC,CAF1ge,WAEshe,MAAM,EAAE,QAAQ,CAFtie,WAEkje,MAAM,EAAE,QAAQ,QAAQ,GAAG,SAAS,SAAS,iBAAiB,IAAI,8BAA8B,QAAQ,MAAM,QAAQ,GAAG,MAAI,EAAQ,KAAY,KAAU,EAAE,OAAO,IAAI,MAAM,KAAK,iBAAiB,IAAI,GAAG,UAAU,OAAO,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,CAFtze,WAEk0e,GAAG,CAFr0e,WAEi1e,GAAG,6BAA6B,IAAI,oCAAoC,8BAA8B,IAAI,oCAAoC,YAAY,IAAI,kCAAkC,eAAe,IAAI,kCAAkC,aAAa,IAAI,8BAA8B,cAAc,IAAI,+BAA+B,SAAS,SAAS,WAAW,UAAU,CAAC,CAF9sf,WAE0tf,EAAE,aAAa,CAFzuf,WAEqvf,EAAE,aAAa,6BAA6B,IAAI,wCAAwC,CAAC,CAF90f,WAE01f,EAAE,YAAY,CAFx2f,WAEo3f,EAAE,YAAY,8BAA8B,IAAI,wCAAwC,CAAC,CAF78f,WAEy9f,EAAE,CAAC,WAAW,CAFv+f,WAEm/f,EAAE,CAAzB,WAAqC,6BAA6B,IAAI,0CAA0C,8BAA8B,IAAI,yCAAyC,CAAC,CAFxpgB,WAEoqgB,EAAE,CAAC,aAAa,CAFprgB,WAEgsgB,EAAE,CAA3B,aAAyC,WAAW,KAAK,CAAC,CAFjugB,WAE6ugB,EAAE,CAAC,cAAc,CAF9vgB,WAE0wgB,EAAE,CAA5B,cAA2C,SAAS,QAAQ,MAAM,IAAI,+BAA+B,CAAC,CAFt1gB,WAEk2gB,EAAE,CAApH,cAAmI,KAAK,CAAC,KAAK,CAF93gB,WAE04gB,EAAE,CAA5J,cAA2K,KAAK,CAAC,KAAK,YAAY,GAAG,CAAC,CAFt7gB,WAEk8gB,EAAE,CAApN,aAAkO,aAAa,CAF/9gB,WAE2+gB,EAAE,CAA7P,aAA2Q,aAAa,cAAc,KAAK,IAAI,8BAA8B,EAAE,EAAE,CAAC,CAFlkhB,WAE8khB,EAAE,CAAhW,aAA8W,YAAY,CAAC,GAAG,CAF9mhB,WAE0nhB,EAAE,CAA5Y,aAA0Z,YAAY,CAAC,GAAG,CAF1phB,WAEsqhB,EAAE,CAAxb,aAAsc,YAAY,CAAC,GAAG,CAFtshB,WAEkthB,EAAE,CAApe,aAAkf,YAAY,CAAC,GAAG,aAAa,KAAK,IAAI,6BAA6B,EAAE,EAAE,CAAC,CAF1yhB,WAEszhB,EAAE,CAAxkB,aAAslB,YAAY,CAFl1hB,WAE81hB,EAAE,CAAhnB,aAA8nB,YAAY,aAAa,KAAK,IAAI,6BAA6B,EAAE,EAAE,CAAC,CAFl7hB,WAE87hB,EAAE,CAAC,aAAa,CAF98hB,WAE09hB,EAAE,CAA3B,aAAyC,WAAW,MAAM,YAAY,MAAM,CAAC,CAF9giB,WAE0hiB,EAAE,CAA3F,aAAyG,CAAC,CANt7jH,KAM47jH,CAFjjiB,WAE6jiB,EAAE,CAA9H,aAA4I,CAAC,CANz9jH,KAM+9jH,MAAM,IAAI,kCAAkC,CAAC,IAAI,kBAAkB,CAAC,CAFp/1E,KAE0/1E,CAF9piB,WAE0qiB,GAAG,CAAC,CAFnnuH,UAE8nuH,CAFrh2E,KAE2h2E,CAF/riB,WAE2siB,GAAG,CAAC,CAFppuH,UAE+puH,CAFtj2E,IAE2j2E,CAF/tiB,WAE2uiB,GAAG,CAAC,CAFpruH,UAE+ruH,CAFtl2E,IAE2l2E,CAF/viB,WAE2wiB,GAAG,CAAC,CAFptuH,UAE+tuH,CAF1xiB,WAEsyiB,GAAG,CAAC,CAF/uuH,UAE0vuH,CAFrziB,WAEi0iB,GAAG,CAAC,CAF1wuH,UAEqxuH,QAAQ,aAAa,eAAe,OAAO,WAAW,OAAO,UAAU,EAAE,UAAU,CAAC,CAAC,CAFjw2E,KAEuw2E,CAF36iB,WAEu7iB,GAAG,CAAC,CAFh4uH,UAE24uH,EAAE,CAFpy2E,KAE0y2E,CAF98iB,WAE09iB,GAAG,CAAC,CAFn6uH,UAE86uH,EAAE,CAFv02E,IAE402E,CAFh/iB,WAE4/iB,GAAG,CAAC,CAFr8uH,UAEg9uH,EAAE,CAFz22E,IAE822E,CAFlhjB,WAE8hjB,GAAG,CAAC,CAFv+uH,UAEk/uH,EAAE,CAF/ijB,WAE2jjB,GAAG,CAAC,CAFpgvH,UAE+gvH,EAAE,CAF5kjB,WAEwljB,GAAG,CAAC,CAFjivH,UAE4ivH,EAAE,UAAU,IAAI,qCAAqC,eAAe,MAAM,CAAC,CAFlrjB,WAE8rjB,CAFlrjB,aAEgsjB,KAAK,CAAC,YAAY,OAAO,QAAQ,SAAS,QAAQ,CAAC,CAF/vjB,WAE2wjB,CAF/vjB,aAE6wjB,CAAvE,WAAmF,CAAC,iBAAiB,OAAO,QAAQ,SAAS,QAAQ,CAAC,CAFx1jB,WAEo2jB,CAFx1jB,aAEs2jB,CAA3sD,YAAwtD,CAA7K,UAAwL,CAAC,CAArG,gBAAsH,QAAQ,CAFp6jB,WAEg7jB,CAFp6jB,aAEk7jB,CAAvxD,YAAoyD,KAAK,CAA9P,WAA0Q,QAAQ,CAFp+jB,WAEg/jB,CAFp+jB,aAEk/jB,KAAK,CAA51D,aAA02D,CAA/T,UAA0U,CAAC,CAAvP,gBAAwQ,OAAO,CAFrjkB,WAEikkB,CAFrjkB,aAEmkkB,KAAK,CAA76D,aAA27D,KAAK,CAArZ,WAAia,OAAO,QAAQ,kBAAkB,YAAY,sBAAsB,YAAY,IAAI,WAAW,OAAO,YAAY,EAAE,eAAe,OAAO,eAAe,KAAK,YAAY,OAAO,UAAU,OAAO,UAAU,IAAI,uBAAuB,YAAY,eAAe,mBAAmB,wBAAwB,UAAU,sBAAsB,OAAO,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,QAAQ,aAAa,eAAe,IAAI,MAAM,KAAK,OAAO,KAAK,MAAM,IAAI,gCAAgC,UAAU,KAAK,YAAY,KAAK,oBAAoB,IAAI,UAAU,OAAO,GAAG,QAAQ,CAAC,CAAC,CAA5xH,eAA4yH,CAF3tlB,WAEuulB,CAF3tlB,aAEyulB,KAAK,CAAvwI,sBAA8xI,CAA3+B,gBAA4/B,MAAM,OAAO,CAAh4H,eAAg5H,CAF/zlB,WAE20lB,CAF/zlB,aAE60lB,KAAK,CAA32I,sBAAk4I,CAA/kC,gBAAgmC,MAAM,QAAQ,CAAr+H,eAAq/H,CAFp6lB,WAEg7lB,CAFp6lB,aAEk7lB,KAAK,CAAh9I,qBAAs+I,MAAM,OAAO,CAAvjI,eAAukI,CAFt/lB,WAEkgmB,CAFt/lB,aAEogmB,KAAK,CAAliJ,qBAAwjJ,MAAM,QAAQ,QAAQ,GAAG,CAAC,CAFrkmB,WAEilmB,CAFrkmB,aAEmlmB,CAA5mJ,qBAAkoJ,CAA/0C,gBAAg2C,OAAO,CAF7omB,WAEypmB,CAF7omB,aAE2pmB,CAAprJ,qBAA0sJ,CAAv5C,gBAAw6C,QAAQ,CAFttmB,WAEkumB,CAFttmB,aAEoumB,CAA7vJ,oBAAkxJ,OAAO,CAF5wmB,WAEwxmB,CAF5wmB,aAE0xmB,CAAnzJ,oBAAw0J,QAAQ,QAAQ,aAAa,CAAC,CAFz1mB,WAEq2mB,CAFz1mB,aAEu2mB,CAAC,aAAa,OAAO,CAFx4mB,WAEo5mB,CAFx4mB,aAEs5mB,CAA9C,aAA4D,QAAQ,CAFx7mB,WAEo8mB,CAA9pD,gBAA+qD,OAAO,CAF59mB,WAEw+mB,CAAlsD,gBAAmtD,QAAQ,UAAU,OAAO,iBAAiB,CAAC,CAFh46E,KAEs46E,CAF1inB,WAEsjnB,CAAzu2G,YAAsv2G,CAF/56E,KAEq66E,CAFzknB,WAEqlnB,CAAlr3G,YAA+r3G,CAFlmnB,UAE6mnB,CAFz86E,KAE+86E,CAAty2G,YAAmz2G,CAFhonB,UAE2onB,CAFv+6E,KAE6+6E,CAA9u3G,YAA2v3G,aAAa,IAAI,yCAAyC,cAAc,IAAI,wCAAwC,CAAC,CAF/m7E,KAEqn7E,CAFzxnB,WAEqynB,CAAl43G,YAA+43G,CAFlznB,UAE6znB,CAFzp7E,KAE+p7E,CAAh63G,YAA663G,WAAW,IAAI,+BAA+B,iBAAiB,IAAI,gCAAgC,CAAC,CAFhx7E,KAEsx7E,CAF17nB,WAEs8nB,CAAj94G,aAA+94G,CAFp9nB,UAE+9nB,CAF3z7E,KAEi07E,CAAh/4G,aAA8/4G,WAAW,IAAI,CAAC,CAF/17E,KAEq27E,CAFzgoB,WAEqhoB,CAAxs3G,YAAqt3G,CAFlioB,UAE6ioB,CAFz47E,KAE+47E,CAAtu3G,YAAmv3G,WAAW,IAAI,yBAAyB,CAAC,CAFzmoB,WAEqnoB,CAAC,iBAAiB,UAAU,IAAI,4BAA4B,YAAY,IAAI,6BAA6B,CAAC,CAF/toB,WAE2uoB,CAAC,mBAAmB,CAF/voB,WAE2woB,CAAC,iBAAiB,QAAQ,IAAI,CAAC,CAF1yoB,WAEszoB,CAA1C,iBAA4D,CAF1gjC,OAEkhjC,UAAU,IAAI,CAAC,CAF/1oB,WAE22oB,CAA/H,mBAAmJ,YAAY,KAAK,YAAY,MAAM,CAAC,CAFn6oB,WAE+6oB,CAAnM,mBAAuN,CAAC,CAN/0qH,KAMq1qH,MAAM,IAAI,6BAA6B,CAAC,IAAI,mBAAmB,UAAU,CAAC,CAAC,CAFrhpB,WAEiipB,CAArT,mBAAyU,CAAC,CANj8qH,IAMs8qH,CAFhg1H,UAE2g1H,YAAY,EAAE,gBAAgB,OAlB157H,QAkBy67H,CAAC,CAAC,CAFrnpB,WAEiopB,CAAC,kBAAkB,CAFpppB,WAEgqpB,CAAC,2BAA2B,QAAQ,KAAK,gBAAgB,cAAc,YAAY,OAAO,MAAM,IAAI,CAAC,CAFrwpB,WAEixpB,CAA925G,WAA035G,CAAC,CAA5J,kBAA+K,CAFjzpB,WAE6zpB,CAA155G,WAAs65G,CAAC,CAAzK,2BAAqM,YAAY,IAAI,mCAAmC,eAAe,IAAI,mCAAmC,OAAO,KAAK,WAAW,KAAK,GAAG,EAAE,IAAI,oCAAoC,cAAc,KAAK,GAAG,EAAE,IAAI,oCAAoC,WAAW,IAAI,+BAA+B,aAAa,IAAI,yCAAyC,cAAc,IAAI,yCAAyC,YAAY,KAAK,GAAG,EAAE,IAAI,0CAA0C,aAAa,KAAK,GAAG,EAAE,IAAI,yCAAyC,CAAC,CAFp4qB,WAEg5qB,CAA/uB,2BAA2wB,WAAW,KAAK,IAAI,qBAAqB,CAAC,IAAI,QAAQ,IAAI,CAAC,CAFv+qB,UAEk/qB,CAAC,uBAAuB,CAAx4B,kBAA25B,QAAQ,IAAI,CAAC,CAF1irB,UAEqjrB,CAAlE,uBAA0F,CAA56B,2BAAw8B,QAAQ,IAAI,CAAC,CAFtnrB,WAEkorB,CAAC,0BAA0B,UAAU,KAAK,MAAM,IAAI,iBAAiB,CAAC,CAFxsrB,WAEotrB,CAAC,kBAAkB,QAAQ,KAAK,YAAY,OAAO,WAAW,WAAW,SAAS,SAAS,UAAU,IAAI,6BAA6B,SAAS,OAAO,WAAW,IAAI,0BAA0B,MAAM,IAAI,8BAA8B,gBAAgB,QAAQ,CAAC,CAFp9rB,WAEg+rB,CAA3Q,iBAA6R,QAAQ,QAAQ,GAAG,SAAS,SAAS,iBAAiB,IAAI,8BAA8B,QAAQ,MAAM,QAAQ,GAAG,MAAI,EAAQ,KAAY,KAAU,EAAE,OAAO,IAAI,MAAM,KAAK,iBAAiB,IAAI,GAAG,UAAU,OAAO,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,CAF9usB,WAE0vsB,CAAC,sBAAsB,CAFjxsB,WAE6xsB,CAAC,uBAAuB,QAAQ,KAAK,YAAY,MAAM,CAAC,CAFr1sB,WAEi2sB,CAA/oJ,WAA2pJ,YAAY,IAAI,eAAe,IAAI,OAAO,KAAK,eAAe,GAAG,CAAC,CAF/6sB,WAE27sB,CAAzuJ,WAAqvJ,CAAjqJ,gBAAkrJ,CAAC,CAAlw4F,MAAyw4F,WAAW,GAAG,CAAC,CAF/+sB,WAE2/sB,CAAzyJ,WAAqzJ,CAAhz4F,MAAuz4F,OAAO,IAAI,wBAAwB,CAAC,CAFljtB,WAE8jtB,CAA52J,WAAw3J,CAAn34F,MAA034F,MAAM,CAFvltB,WAEmmtB,CAAj5J,WAA65J,CAAx54F,MAA+54F,OAAO,CAF7ntB,WAEyotB,CAAv7J,WAAm8J,CAA974F,MAAq84F,SAAS,OAAO,IAAI,yBAAyB,MAAM,IAAI,6BAA6B,UAAU,IAAI,2BAA2B,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAF90tB,UAEy1tB,CAAC,uBAAuB,MAAM,QAAQ,IAAI,CAAC,CAFp4tB,UAE+4tB,CAArD,uBAA6E,MAAM,CAF76tB,UAEw7tB,CAA9F,uBAAsH,GAAG,CAFn9tB,UAE89tB,CAApI,uBAA4J,GAAG,QAAQ,KAAK,CAAC,CAFvguB,UAEkhuB,CAAxL,uBAAgN,GAAG,SAAS,QAAQ,CAAC,CAF/juB,UAE0kuB,CAAhP,uBAAwQ,EAAE,QAAQ,QAAQ,GAAG,SAAS,SAAS,iBAAiB,IAAI,8BAA8B,QAAQ,MAAM,QAAQ,GAAG,MAAI,EAAQ,KAAY,KAAU,EAAE,OAAO,IAAI,MAAM,KAAK,iBAAiB,IAAI,GAAG,UAAU,OAAO,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,CAFh2uB,UAE22uB,CAAjhB,uBAAyiB,EAAE,OAAO,iBAAiB,OAAO,CAAC,CAFr6uB,UAEg7uB,CAAtlB,uBAA8mB,GAAG,6BAA6B,IAAI,qCAAqC,8BAA8B,IAAI,qCAAqC,OAAO,KAAK,WAAW,IAAI,6BAA6B,QAAQ,KAAK,cAAc,OAAO,YAAY,OAAO,gBAAgB,WAAW,WAAW,IAAI,CAAC,CAFhvvB,UAE2vvB,CAAj6B,uBAAy7B,EAAE,QAAQ,QAAQ,cAAc,CAAC,CAFpzvB,UAE+zvB,CAAr+B,uBAA6/B,EAAE,KAAK,CAA9mP,cAA6nP,QAAQ,MAAM,IAAI,QAAQ,gBAAgB,QAAQ,KAAK,wBAAwB,SAAS,SAAS,OAAO,KAAK,WAAW,EAAE,YAAY,UAAU,eAAe,UAAU,IAAI,2BAA2B,YAAY,IAAI,6BAA6B,MAAM,IAAI,4BAA4B,aAAa,KAAK,YAAY,CAAC,CAAC,CAFxqwB,UAEmrwB,CAAz1C,uBAAi3C,EAAE,CAA79P,cAA4+P,SAAS,SAAS,IAAI,EAAE,KAAK,CAAC,CAAC,CAF3vwB,UAEswwB,CAA56C,uBAAo8C,EAAE,CAAhjQ,aAA8jQ,CAAC,GAAG,aAAa,IAAI,CAAC,CAFp0wB,UAE+0wB,CAAr/C,uBAA6gD,EAAE,CAAznQ,aAAuoQ,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC,CAF74wB,WAEy5wB,CAAC,sBAAsB,CAFh7wB,WAE47wB,CAAC,YAAY,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAF/+wB,WAE2/wB,CAA9D,YAA2E,QAAQ,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAFjlxB,WAE6lxB,CAAnM,sBAA0N,QAAQ,UAAU,CAAC,CAAC,CAFxoxB,WAEopxB,CAAC,qBAAqB,CAF1qxB,WAEsrxB,CAAC,WAAW,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAFxuxB,WAEovxB,CAA7D,WAAyE,QAAQ,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAFz0xB,WAEq1xB,CAAhM,qBAAsN,QAAQ,UAAU,CAAC,CAAC,CAF/3xB,WAE24xB,CAAC,sBAAsB,CAFl6xB,WAE86xB,CAAC,YAAY,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAFj+xB,WAE6+xB,CAA9D,YAA2E,QAAQ,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAFnkyB,WAE+kyB,CAAnM,sBAA0N,QAAQ,UAAU,CAAC,CAAC,CAF1nyB,WAEsoyB,CAAC,qBAAqB,CAF5pyB,WAEwqyB,CAAC,WAAW,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAF3tyB,WAEuuyB,CAA9D,WAA0E,QAAQ,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAF7zyB,WAEy0yB,CAAlM,qBAAwN,QAAQ,UAAU,CAAC,CAAC,CAFn3yB,WAE+3yB,CAAC,sBAAsB,CAFt5yB,WAEk6yB,CAAC,YAAY,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAFt9yB,WAEk+yB,CAA/D,YAA4E,QAAQ,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAFzjzB,WAEqkzB,CAArM,sBAA4N,QAAQ,UAAU,CAAC,CAAC,CANvkjI,IAM4kjI,CAFrnzB,WAEiozB,EAAE,CAAlsR,aAAgtR,CAAC,CAN7h1H,IAMki1H,CAAC,CAAC,CANpi1H,KAM0i1H,CANtnjI,IAM2njI,CAFpqzB,WAEgrzB,EAAE,CAAjvR,aAA+vR,CAAC,CAN5k1H,IAMil1H,CAAC,CAAC,CANnl1H,KAMyl1H,YAAY,IAAI,CAAC,CANtrjI,IAM2rjI,CAFxtzB,aAEsuzB,KAAK,CAAhlT,aAA8lT,OAAO,YAAY,GAAG,CAAC,CANnvjI,IAMwvjI,CAFrxzB,aAEmyzB,CAAxoT,YAAqpT,QAAQ,aAAa,GAAG,CAAC,CAN5yjI,IAMizjI,CAA9mL,mBAAkoL,CAFhjuC,MAEujuC,CAAC,CAFxjuC,OAEgkuC,CANr1jI,IAM01jI,CAAvpL,mBAA2qL,CAAC,CANny1H,IAMwy1H,CAAC,CAAC,CAN1y1H,KAMgz1H,CAN53jI,IAMi4jI,CAA9pL,iBAAgrL,CAF9nuC,MAEqouC,CAAC,CAFtouC,OAE8ouC,CANn6jI,IAMw6jI,CAArsL,iBAAutL,CAAC,CAN/21H,IAMo31H,CAAC,CAAC,CANt31H,KAM431H,YAAY,IAAI,CAAC,CANz9jI,IAM89jI,CAA3xL,mBAA+yL,CAAC,CANv61H,IAM461H,CAFt+/H,UAEwggI,CAN1hkI,IAM+hkI,CAA70H,sBAAo2H,CAAC,CAN3+1H,KAMi/1H,CAN7jkI,IAMkkkI,CAA70H,uBAAq2H,CAAC,CAN/g2H,KAMu71H,MAAM,KAAK,OAAO,IAAI,CAA+F,CANxnkI,IAM6nkI,CAAx4H,sBAA+5H,CAAC,CAAn8H,sBAA09H,YAAY,IAAI,CAAC,CAN7rkI,IAMkskI,CAA78H,uBAAq+H,CAA5igG,MAAmjgG,YAAY,IAAI,CAAC,CANlvkI,IAMuvkI,CAAC,4BAA4B,aAAa,IAAI,CAAC,CAN11jI,GAM81jI,CAFn10B,WAE+10B,EAAE,CAAh6S,aAA86S,CAAC,CAN3v2H,IAMgw2H,CAAC,CAAC,CANlw2H,KAMww2H,CANx4jI,GAM44jI,CAFj40B,WAE640B,EAAE,CAA98S,aAA49S,CAAC,CANzy2H,IAM8y2H,CAAC,CAAC,CANhz2H,KAMsz2H,YAAY,IAAI,CAAC,CANv8jI,GAM28jI,CAFh80B,WAE480B,EAAE,CAA7gT,aAA2hT,CAAC,CAFl6gI,UAE66gI,CANn/jI,GAMu/jI,CAF5+0B,WAEw/0B,EAAE,CAAzjT,aAAukT,CAAC,CAF98gI,UAEy9gI,MAAM,KAAK,OAAO,KAAK,YAAY,IAAI,CAAC,CANvkkI,GAM2kkI,CAFpj1B,aAEkk1B,KAAK,CAA56U,aAA07U,OAAO,YAAY,GAAG,CAAC,CANnokI,GAMuokI,CAFhn1B,aAE8n1B,CAAn+U,YAAg/U,QAAQ,aAAa,GAAG,CAAC,CAN3rkI,GAM+rkI,CAAx8M,mBAA49M,CAF14vC,MAEi5vC,CAAC,CAFl5vC,OAE05vC,CANnukI,GAMuukI,CAAh/M,mBAAogN,CAAC,CAN5n3H,IAMio3H,CAAC,CAAC,CANno3H,KAMyo3H,CANzwkI,GAM6wkI,CAAt/M,iBAAwgN,CAFt9vC,MAE69vC,CAAC,CAF99vC,OAEs+vC,CAN/ykI,GAMmzkI,CAA5hN,iBAA8iN,CAAC,CANts3H,IAM2s3H,CAAC,CAAC,CAN7s3H,KAMmt3H,YAAY,IAAI,CAAC,CANp2kI,GAMw2kI,CAAjnN,mBAAqoN,CAAC,CAN7v3H,IAMkw3H,CAF5zhI,UAEu0hI,MAAM,KAAK,OAAO,KAAK,SAAS,OAAO,CAAC,CANr7kI,GAMy7kI,CAAlsN,mBAAstN,CAAC,CAN903H,IAMm13H,CAF74hI,SAEu5hI,CANxuwG,aAMsvwG,WAAW,EAAE,CAAC,CAAC,CAN1/kI,GAM8/kI,CAAxvJ,sBAA+wJ,CAAC,CANt53H,KAM453H,CAN5hlI,GAMgilI,CAAvvJ,uBAA+wJ,CAAC,CANz73H,KAM+73H,MAAM,KAAK,OAAO,IAAI,CAAC,CANtllI,GAM0llI,CAAjzJ,sBAAw0J,CAAC,CAA52J,sBAAm4J,YAAY,IAAI,CAAC,CAN1plI,GAM8plI,CAAr3J,uBAA64J,CAAp9hG,MAA29hG,YAAY,IAAI,CAAC,CAN9slI,GAMktlI,CAAt6B,4BAAm8B,aAAa,IAAI,CAAC,CANjwlI,GAMqwlI,CAAxiT,WAAojT,CAA3ngG,mBAA+ogG,UAAU,MAAM,GAAG,CAAC,MAAM,gBAAgB,KAAK,iCAAiC,KAAK,uBAAuB,IAAI,KAAK,yBAAyB,QAAQ,qBAAqB,IAAI,CAAC,CANj6mI,IAMs6mI,oBAAoB,KAAK,uBAAuB,KAAK,cAAc,KAAK,oBAAoB,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,iCAAiC,UAAU,uBAAuB,KAAK,+BAA+B,EAAE,KAAK,mCAAmC,IAAI,sCAAsC,EAAE,6BAA6B,IAAI,0BAA0B,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,0BAA0B,KAAK,wBAAwB,IAAI,CAAC,CANv6mI,GAM26mI,uBAAuB,KAAK,cAAc,KAAK,oBAAoB,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,uBAAuB,KAAK,+BAA+B,EAAE,KAAK,mCAAmC,IAAI,sCAAsC,EAAE,iCAAiC,KAAK,6BAA6B,IAAI,0BAA0B,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,CANhynI,GAMoynI,CANpynI,GAMwynI,CANn9nI,KAMy9nI,CAN9ynI,GAMkznI,CAAC,eAAe,kBAAkB,IAAI,2BAA2B,oBAAoB,IAAI,8BAA8B,0BAA0B,IAAI,oBAAoB,wBAAwB,IAAI,kBAAkB,CAAC,CAFz/0B,aAEug1B,QAAQ,IAAI,CAAC,CAF537B,IAEi47B,SAAS,SAAS,QAAQ,IAAI,CAAC,CAFh67B,IAEq67B,EAAE,wBAAwB,IAAI,wBAAwB,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,KAAK,KAAK,IAAI,iBAAiB,EAAE,IAAI,qBAAqB,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,MAAM,KAAK,IAAI,iBAAiB,EAAE,IAAI,sBAAsB,CAAC,CAAC,eAAe,CAAxM,aAAsN,CAAzG,cAAwH,IAAI,IAAI,gBAAgB,CAAC,CAAC,kBAAkB,CAAnT,gBAAoU,CAAzN,iBAA2O,OAAO,KAAK,IAAI,iBAAiB,EAAE,IAAI,uBAAuB,CAAC,CAApH,kBAAuI,CAAC,kBAAkB,CAAhO,eAAgP,KAAK,IAAI,UAAU,UAAW,KAAK,CAAC,CAAtE,kBAAyF,CAAjf,gBAAkgB,CAAtZ,iBAAwa,IAAI,IAAI,UAAU,WAAW,KAAK,CAAC,CAA/J,kBAAkL,IAAI,IAAI,KAAK,IAAI,UAAU,UAAW,MAAM,WAAW,KAAK,CAAC,CAAC,YAAY,EAAE,CAFpo9B,GAEwo9B,CAAC,EAAE,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,mBAAmB,MAAM,IAAI,eAAe,OAAO,IAAI,eAAe,WAAW,IAAI,qBAAqB,cAAc,IAAI,wBAAwB,SAAS,SAAS,oBAAoB,IAAI,QAAQ,KAAK,YAAY,OAAO,gBAAgB,OAAO,SAAS,OAAO,QAAQ,EAAE,MAAM,IAAI,oBAAoB,CAAC,CAFp+9B,GAEw+9B,CAAC,EAAE,EAAE,SAAS,SAAS,KAAK,IAAI,IAAI,IAAI,UAAU,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAFxl+B,GAE4l+B,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,QAAQ,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAnjB,YAAgkB,EAAE,cAAc,IAAI,wBAAwB,MAAM,IAAI,sBAAsB,OAAO,IAAI,qBAAqB,CAAC,CAA7qB,YAA0rB,QAAQ,KAAK,WAAW,OAAO,eAAe,KAAK,SAAS,QAAQ,CAAC,CAA/vB,YAA4wB,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,OAAO,MAAM,IAAI,QAAQ,CAAC,CAAC,CAApG,UAA+G,KAAK,CAApG,UAA+G,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAzM,WAAqN,CAA9+B,YAA2/B,WAAW,QAAQ,eAAe,IAAI,CAAC,CAAzQ,WAAqR,CAA9iC,YAA2jC,EAAE,QAAQ,EAAE,UAAU,WAAkB,GAAG,MAAM,YAAY,CAAC,CAAhW,WAA4W,CAAroC,YAAkpC,CAAC,cAAc,iBAAiB,IAAI,CAAC,CAA9Z,WAA0a,CAAnsC,YAAgtC,CAAC,cAAc,iBAAiB,GAAI,CAAC,CAA5d,WAAwe,CAAjwC,YAA8wC,CAAC,cAAc,iBAAiB,IAAK,CAAC,CAA3hB,WAAuiB,CAAh0C,YAA60C,CAAC,cAAc,iBAAiB,GAAI,CAAC,CAAzlB,WAAqmB,CAA93C,YAA24C,CAAC,cAAc,iBAAiB,IAAK,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,KAAK,IAAI,MAAM,IAAI,sBAAsB,YAAY,KAAK,GAAG,EAAE,IAAI,qBAAqB,EAAE,EAAE,CAAC,CAA7G,gBAA8H,OAAO,KAAK,cAAc,KAAK,eAAe,cAAc,CAAC,CAA3L,gBAA4M,EAAE,UAAU,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,iBAAiB,OAAO,MAAM,CAAC,CAAtR,gBAAuS,CAAC,CAAC,EAAE,cAAc,IAAI,CAAC,CAAlV,mBAAsW,IAAI,KAAK,WAAW,KAAK,eAAe,MAAM,CAAC,CAArZ,mBAAya,EAAE,UAAU,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,iBAAiB,OAAO,GAAG,CAAC,CAAjf,mBAAqgB,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,IAAI,IAAI,OAAO,IAAI,sBAAsB,WAAW,KAAK,GAAG,EAAE,IAAI,qBAAqB,EAAE,EAAE,CAAC,CAAhI,iBAAkJ,MAAM,KAAK,aAAa,KAAK,eAAe,WAAW,CAAC,CAA1M,iBAA4N,EAAE,UAAU,YAAY,GAAG,CAAC,CAAG,CAAC,GAAG,MAAM,IAAI,iBAAiB,MAAM,MAAM,CAAC,CAAvS,iBAAyT,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAA7T,kBAAgV,KAAK,KAAK,YAAY,IAAI,CAAC,CAA3W,kBAA8X,EAAE,UAAU,YAAY,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,iBAAiB,KAAK,MAAM,CAAC,CAAvc,kBAA0d,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,mBAAmB,KAAK,GAAG,IAAI,GAAG,MAAM,KAAK,OAAO,IAAI,CAAC,CAAzD,mBAA6E,EAAE,SAAS,QAAQ,CAAC,CAAjG,mBAAqH,CAAC,aAAa,KAAK,IAAI,YAAY,KAAK,GAAG,EAAE,IAAI,qBAAqB,EAAE,GAAG,OAAO,KAAK,cAAc,KAAK,UAAU,WAAW,MAAM,MAAM,IAAI,iBAAiB,OAAO,MAAM,CAAC,CAAnS,mBAAuT,CAAC,cAAc,KAAK,KAAK,WAAW,KAAK,GAAG,EAAE,IAAI,qBAAqB,EAAE,GAAG,IAAI,IAAI,YAAY,KAAK,UAAU,UAAW,MAAM,MAAM,IAAI,iBAAiB,KAAK,MAAM,CAAC,CAA9d,mBAAkf,CAAC,cAAc,KAAK,IAAI,YAAY,KAAK,GAAG,EAAE,IAAI,qBAAqB,EAAE,GAAG,IAAI,KAAK,WAAW,KAAK,UAAU,WAAW,KAAK,MAAM,IAAI,iBAAiB,OAAO,GAAG,CAAC,CAAvpB,mBAA2qB,CAAC,cAAc,MAAM,KAAK,WAAW,KAAK,GAAG,EAAE,IAAI,qBAAqB,EAAE,GAAG,IAAI,IAAI,aAAa,KAAK,UAAU,UAAW,KAAK,MAAM,IAAI,iBAAiB,MAAM,MAAM,CAAC,CAAz/E,UAAogF,cAAc,IAAI,wBAAwB,WAAW,IAAI,iBAAiB,CAAC,IAAI,mBAAmB,WAAW,IAAI,oBAAoB,CAAC,CAA1oF,SAAopF,CAAC,EAAE,WAAW,KAAK,WAAW,EAAE,WAAW,CAAC,CAAhtF,UAA2tF,CAA3sF,SAAqtF,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAApuF,UAA+uF,CAAC,iBAAiB,CAAjwF,SAA2wF,CAAC,EAAE,oBAAoB,IAAK,CAAC,CAAxD,gBAAyE,KAAK,CAAC,0BAA0B,QAAQ,IAAI,CAAC,CAAC,aAAa,MAAM,KAAK,UAAU,IAAI,uBAAuB,CAAC,CAA9D,YAA2E,CAAC,EAAE,MAAM,KAAK,OAAO,IAAI,uBAAuB,CAAC,CAA5H,YAAyI,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,uBAAuB,EAAE,EAAE,CAAC,CAAxL,aAAsM,CAAC,CAAC,CAAC,SAAS,aAAa,IAAI,uBAAuB,CAAC,CAA3P,YAAwQ,CAAC,EAAE,MAAM,cAAc,CAAC,CAAvF,SAAiG,WAAW,WAAW,UAAU,IAAI,kCAAkC,QAAQ,IAAI,gCAAgC,YAAY,IAAI,oCAAoC,eAAe,IAAI,uCAAuC,eAAe,IAAI,iCAAiC,CAAC,CAAC,iBAAiB,SAAS,iBAAiB,CAAC,CAAC,UAAU,SAAS,SAAS,IAAI,IAAI,QAAQ,IAAI,wBAAwB,cAAc,IAAI,8BAA8B,WAAW,IAAI,yBAAyB,MAAM,IAAI,2BAA2B,WAAW,IAAI,2BAA2B,YAAY,OAAO,UAAU,WAAW,MAAM,eAAe,KAAK,UAAU,IAAI,yBAAyB,CAAC,CAApoK,iBAAspK,CAA3W,UAAsX,CAA/oK,iBAAiqK,CAAxY,UAAmZ,CAA1pK,cAAyqK,CAAla,UAA6a,MAAM,KAAK,aAAa,GAAG,CAAC,CAA/1K,gBAAg3K,CAA1d,UAAqe,CAA12K,gBAA23K,CAAtf,UAAigB,CAAr3K,aAAm4K,CAA/gB,UAA0hB,KAAK,KAAK,YAAY,GAAG,CAAC,CANl+6G,OAM0+6G,CAAC,EAAE,CAA1vK,eAA0wK,CAN7/6G,OAMqg7G,CAAC,EAAE,CAA98K,aAA49K,CANth7G,OAM8h7G,CAAC,EAAE,CAA13K,cAAy4K,CANhj7G,OAMwj7G,CAAC,CAAt0K,eAAs1K,CANzk7G,OAMil7G,CAAC,CAAxhL,aAAsiL,CANhm7G,OAMwm7G,CAAC,CAAl8K,cAAi9K,CANho7G,MAMuo7G,CAAC,EAAE,CAA/4K,eAA+5K,CAN1p7G,MAMiq7G,CAAC,EAAE,CAAlmL,aAAgnL,CANlr7G,MAMyr7G,CAAC,EAAE,CAA7gL,cAA4hL,CAN3s7G,MAMkt7G,CAAC,CAAx9K,eAAw+K,CANnu7G,MAM0u7G,CAAC,CAAzqL,aAAurL,CANzv7G,MAMgw7G,CAAC,CAAllL,cAAimL,WAAW,KAAK,IAAI,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,CANr40I,IAM040I,CAFhgiH,eAEghiH,CAAC,EAAE,CAAhnL,eAAgoL,CAN760I,IAMk70I,CAFxiiH,eAEwjiH,CAAC,EAAE,CAAj1L,aAA+1L,CANn90I,IAMw90I,CAF9kiH,eAE8liH,CAAC,EAAE,CAA1wL,cAAyxL,CAN1/0I,IAM+/0I,CAFrniH,eAEqoiH,CAAC,CAAnuL,eAAmvL,CANhi1I,IAMqi1I,CAF3piH,eAE2qiH,CAAC,CAAl8L,aAAg9L,CANpk1I,IAMyk1I,CAF/riH,eAE+siH,CAAC,CAAz3L,cAAw4L,CAN7p0I,GAMiq0I,CAF9siH,cAE6tiH,CAAC,EAAE,CAAl1L,eAAk2L,CANns0I,GAMus0I,CAFpviH,cAEmwiH,CAAC,EAAE,CAAjjM,aAA+jM,CANvu0I,GAM2u0I,CAFxxiH,cAEuyiH,CAAC,EAAE,CAAx+L,cAAu/L,CAN5w0I,GAMgx0I,CAF7ziH,cAE40iH,CAAC,CAA/7L,eAA+8L,CANhz0I,GAMoz0I,CAFj2iH,cAEg3iH,CAAC,CAA5pM,aAA0qM,CANl10I,GAMs10I,CAFn4iH,cAEk5iH,CAAC,CAAjlM,cAAgmM,CAFl5iH,WAE85iH,CAAC,EAAE,CAAniM,eAAmjM,CAFj7iH,WAE67iH,CAAC,EAAE,CAA3vM,aAAywM,CAF98iH,WAE09iH,CAAC,EAAE,CAA3qM,cAA0rM,CAF5+iH,WAEw/iH,CAAC,CAA3nM,eAA2oM,CAFzgjH,WAEqhjH,CAAC,CAAj1M,aAA+1M,CAFpijH,WAEgjjH,CAAC,CAA/vM,cAA8wM,WAAW,IAAI,oBAAoB,CAAC,CANnh2I,IAMwh2I,CAF5rhH,kBAE+shH,CAAC,EAAE,CAA3rM,kBAA8sM,CANjk2I,IAMsk2I,CAF1uhH,kBAE6vhH,CAAC,EAAE,CAA1gN,gBAA2hN,CAN7m2I,IAMkn2I,CAFtxhH,kBAEyyhH,CAAC,EAAE,CAA38M,iBAA69M,CAN1p2I,IAM+p2I,CAFn0hH,kBAEs1hH,CAAC,CAAh0M,kBAAm1M,CANts2I,IAM2s2I,CAF/2hH,kBAEk4hH,CAAC,CAA7oN,gBAA8pN,CANhv2I,IAMqv2I,CAFz5hH,kBAE46hH,CAAC,CAA5kN,iBAA8lN,CAN/01I,GAMm11I,CAF36hH,iBAE67hH,CAAC,EAAE,CAAj8M,kBAAo9M,CAN331I,GAM+31I,CAFv9hH,iBAEy+hH,CAAC,EAAE,CAA9wN,gBAA+xN,CANr61I,GAMy61I,CAFjgiH,iBAEmhiH,CAAC,EAAE,CAA7sN,iBAA+tN,CANh91I,GAMo91I,CAF5iiH,iBAE8jiH,CAAC,CAAhkN,kBAAmlN,CAN1/1I,GAM8/1I,CAFtliH,iBAEwmiH,CAAC,CAA34N,gBAA45N,CANli2I,GAMsi2I,CAF9niH,iBAEgpiH,CAAC,CAAx0N,iBAA01N,CAFhpiH,cAE+piH,CAAC,EAAE,CAAtrN,kBAAysN,CAFrriH,cAEosiH,CAAC,EAAE,CAA5/N,gBAA6gO,CAFxtiH,cAEuuiH,CAAC,EAAE,CAAp7N,iBAAs8N,CAF5viH,cAE2wiH,CAAC,CAAhyN,kBAAmzN,CAF/xiH,cAE8yiH,CAAC,CAApmO,gBAAqnO,CAFh0iH,cAE+0iH,CAAC,CAA1hO,iBAA4iO,cAAc,IAAI,oBAAoB,CAAC,CANhx3I,IAMqx3I,CAF5hgH,YAEyigH,CAFt8iH,kBAEy9iH,CAAC,EAAE,CAAr8N,kBAAw9N,CAN303I,IAMg13I,CAFvlgH,YAEomgH,CAFjgjH,kBAEohjH,CAAC,EAAE,CAAjyO,gBAAkzO,CANp43I,IAMy43I,CAFhpgH,YAE6pgH,CAF1jjH,kBAE6kjH,CAAC,EAAE,CAA/uO,iBAAiwO,CAN973I,IAMm83I,CAF1sgH,YAEutgH,CAFpnjH,kBAEuojH,CAAC,CAAjnO,kBAAooO,CANv/3I,IAM4/3I,CAFnwgH,YAEgxgH,CAF7qjH,kBAEgsjH,CAAC,CAA38O,gBAA49O,CAN9i4I,IAMmj4I,CAF1zgH,YAEu0gH,CAFpujH,kBAEuvjH,CAAC,CAAv5O,iBAAy6O,CAN1p3I,GAM8p3I,CAFj3gH,YAE83gH,CAFnwjH,iBAEqxjH,CAAC,EAAE,CAAzxO,kBAA4yO,CANnt3I,GAMut3I,CAF16gH,YAEu7gH,CAF5zjH,iBAE80jH,CAAC,EAAE,CAAnnP,gBAAooP,CAN1w3I,GAM8w3I,CAFj+gH,YAE8+gH,CAFn3jH,iBAEq4jH,CAAC,EAAE,CAA/jP,iBAAilP,CANl03I,GAMs03I,CAFzhhH,YAEsihH,CAF36jH,iBAE67jH,CAAC,CAA/7O,kBAAk9O,CANz33I,GAM633I,CAFhlhH,YAE6lhH,CAFl+jH,iBAEo/jH,CAAC,CAAvxP,gBAAwyP,CAN963I,GAMk73I,CAFrohH,YAEkphH,CAFvhkH,iBAEyikH,CAAC,CAAjuP,iBAAmvP,CAFvrhH,YAEoshH,CAFtjkH,cAEqkkH,CAAC,EAAE,CAA5lP,kBAA+mP,CAFzuhH,YAEsvhH,CAFxmkH,cAEunkH,CAAC,EAAE,CAA/6P,gBAAg8P,CAFzxhH,YAEsyhH,CAFxpkH,cAEuqkH,CAAC,EAAE,CAAp3P,iBAAs4P,CAF10hH,YAEu1hH,CAFzskH,cAEwtkH,CAAC,CAA7uP,kBAAgwP,CAF13hH,YAEu4hH,CAFzvkH,cAEwwkH,CAAC,CAA9jQ,gBAA+kQ,CAFx6hH,YAEq7hH,CAFvykH,cAEszkH,CAAC,CAAjgQ,iBAAmhQ,cAAc,IAAI,yBAAyB,CAAC,CAN5v5I,IAMiw5I,CAFxgiH,YAEqhiH,CAFp4mH,eAEo5mH,CAAC,EAAE,CAA96P,kBAAi8P,CANpz5I,IAMyz5I,CAFhkiH,YAE6kiH,CAF57mH,eAE48mH,CAAC,EAAE,CAAvwQ,gBAAwxQ,CAN125I,IAM+25I,CAFtniH,YAEmoiH,CAFl/mH,eAEkgnH,CAAC,EAAE,CAAltQ,iBAAouQ,CANj65I,IAMs65I,CAF7qiH,YAE0riH,CAFzinH,eAEyjnH,CAAC,CAAjlQ,kBAAomQ,CANv95I,IAM495I,CAFnuiH,YAEgviH,CAF/lnH,eAE+mnH,CAAC,CAAx6Q,gBAAy7Q,CAN3g6I,IAMgh6I,CAFvxiH,YAEoyiH,CAFnpnH,eAEmqnH,CAAC,CAAj3Q,iBAAm4Q,CANpn5I,GAMwn5I,CAF30iH,YAEw1iH,CAFlrnH,cAEisnH,CAAC,EAAE,CAAhvQ,kBAAmwQ,CAN1q5I,GAM8q5I,CAFj4iH,YAE84iH,CAFxunH,cAEuvnH,CAAC,EAAE,CAAvkR,gBAAwlR,CAN9t5I,GAMku5I,CAFr7iH,YAEk8iH,CAF5xnH,cAE2ynH,CAAC,EAAE,CAAhhR,iBAAkiR,CANnx5I,GAMux5I,CAF1+iH,YAEu/iH,CAFj1nH,cAEg2nH,CAAC,CAA74Q,kBAAg6Q,CANv05I,GAM205I,CAF9hjH,YAE2ijH,CAFr4nH,cAEo5nH,CAAC,CAAluR,gBAAmvR,CANz35I,GAM635I,CAFhljH,YAE6ljH,CAFv7nH,cAEs8nH,CAAC,CAAzqR,iBAA2rR,CAF/njH,YAE4ojH,CAFt9nH,WAEk+nH,CAAC,EAAE,CAAjiR,kBAAojR,CAF9qjH,YAE2rjH,CAFrgoH,WAEihoH,CAAC,EAAE,CAAj3R,gBAAk4R,CAF3tjH,YAEwujH,CAFljoH,WAE8joH,CAAC,EAAE,CAAnzR,iBAAq0R,CAFzwjH,YAEsxjH,CAFhmoH,WAE4moH,CAAC,CAAzqR,kBAA4rR,CAFtzjH,YAEm0jH,CAF7ooH,WAEypoH,CAAC,CAAv/R,gBAAwgS,CAFj2jH,YAE82jH,CAFxroH,WAEosoH,CAAC,CAAv7R,iBAAy8R,WAAW,IAAI,yBAAyB,CAAC,CAAC,UAAU,CAAC,EAAE,CAA10R,kBAA61R,CAAhC,UAA2C,CAAC,EAAE,CAA5oS,gBAA6pS,CAA/D,UAA0E,CAAC,EAAE,CAAhkS,iBAAklS,CAA/F,UAA0G,CAAC,CAAx6R,kBAA27R,CAA9H,UAAyI,CAAC,CAAxuS,gBAAyvS,CAA3J,UAAsK,CAAC,CAA1pS,iBAA4qS,cAAc,IAAI,uBAAuB,CAAC,CANn57I,IAMw57I,CANt2iH,MAM62iH,CAAC,CAFthpH,eAEsipH,CAAC,EAAE,CAAtoS,eAAspS,CANn87I,IAMw87I,CANt5iH,MAM65iH,CAAC,CAFtkpH,eAEslpH,CAAC,EAAE,CAA/2S,aAA63S,CANj/7I,IAMs/7I,CANp8iH,MAM28iH,CAAC,CAFpnpH,eAEoopH,CAAC,EAAE,CAAhzS,cAA+zS,CANhi8I,IAMqi8I,CANn/iH,MAM0/iH,CAAC,CAFnqpH,eAEmrpH,CAAC,CAAjxS,eAAiyS,CAN9k8I,IAMml8I,CANjijH,MAMwijH,CAAC,CAFjtpH,eAEiupH,CAAC,CAAx/S,aAAsgT,CAN1n8I,IAM+n8I,CAN7kjH,MAMoljH,CAAC,CAF7vpH,eAE6wpH,CAAC,CAAv7S,cAAs8S,CAN3t7I,GAM+t7I,CANznjH,MAMgojH,CAAC,CAFzypH,eAEyzpH,CAAC,EAAE,CAAz5S,eAAy6S,CAN1w7I,GAM8w7I,CANxqjH,MAM+qjH,CAAC,CAFx1pH,eAEw2pH,CAAC,EAAE,CAAjoT,aAA+oT,CANvz7I,GAM2z7I,CANrtjH,MAM4tjH,CAAC,CAFr4pH,eAEq5pH,CAAC,EAAE,CAAjkT,cAAglT,CANr27I,GAMy27I,CANnwjH,MAM0wjH,CAAC,CAFn7pH,eAEm8pH,CAAC,CAAjiT,eAAijT,CANl57I,GAMs57I,CANhzjH,MAMuzjH,CAAC,CAFh+pH,eAEg/pH,CAAC,CAAvwT,aAAqxT,CAN777I,GAMi87I,CAN31jH,MAMk2jH,CAAC,CAF3gqH,eAE2hqH,CAAC,CAArsT,cAAotT,CANn4jH,MAM04jH,CAAC,CAF9gqH,WAE0hqH,CAAC,EAAE,CAA/pT,eAA+qT,CAN16jH,MAMi7jH,CAAC,CAFrjqH,WAEikqH,CAAC,EAAE,CAA/3T,aAA64T,CAN/8jH,MAMs9jH,CAAC,CAF1lqH,WAEsmqH,CAAC,EAAE,CAAvzT,cAAs0T,CANr/jH,MAM4/jH,CAAC,CAFhoqH,WAE4oqH,CAAC,CAA/wT,eAA+xT,CAN1hkH,MAMiikH,CAAC,CAFrqqH,WAEirqH,CAAC,CAA7+T,aAA2/T,CAN7jkH,MAMokkH,CAAC,CAFxsqH,WAEotqH,CAAC,CAAn6T,cAAk7T,WAAW,KAAK,IAAI,qBAAqB,EAAE,IAAI,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,CANjv9I,IAMsv9I,CANpskH,MAM2skH,CAAC,CAFp3qH,eAEo4qH,CAFrhmH,YAEkimH,CAAC,EAAE,CAAj/T,eAAigU,CAN9y9I,IAMmz9I,CANjwkH,MAMwwkH,CAAC,CAFj7qH,eAEi8qH,CAFllmH,YAE+lmH,CAAC,EAAE,CAAvuU,aAAqvU,CANz29I,IAM829I,CAN5zkH,MAMm0kH,CAAC,CAF5+qH,eAE4/qH,CAF7omH,YAE0pmH,CAAC,EAAE,CAArrU,cAAosU,CANr69I,IAM069I,CANx3kH,MAM+3kH,CAAC,CAFxirH,eAEwjrH,CAFzsmH,YAEstmH,CAAC,CAAnqU,eAAmrU,CANh+9I,IAMq+9I,CANn7kH,MAM07kH,CAAC,CAFnmrH,eAEmnrH,CAFpwmH,YAEixmH,CAAC,CAAv5U,aAAq6U,CANzh+I,IAM8h+I,CAN5+kH,MAMm/kH,CAAC,CAF5prH,eAE4qrH,CAF7zmH,YAE00mH,CAAC,CAAn2U,cAAk3U,CANvo9I,GAM2o9I,CANrilH,MAM4ilH,CAAC,CAFrtrH,eAEqurH,CAFt3mH,YAEm4mH,CAAC,EAAE,CAAl1U,eAAk2U,CANns9I,GAMus9I,CANjmlH,MAMwmlH,CAAC,CAFjxrH,eAEiyrH,CAFl7mH,YAE+7mH,CAAC,EAAE,CAAvkV,aAAqlV,CAN7v9I,GAMiw9I,CAN3plH,MAMkqlH,CAAC,CAF30rH,eAE21rH,CAF5+mH,YAEy/mH,CAAC,EAAE,CAAphV,cAAmiV,CANxz9I,GAM4z9I,CANttlH,MAM6tlH,CAAC,CAFt4rH,eAEs5rH,CAFvinH,YAEojnH,CAAC,CAAjgV,eAAihV,CANl39I,GAMs39I,CANhxlH,MAMuxlH,CAAC,CAFh8rH,eAEg9rH,CAFjmnH,YAE8mnH,CAAC,CAApvV,aAAkwV,CAN169I,GAM869I,CANx0lH,MAM+0lH,CAAC,CAFx/rH,eAEwgsH,CAFzpnH,YAEsqnH,CAAC,CAA/rV,cAA8sV,CAN73lH,MAMo4lH,CAAC,CAFxgsH,WAEohsH,CAF1snH,YAEutnH,CAAC,EAAE,CAAtqV,eAAsrV,CANj7lH,MAMw7lH,CAAC,CAF5jsH,WAEwksH,CAF9vnH,YAE2wnH,CAAC,EAAE,CAAn5V,aAAi6V,CANn+lH,MAM0+lH,CAAC,CAF9msH,WAE0nsH,CAFhznH,YAE6znH,CAAC,EAAE,CAAx1V,cAAu2V,CANthmH,MAM6hmH,CAAC,CAFjqsH,WAE6qsH,CAFn2nH,YAEg3nH,CAAC,CAA7zV,eAA60V,CANxkmH,MAM+kmH,CAAC,CAFntsH,WAE+tsH,CAFr5nH,YAEk6nH,CAAC,CAAxiW,aAAsjW,CANxnmH,MAM+nmH,CAAC,CAFnwsH,WAE+wsH,CAFr8nH,YAEk9nH,CAAC,CAA3+V,cAA0/V,WAAW,KAAK,IAAI,0BAA0B,EAAE,IAAI,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,CAN9z/I,IAMm0/I,CANzwmH,OAMixmH,CAAC,CAFl8sH,eAEk9sH,CAAC,EAAE,CAAljW,eAAkkW,CAN/2/I,IAMo3/I,CAN1zmH,OAMk0mH,CAAC,CAFn/sH,eAEmgtH,CAAC,EAAE,CAA5xW,aAA0yW,CAN95/I,IAMm6/I,CANz2mH,OAMi3mH,CAAC,CAFlitH,eAEkjtH,CAAC,EAAE,CAA9tW,cAA6uW,CAN98/I,IAMm9/I,CANz5mH,OAMi6mH,CAAC,CAFlltH,eAEkmtH,CAAC,CAAhsW,eAAgtW,CAN7//I,IAMkggJ,CANx8mH,OAMg9mH,CAAC,CAFjotH,eAEiptH,CAAC,CAAx6W,aAAs7W,CAN1igJ,IAM+igJ,CANr/mH,OAM6/mH,CAAC,CAF9qtH,eAE8rtH,CAAC,CAAx2W,cAAu3W,CAN9hnH,OAMsinH,CAAC,CAFlrtH,WAE8rtH,CAAC,EAAE,CAAn0W,eAAm1W,CANtknH,OAM8knH,CAAC,CAF1ttH,WAEsutH,CAAC,EAAE,CAApiX,aAAkjX,CAN5mnH,OAMonnH,CAAC,CAFhwtH,WAE4wtH,CAAC,EAAE,CAA79W,cAA4+W,CANnpnH,OAM2pnH,CAAC,CAFvytH,WAEmztH,CAAC,CAAt7W,eAAs8W,CANzrnH,OAMisnH,CAAC,CAF70tH,WAEy1tH,CAAC,CAArpX,aAAmqX,CAN7tnH,OAMqunH,CAAC,CAFj3tH,WAE63tH,CAAC,CAA5kX,cAA2lX,WAAW,KAAK,IAAI,qBAAqB,EAAE,IAAI,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,CAN15gJ,IAM+5gJ,CANr2nH,OAM62nH,CAAC,CAF9huH,eAE8iuH,CAF/rpH,YAE4spH,CAAC,EAAE,CAA3pX,eAA2qX,CANx9gJ,IAM69gJ,CANn6nH,OAM26nH,CAAC,CAF5luH,eAE4muH,CAF7vpH,YAE0wpH,CAAC,EAAE,CAAl5X,aAAg6X,CANphhJ,IAMyhhJ,CAN/9nH,OAMu+nH,CAAC,CAFxpuH,eAEwquH,CAFzzpH,YAEs0pH,CAAC,EAAE,CAAj2X,cAAg3X,CANjlhJ,IAMslhJ,CAN5hoH,OAMoioH,CAAC,CAFrtuH,eAEquuH,CAFt3pH,YAEm4pH,CAAC,CAAh1X,eAAg2X,CAN7ohJ,IAMkphJ,CANxloH,OAMgmoH,CAAC,CAFjxuH,eAEiyuH,CAFl7pH,YAE+7pH,CAAC,CAArkY,aAAmlY,CANvshJ,IAM4shJ,CANlpoH,OAM0poH,CAAC,CAF30uH,eAE21uH,CAF5+pH,YAEy/pH,CAAC,CAAlhY,cAAiiY,CANxsoH,OAMgtoH,CAAC,CAF51uH,WAEw2uH,CAF9hqH,YAE2iqH,CAAC,EAAE,CAA1/X,eAA0gY,CAN7voH,OAMqwoH,CAAC,CAFj5uH,WAE65uH,CAFnlqH,YAEgmqH,CAAC,EAAE,CAAxuY,aAAsvY,CANhzoH,OAMwzoH,CAAC,CAFp8uH,WAEg9uH,CAFtoqH,YAEmpqH,CAAC,EAAE,CAA9qY,cAA6rY,CANp2oH,OAM42oH,CAAC,CAFx/uH,WAEogvH,CAF1rqH,YAEusqH,CAAC,CAAppY,eAAoqY,CANv5oH,OAM+5oH,CAAC,CAF3ivH,WAEujvH,CAF7uqH,YAE0vqH,CAAC,CAAh4Y,aAA84Y,CANx8oH,OAMg9oH,CAAC,CAF5lvH,WAEwmvH,CAF9xqH,YAE2yqH,CAAC,CAAp0Y,cAAm1Y,WAAW,KAAK,IAAI,0BAA0B,EAAE,IAAI,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,CANvpiJ,IAM4piJ,CAAj7X,YAA87X,CAAC,CANz+sH,aAMu/sH,CANxriJ,IAM6riJ,CAFxk1C,GAE4k1C,CAAC,CAAC,CANlgtH,aAMghtH,oBAAoB,GAAG,iBAAiB,IAAI,yBAAyB,CAAC,IAAI,wBAAwB,CAAC,CANx2hJ,GAM42hJ,CAA7kY,YAA0lY,CAAC,CANrotH,aAMmptH,CANx4hJ,GAM44hJ,CAFnu1C,GAEuu1C,CAAC,CAAC,CAN7ptH,aAM2qtH,iBAAiB,IAAI,yBAAyB,CAAC,IAAI,iBAAiB,CAAC,IAAI,mBAAmB,CAAC,MAAM,kCAAkC,IAAI,kCAAkC,WAAW,CAAC,CANnijJ,IAMwijJ,sBAAsB,KAAK,kCAAkC,IAAI,mCAAmC,IAAI,+BAA+B,KAAK,mCAAmC,IAAI,4BAA4B,KAAK,mCAAmC,KAAK,wCAAwC,KAAK,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,sCAAsC,IAAI,0CAA0C,KAAK,6CAA6C,EAAE,mDAAmD,EAAE,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,gCAAgC,KAAK,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,8BAA8B,OAAO,CAAC,CANrvkJ,IAM0vkJ,CANz9jJ,KAM+9jJ,CANhwkJ,GAMowkJ,CANn+jJ,KAMy+jJ,iCAAiC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,gCAAgC,KAAK,iCAAiC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,8BAA8B,OAAO,CAAC,CAN7/jJ,GAMigkJ,4BAA4B,YAAY,sBAAsB,KAAK,kCAAkC,IAAI,mCAAmC,IAAI,+BAA+B,KAAK,mCAAmC,KAAK,4BAA4B,KAAK,mCAAmC,KAAK,0CAA0C,KAAK,wCAAwC,KAAK,+CAA+C,KAAK,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,sCAAsC,KAAK,EAAE,0CAA0C,KAAK,6CAA6C,KAAK,mDAAmD,KAAK,wBAAwB,WAAW,CAAC,CANrtlJ,GAMytlJ,CANztlJ,GAM6tlJ,CANx4lJ,KAM84lJ,CANnulJ,GAMuulJ,CAAC,eAAe,0BAA0B,IAAI,oBAAoB,iCAAiC,IAAI,oBAAoB,wCAAwC,IAAI,oBAAoB,iCAAiC,IAAI,4BAA4B,8BAA8B,IAAI,6BAA6B,gCAAgC,IAAI,mBAAmB,CAAC,CAF76uD,UAEw7uD,0BAA0B,IAAI,2BAA2B,MAAM,KAAK,SAAS,SAAS,QAAQ,IAAI,OAAO,IAAI,uBAAuB,iBAAiB,IAAI,uBAAuB,CAAC,IAAI,oBAAoB,CAAC,CAN19mJ,KAMg+mJ,CAFxovD,UAEmpvD,0BAA0B,IAAI,0BAA0B,CAAC,CAF5svD,UAEutvD,KAAK,CAAC,YAAY,4BAA4B,QAAQ,IAAI,CAAC,UAAU,CAAC,CAAC,uBAAuB,EAAE,KAAK,OAAO,GAAG,CAAC,eAAe,EAAE,KAAK,QAAQ,CANjwqH,qBAMuxqH,CAF33vD,UAEs4vD,iBAAiB,KAAK,IAAI,2BAA2B,CAAC,IAAI,wBAAwB,CAAC,IAAI,gCAAgC,wBAAwB,SAAS,MAAM,KAAK,IAAI,6BAA6B,gBAAgB,SAAS,MAAM,KAAK,IAAI,4BAA4B,CAAC,CAAC,CANzwoJ,IAM8woJ,CANnupH,UAM8upH,CAFhqwD,UAE2qwD,iBAAiB,YAAY,wBAAwB,KAAK,gBAAgB,IAAI,CAAC,CANn3oJ,IAMw3oJ,CAN70pH,UAMw1pH,CAF1wwD,SAEoxwD,OAAO,QAAQ,cAAc,CAAC,CAFlzwD,SAE4zwD,CANjzsH,UAM4zsH,OAAO,QAAQ,cAAc,CAAC,CAFr2wD,SAE+2wD,OAAO,QAAQ,GAAG,SAAS,SAAS,iBAAiB,IAAI,2BAA2B,CAAC,IAAI,yBAAyB,QAAQ,MAAM,QAAQ,GAAG,MAAI,KAAW,KAAY,EAAO,EAAE,OAAO,IAAI,MAAM,KAAK,iBAAiB,IAAI,KAAK,UAAU,OAAO,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,CANxn3I,IAM6n3I,CAAC,CAF7oxD,SAEupxD,KAAK,CAAC,kBAAkB,QAAQ,GAAG,CAAC,CAF3rxD,UAEssxD,KAAK,CAAC,aAAa,CAFztxD,UAEouxD,KAAK,CAAC,WAAW,WAAW,WAAW,MAAM,KAAK,OAAO,KAAK,QAAQ,MAAM,OAAO,IAAI,mCAAmC,MAAM,IAAI,mCAAmC,mBAAmB,KAAK,gBAAgB,KAAK,WAAW,KAAK,YAAY,QAAQ,YAAY,IAAI,MAAM,IAAI,iCAAiC,UAAU,IAAI,gCAAgC,iBAAiB,IAAI,+BAA+B,cAAc,IAAI,oCAAoC,SAAS,SAlBhptJ,QAkBiqtJ,EAAE,aAAa,KAAK,IAAI,yCAAyC,EAAE,IAAI,uCAAuC,CAAC,MAAM,cAAc,KAAK,IAAI,yCAAyC,EAAE,IAAI,wCAAwC,CAAC,KAAK,CAAC,CAFn7yD,UAE87yD,KAAK,CAAC,YAAY,mBAAoB,CAFp+yD,UAE++yD,KAAK,CAAC,UAAU,mBAAmB,MAAM,IAAI,kCAAkC,QAAQ,CAAC,CAAC,CAFxkzD,UAEmlzD,KAAK,CAAC,YAAY,cAAc,CAFnnzD,UAE8nzD,KAAK,CAAC,UAAU,cAAc,MAAM,IAAI,kCAAkC,QAAQ,CAAC,CAAC,CAFltzD,UAE6tzD,KAAK,+BAA+B,mBAAmB,KAAK,WAAW,IAAI,CAAC,CAFzyzD,UAEozzD,CAAC,qBAAqB,YAAY,EAAE,MAAM,KAAK,OAAO,IAAI,6BAA6B,SAAS,QAAQ,CAAC,CAF75zD,UAEw6zD,EAAE,MAAM,IAAI,yBAAyB,CAAC,IAAI,oBAAoB,CAAC,IAAI,mBAAmB,CAAC,CANh/5I,IAMq/5I,CAAC,CAFrg0D,SAE+g0D,KAAK,CAAv3C,kBAA04C,SAAS,SAAS,KAAK,EAAE,IAAI,CAAC,CAAC,CANxz5I,aAMs05I,CAFpl0D,SAE8l0D,KAAK,CAAt8C,kBAAy9C,cAAc,IAAI,8CAA8C,OAAO,IAAI,uCAAuC,MAAM,KAAK,WAAW,IAAI,0CAA0C,CAAC,CAN/h6I,aAM6i6I,CAF3z0D,SAEq00D,KAAK,CAA7qD,kBAAgsD,CAAC,gBAAgB,CANhm6I,aAM8m6I,CAF530D,SAEs40D,KAAK,CAA9uD,kBAAiwD,KAAK,CAAC,aAAa,CANnq6I,aAMir6I,CAF/70D,SAEy80D,KAAK,CAAjzD,kBAAo0D,KAAK,CAAC,WAAW,cAAc,IAAI,kDAAkD,CAAC,IAAI,oCAAoC,CAAC,CAFhm1D,UAE2m1D,CAAlonH,mBAAspnH,MAAM,IAAI,uCAAuC,CAAC,IAAI,+BAA+B,CAAC,CAAC,qBAAqB,+BAA+B,IAAI,uBAAuB,SAAS,SAAS,oBAAoB,IAAI,eAAe,IAAI,CAAC,CAN160H,OAMk70H,CAArJ,qBAA2K,WAAW,EAAE,CAAC,CAAC,CANv90H,OAM+90H,CAAlM,oBAAuN,OAAO,QAAQ,cAAc,CAAC,CANlh1H,OAM0h1H,CAFn91D,SAE691D,CAAvQ,qBAA6R,+BAA+B,KAAK,IAAI,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,CANjp1H,OAMyp1H,CAFll2D,SAE4l2D,CAAtY,qBAA4Z,CAApxB,gBAAqyB,IAAI,IAAI,oBAAoB,OAAO,KAAK,KAAK,EAAE,IAAI,oBAAoB,CAAC,CAFnt+H,QAE4t+H,CAFpt2D,SAE8t2D,CAAxgB,qBAA8hB,+BAA+B,IAAI,oBAAoB,CAAC,CAN13vH,UAMq4vH,CAFvz2D,SAEi02D,CAA3mB,qBAAioB,+BAA+B,IAAI,sBAAsB,CAAC,CAFjx3H,aAE+x3H,CAF/52D,SAEy62D,CAAntB,qBAAyuB,+BAA+B,IAAI,yBAAyB,CAAC,CAA9pC,gBAA+qC,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,QAAQ,KAAK,YAAY,OAAO,WAAW,WAAW,QAAQ,EAAE,KAAK,IAAI,oCAAoC,EAAE,IAAI,uBAAuB,EAAE,KAAK,IAAI,mCAAmC,EAAE,IAAI,qBAAqB,CAAC,CAAC,yBAAyB,OAAO,QAAQ,eAAe,KAAK,mBAAmB,KAAK,gBAAgB,KAAK,WAAW,KAAK,WAAW,EAAE,EAAE,OAAO,KAAK,QAAQ,EAlB54yJ,QAkBs5yJ,EAlBt5yJ,OAkB+5yJ,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,eAAe,KAAK,oBAAoB,OAAO,kBAAkB,SAAS,CAAC,CAA1F,cAAyG,OAAO,MAAM,IAAI,kCAAkC,YAAY,sBAAsB,YAAY,IAAI,WAAW,OAAO,YAAY,EAAE,eAAe,OAAO,eAAe,KAAK,YAAY,OAAO,UAAU,OAAO,UAAU,IAAI,uBAAuB,YAAY,eAAe,mBAAmB,wBAAwB,UAAU,sBAAsB,OAAO,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,UAAU,IAAI,CAAC,CAAC,mBAAmB,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,QAAQ,IAAI,QAAQ,EAAE,eAAe,KAAK,oBAAoB,IAAI,UAAU,WAAgB,GAAG,WAAW,IAAI,iCAAiC,CAAC,CAAzN,kBAA4O,CAAC,sBAAsB,QAAQ,EAAE,eAAe,IAAI,CAAC,CANvg/I,YAMoh/I,CAAC,CAA/S,mBAAmU,SAAS,KAAK,CAAC,CAAC,oBAAoB,QAAQ,IAAI,CAAC,CAAC,oBAAoB,CAFx21G,KAE821G,CAA1B,oBAA+C,CAFn41G,KAEy41G,EAAE,CAAvD,oBAA4E,CAFh61G,IAEq61G,CAAC,EAAE,CAApF,oBAAyG,QAAQ,cAAc,CAAC,CANhj5H,MAMuj5H,CAFplgJ,gDAE2qgJ,CAN9o5H,MAMqp5H,CALri1J,kCAKw/0J,oCAAoC,CAAC,CAAiF,CAN9t5H,MAMqu5H,CALrn1J,kCAKwp1J,CAN1q2H,UAMqr2H,CANnx5H,MAM0x5H,CAL1q1J,kCAK6s1J,CAN/n2H,YAM4o2H,CAN105H,MAMi15H,CALju1J,kCAKow1J,CAN7zzH,iBAMu2zH,CAN955H,MAMq65H,CAAC,kCAAkC,CAN122H,UAMq32H,CANn95H,MAM095H,CAApD,kCAAuF,CAN/z2H,YAM402H,CAN1g6H,MAMih6H,CAA3G,kCAA8I,CAN7/zH,iBAM+0zH,oBAAoB,GAAG,CAAiM,CANzwgJ,YAMsxgJ,CAL3/1J,kCAK8h2J,OAAO,KAAK,KAAK,EAAE,IAAI,iCAAiC,UAAU,WAAW,KAAK,GAAG,EAAE,IAAI,kCAAkC,oBAAoB,IAAI,oBAAoB,SAAS,CAAC,CAN5+gJ,YAMy/gJ,CAAxa,kCAA2c,oBAAoB,GAAG,CAAC,CANj46H,OAMy46H,CAAC,CAN5zhJ,IAMi0hJ,KAAK,CAF1uxJ,UAEqvxJ,CAAC,CAFj27D,UAE427D,CANn76H,MAM076H,CAAC,CANr2hJ,IAM02hJ,KAAK,CAFnxxJ,UAE8xxJ,CAAC,CAF147D,UAEq57D,CANt4hJ,IAM24hJ,CAAC,CANl+6H,MAMy+6H,CAAC,CAFn67D,UAE867D,IAAI,KAAK,IAAI,oBAAoB,EAAE,IAAI,oBAAoB,CAAC,CANzi7H,OAMij7H,CAAC,CAFhqyJ,sBAEuryJ,KAAK,CAFp6xJ,WAEg7xJ,CAF3h8D,UAEsi8D,CAN7m7H,MAMon7H,CAAC,CAF3tyJ,sBAEkvyJ,KAAK,CAF/9xJ,WAE2+xJ,CAFtl8D,UAEim8D,CAF9wyJ,uBAEsyyJ,CANhs7H,MAMus7H,CAAC,EAAE,CAFno8D,UAE8o8D,CAF3zyJ,uBAEm1yJ,CAN7u7H,MAMov7H,CAAC,CAF9q8D,UAEyr8D,IAAI,KAAK,IAAI,oBAAoB,EAAE,IAAI,gCAAgC,EAAE,IAAI,qBAAqB,UAAU,YAAY,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,qCAAqC,EAAE,IAAI,gCAAgC,CAAC,EAAE,CAAC,CAN/87H,OAMu97H,CAAC,CAFtkzJ,sBAE6lzJ,KAAK,CAF10yJ,WAEs1yJ,CANnriJ,aAMisiJ,CAF/88D,UAE098D,CAFvozJ,uBAE+pzJ,CANpuiJ,aAMkviJ,CAFhg9D,UAE2g9D,IAAI,EAAE,UAAU,IAAI,CAAC,CAFhi9D,SAE0i9D,CAAC,EAAE,2BAA2B,IAAI,sBAAsB,CAAC,CAN5t1J,IAMiu1J,CANzljJ,IAM8ljJ,CAAC,CAF71iI,eAE62iI,CAAC,CAF/n9D,UAE0o9D,CANvz0J,GAM2z0J,CAN/njJ,IAMoojJ,CAAC,CAF92iI,cAE63iI,CAAC,CAFpq9D,UAE+q9D,CANhqjJ,IAMqqjJ,CAAC,CAF/3iI,WAE24iI,CAAC,CAFls9D,UAE6s9D,IAAI,IAAI,oBAAoB,CAAC,CANn21J,IAMw21J,CANhujJ,IAMqujJ,CAAC,CAFrn+H,YAEko+H,CAFj/iI,eAEigjI,CAAC,CAFnx9D,UAE8x9D,CAN380J,GAM+80J,CANnxjJ,IAMwxjJ,CAAC,CAFxq+H,YAEqr+H,CAF/gjI,cAE8hjI,CAAC,CAFr09D,UAEg19D,CANj0jJ,IAMs0jJ,CAAC,CAFtt+H,YAEmu+H,CAF7ijI,WAEyjjI,CAAC,CAFh39D,UAE239D,IAAI,IAAI,yBAAyB,CAAC,CANth2J,IAM2h2J,CANn5jJ,IAMw5jJ,CAAC,CAN/+8H,MAMs/8H,CAAC,CAF/pjI,eAE+qjI,CAAC,CAFj89D,UAE489D,CANzn1J,GAM6n1J,CANj8jJ,IAMs8jJ,CAAC,CAN7h9H,MAMoi9H,CAAC,CAFxrjI,cAEusjI,CAAC,CAF9+9D,UAEy/9D,CAN1+jJ,IAM++jJ,CAAC,CANtk9H,MAM6k9H,CAAC,CAFjtjI,WAE6tjI,CAAC,CAFph+D,UAE+h+D,IAAI,KAAK,IAAI,oBAAoB,EAAE,IAAI,qBAAqB,EAAE,IAAI,oBAAoB,CAAC,CAN/u2J,IAMov2J,CAN5mkJ,IAMinkJ,CAAC,CANxs9H,MAM+s9H,CAAC,CAFzg/H,YAEsh/H,CAFr4jI,eAEq5jI,CAAC,CAFvq+D,UAEkr+D,CAN/11J,GAMm21J,CANvqkJ,IAM4qkJ,CAAC,CANnw9H,MAM0w9H,CAAC,CAFpk/H,YAEil/H,CAF36jI,cAE07jI,CAAC,CAFju+D,UAE4u+D,CAN7tkJ,IAMkukJ,CAAC,CANzz9H,MAMg09H,CAAC,CAF1n/H,YAEuo/H,CAFj9jI,WAE69jI,CAAC,CAFpx+D,UAE+x+D,IAAI,KAAK,IAAI,oBAAoB,EAAE,IAAI,0BAA0B,EAAE,IAAI,oBAAoB,CAAC,CAF33+D,SAEq4+D,CAAxuN,iBAA0vN,MAAM,KAAK,OAAO,KAAK,iBAAiB,YAAY,iBAAiB,IAAI,CAAC,CAFj++D,SAE2++D,CAA90N,gBAA+1N,OAAO,CAFng/D,SAE6g/D,CAAh3N,gBAAi4N,QAAQ,QAAQ,cAAc,CAAC,CAF7j/D,SAEuk/D,CAA16N,iBAA47N,CAApyL,qBAA0zL,OAAO,IAAI,kCAAkC,CAAC,IAAI,6BAA6B,CAAC,CAF/r/D,SAEys/D,CAA5iO,iBAA8jO,CAA73K,gBAlBtzvJ,QAkB4s6J,EAAE,SAAS,OAAO,MAAM,KAAK,OAAO,IAAI,CAAC,CAF7x/D,SAEuy/D,CAA1oO,iBAA4pO,KAAK,CAAC,aAAa,CAF50/D,SAEs1/D,CAAzrO,iBAA2sO,KAAK,CAAC,WAAW,UAAU,IAAI,qCAAqC,EAAE,IAAI,iCAAiC,cAAc,IAAI,yCAAyC,CAAC,IAAI,qCAAqC,aAAa,KAAK,IAAI,8CAA8C,CAAC,IAAI,0CAA0C,EAAE,IAAI,uCAAuC,CAAC,MAAM,cAAc,KAAK,IAAI,8CAA8C,CAAC,IAAI,0CAA0C,EAAE,IAAI,wCAAwC,CAAC,KAAK,CAAC,CANjg5J,IAMsg5J,CAF74gE,UAEw5gE,KAAK,CAAC,aAAa,CANpi5J,IAMyi5J,CAFh7gE,UAE27gE,KAAK,CAAC,WAAW,QAAQ,EAAE,CAAC,CANhl5J,IAMql5J,CAF59gE,UAEu+gE,CAA9/yH,mBAAkhzH,QAAQ,GAAG,MAAM,GAAG,CAAC,CANzo5J,IAM8o5J,CAAtjJ,eAAskJ,MAAM,KAAK,OAAO,KAAK,SAAS,SAAS,IAAI,IAAI,WAAW,KAAK,QAAQ,GAAG,KAAK,GAAG,CAAC,CANnv5J,IAMwv5J,CAAhqJ,cAA+qJ,OAAO,QAAQ,aAAa,YAAY,IAAI,CAAC,CANpz5J,IAMyz5J,CAAx6J,yBAAk8J,UAAU,KAAK,YAAY,EAAE,UAAU,WAAgB,GAAG,oBAAoB,IAAI,MAAM,IAAI,yBAAyB,CAAC,IAAI,oBAAoB,CAAC,IAAI,oBAAoB,QAAQ,IAAI,CAAC,CANvg6J,IAM4g6J,CAA3nK,wBAAopK,CANp2kI,aAMk3kI,oBAAoB,GAAG,QAAQ,YAAY,CAAC,CAN/l6J,IAMom6J,CAAC,kBAAkB,CAAtuK,yBAAgwK,eAAe,KAAK,QAAQ,EAAE,YAAY,GAAG,CAAC,CAN/r6J,IAMos6J,CAF3kiE,SAEqliE,KAAK,CAA9G,mBAAkI,CAAt1K,yBAAg3K,oBAAoB,aAAa,CAAC,CANny6J,IAMwy6J,CAAz9M,qBAA++M,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,UAAU,WAAgB,GAAG,SAAS,MAAM,CAAC,CAN156J,IAM+56J,CAAhlN,qBAAsmN,CAApiL,yBAA8jL,YAAY,IAAI,QAAQ,EAAE,QAAQ,KAAK,CAAC,CANv/6J,IAM4/6J,CAA7qN,qBAAmsN,CAA3jO,gBAA4kO,OAAO,IAAI,+BAA+B,CAAC,CAN9k7J,IAMml7J,CANjiiI,MAMwiiI,CAAloI,kCAAqqI,CAN7++H,UAMw/+H,CANxo7J,IAM6o7J,CAN3liI,MAMkmiI,CALl/9J,kCAKqh+J,CANvi/H,UAMkj/H,oBAAoB,SAAS,CAAC,OAAO,CAAC,CANxu7J,IAM6u7J,CAN3riI,MAMksiI,CAA5xI,kCAA+zI,CAN1/gI,KAMgghI,CAN7x7J,IAMky7J,CANhviI,MAMuviI,CAAj1I,kCAAo3I,CAN5r/H,UAMus/H,CANv17J,IAM417J,CAN1yiI,MAMiziI,CAA34I,kCAA86I,CAN3lhI,MAMkmhI,CAN747J,IAMk57J,CANh2iI,MAMu2iI,CAAj8I,kCAAo+I,CANlohI,MAMyohI,CANn87J,IAMw87J,CANt5iI,MAM65iI,CAL7y+J,kCAKg1+J,CANrthI,KAM2thI,CANx/7J,IAM6/7J,CAN38iI,MAMk9iI,CALl2+J,kCAKq4+J,CANv5/H,UAMk6/H,CANlj8J,IAMuj8J,CANrgjI,MAM4gjI,CAL55+J,kCAK+7+J,CANtzhI,MAM6zhI,CANxm8J,IAM6m8J,CAN3jjI,MAMkkjI,CALl9+J,kCAKq/+J,CAN71hI,MAMo2hI,oBAAoB,GAAG,CAAC,CANtr8J,IAM2r8J,CANzojI,MAMgpjI,CALhi/J,kCAKmk/J,CANx8hI,KAM88hI,CAN3u8J,IAMgv8J,CAN9rjI,MAMqsjI,CALrl/J,kCAKwn/J,CAN/+hI,MAMs/hI,CANjy8J,IAMsy8J,CANpvjI,MAM2vjI,CAL3o/J,kCAK8q/J,CANthiI,MAM6hiI,CANv18J,IAM418J,CAN1yjI,MAMizjI,CAF90qJ,gDAE+3qJ,CANvniI,KAM6niI,CAN158J,IAM+58J,CAN72jI,MAMo3jI,CAFj5qJ,gDAEk8qJ,CAN5qiI,MAMmriI,CAN998J,IAMm+8J,CANj7jI,MAMw7jI,CAFr9qJ,gDAEsgrJ,CANjuiI,MAMwuiI,UAAU,WAAW,KAAK,GAAG,EAAE,IAAI,sBAAsB,QAAQ,WAAW,CAAC,CAN/m9J,IAMon9J,CAAryP,oBAA0zP,CAApiD,kBAAujD,QAAQ,EAAE,OAAO,IAAI,gCAAgC,eAAe,IAAI,CAAC,CANzx8J,GAM6x8J,CAAx1N,yBAAk3N,CANvz8J,GAM2z8J,CAA/qN,eAA+rN,SAAS,SAAS,IAAI,IAAI,oBAAoB,GAAG,CAAC,CAN738J,GAMi48J,CAArvN,eAAqwN,MAAM,KAAK,OAAO,KAAK,KAAK,EAAE,IAAI,EAAE,QAAQ,KAAK,YAAY,OAAO,gBAAgB,OAAO,KAAK,IAAI,oBAAoB,CAAC,CAN1g9J,GAM8g9J,CAAl4N,cAAi5N,OAAO,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,YAAY,GAAG,CAAC,CAN/l9J,GAMmm9J,CAA9pO,yBAAwrO,MAAM,KAAK,OAAO,KAAK,UAAU,OAAO,QAAQ,MAAM,IAAI,UAAU,YAAY,QAAQ,MAAM,WAAW,MAAM,MAAM,IAAI,yBAAyB,CAAC,IAAI,oBAAoB,CAAC,IAAI,oBAAoB,KAAK,KAAK,IAAI,mCAAmC,EAAE,IAAI,qBAAqB,CAAC,CAN949J,GAMk59J,CAA78O,wBAAs+O,OAAO,YAAY,sBAAsB,YAAY,IAAI,WAAW,OAAO,YAAY,EAAE,eAAe,OAAO,eAAe,KAAK,YAAY,OAAO,UAAU,OAAO,UAAU,IAAI,uBAAuB,YAAY,eAAe,mBAAmB,wBAAwB,UAAU,sBAAsB,OAAO,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,YAAY,KAAK,QAAQ,eAAe,CAAC,CANn1+J,GAMu1+J,CAA9rF,iBAAgtF,KAAK,CAAC,qCAAqC,CAA/8P,yBAAy+P,UAAU,OAAO,GAAM,MAAM,GAAG,eAAe,KAAK,QAAQ,CAAC,CAAC,CAN5++J,GAMg/+J,CAAv1F,iBAAy2F,KAAK,CAAxJ,qCAA8L,CAAj6P,eAAi7P,QAAQ,EAAE,UAAU,OAAO,OAAO,MAAM,GAAG,CAAC,CANzm/J,GAM6m/J,CAFh8nE,UAE28nE,wCAAwC,IAAI,CAAC,CANrq/J,GAMyq/J,CAF5/nE,UAEugoE,CAA9h6H,mBAAkj6H,MAAM,KAAK,OAAO,KAAK,WAAW,MAAM,MAAM,CAAC,CAAC,CANxv/J,GAM4v/J,CAF/koE,UAE0loE,CAAjn6H,kBAAoo6H,OAAO,YAAY,KAAK,QAAQ,kBAAkB,QAAQ,CAAC,CAAC,CANt1/J,GAM01/J,CAF7qoE,UAEwroE,CAA/s6H,kBAAku6H,QAAQ,QAAQ,IAAI,CAAC,CAN74/J,GAMi5/J,CAAvkX,iBAAylX,wCAAwC,IAAI,CAAC,CANh9/J,GAMo9/J,CANxxuJ,IAM6xuJ,CAAC,CAF7yoE,UAEwzoE,CANr+/J,GAMy+/J,CAAtmT,qBAA4nT,CAN///J,GAMmggK,CANp6hI,UAM+6hI,CAFj2oE,UAE42oE,wCAAwC,IAAI,CAAC,CANtkgK,GAM0kgK,CAN94uJ,IAMm5uJ,CAAC,CAFn6oE,UAE86oE,CAAtpR,yBAAgrR,CANrngK,GAMyngK,CAAtvT,qBAA4wT,CAA1sR,yBAAouR,CANzqgK,GAM6qgK,CAN9kiI,UAMyliI,CAF3gpE,UAEshpE,CAA9vR,yBAAwxR,KAAK,KAAK,IAAI,mCAAmC,EAAE,IAAI,qBAAqB,CAAC,CAN1ygK,GAM8ygK,CANlnvJ,IAMunvJ,CAAC,CAFvopE,UAEkppE,CAAnrR,eAAmsR,CAN/0gK,GAMm1gK,CAAh9T,qBAAs+T,CAA7tR,eAA6uR,CANz3gK,GAM63gK,CAN9xiI,UAMyyiI,CAF3tpE,UAEsupE,CAAvwR,eAAuxR,KAAK,IAAI,oBAAoB,CAAC,CANj8gK,GAMq8gK,CAAlkU,qBAAwlU,kCAAkC,IAAI,mCAAmC,IAAI,OAAO,IAAI,gCAAgC,QAAQ,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,iCAAiC,MAAM,KAAK,IAAI,iCAAiC,WAAW,KAAK,IAAI,gCAAgC,EAAE,GAAG,EAAE,GAAG,UAAU,WAAoB,GAAK,iBAAiB,IAAI,+BAA+B,KAAK,KAAK,YAAY,KAAK,IAAI,gCAAgC,EAAE,GAAG,CAAC,CANx6hK,GAM46hK,CAAziV,oBAA8jV,CAAxyI,kBAA2zI,MAAM,KAlBrwlK,cAkBwxlK,EAAE,QAAQ,EAAE,eAAe,KAAK,WAAW,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,MAAM,iCAAiC,IAAK,mCAAmC,KAAK,iCAAiC,IAAK,mCAAmC,KAAK,gCAAgC,IAAI,8BAA8B,KAAK,8BAA8B,KAAK,4BAA4B,KAAK,8BAA8B,QAAQ,kCAAkC,IAAI,gCAAgC,QAAQ,uCAAuC,IAAI,CAAC,MAAM,CAN7qjK,KAMmrjK,KAAK,CANxrjK,KAM8rjK,uCAAuC,IAAI,CAAC,CAN3gkK,IAMghkK,oCAAoC,QAAQ,oCAAoC,QAAQ,8BAA8B,KAAK,yBAAyB,KAAK,oBAAoB,KAAK,+BAA+B,KAAK,8BAA8B,KAAK,kCAAkC,KAAK,qCAAqC,IAAI,uCAAuC,KAAK,sCAAsC,IAAK,6BAA6B,KAAK,+BAA+B,KAAK,iCAAiC,KAAK,+BAA+B,QAAQ,+BAA+B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,+BAA+B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,+BAA+B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,6BAA6B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,CAN7wlK,IAMkxlK,CANj/kK,KAMu/kK,CANxxlK,GAM4xlK,CAN3/kK,KAMiglK,+BAA+B,QAAQ,iCAAiC,KAAK,+BAA+B,YAAY,+BAA+B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,+BAA+B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,6BAA6B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,+BAA+B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANhrlK,GAMorlK,+BAA+B,YAAY,8BAA8B,KAAK,yBAAyB,KAAK,oBAAoB,KAAK,+BAA+B,KAAK,8BAA8B,KAAK,kCAAkC,KAAK,qCAAqC,KAAK,uCAAuC,KAAK,sCAAsC,EAAG,CAAC,CANvimK,GAM2imK,CAN3imK,GAM+imK,CAN1tmK,KAMgumK,CANrjmK,GAMyjmK,CAAC,eAAe,2BAA2B,IAAI,iBAAiB,6BAA6B,IAAI,oBAAoB,+BAA+B,IAAI,yBAAyB,iCAAiC,IAAI,oBAAoB,oCAAoC,IAAI,4BAA4B,oCAAoC,IAAI,4BAA4B,+BAA+B,IAAI,4BAA4B,+BAA+B,IAAI,4BAA4B,+BAA+B,IAAI,4BAA4B,6BAA6B,IAAI,2BAA2B,CAAC,CAAC,SAAS,CAAC,iBAAiB,WAAW,IAAI,+BAA+B,CAAC,CAA1E,SAAoF,QAAQ,KAAK,eAAe,OAAO,WAAW,KAAK,SAAS,SAAS,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,WAAW,IAAI,oBAAoB,CAAC,CAA5D,OAAoE,YAAY,CAAvE,cAAsF,YAAY,cAAc,IAAI,oBAAoB,CAAC,CAAzI,eAAyJ,WAAW,OAAO,MAAM,KAAK,YAAY,EAAE,MAAM,IAAI,gCAAgC,UAAU,IAAI,+BAA+B,YAAY,IAAI,gCAAgC,CAAC,CAArV,QAA8V,UAAU,IAAI,WAAW,WAAW,QAAQ,KAAK,YAAY,SAAS,SAAS,SAAS,QAAQ,EAAE,UAAU,WAAgB,EAAE,CAAC,CAAC,eAAe,cAAc,IAAI,mCAAmC,SAAS,SAAS,gBAAgB,MAAM,WAAW,SAAS,YAAY,EAAE,MAAM,IAAI,0BAA0B,OAAO,IAAI,yBAAyB,CAAC,CAAC,gBAAgB,SAAS,SAAS,QAAQ,KAAK,eAAe,MAAM,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,YAAY,CAAC,CAAC,CAA3C,eAA2D,MAAM,IAAI,gCAAgC,UAAU,IAAI,8BAA8B,CAAC,CAAlK,eAAkL,MAAM,IAAI,gCAAgC,UAAU,IAAI,+BAA+B,cAAc,IAAI,CAAC,CAA5P,aAA0Q,MAAM,IAAI,8BAA8B,UAAU,IAAI,6BAA6B,YAAY,IAAI,8BAA8B,CAAC,CAAC,eAAe,WAAW,WAAW,WAAW,WAAW,QAAQ,KAAK,eAAe,OAAO,SAAS,SAAS,YAAY,IAAI,iCAAiC,UAAU,IAAI,+BAA+B,cAAc,IAAI,mCAAmC,QAAQ,IAAI,sCAAsC,IAAI,wCAAwC,WAAW,IAAI,+BAA+B,CAAC,CAAC,cAAc,IAAI,QAAQ,MAAM,UAAU,KAAK,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,oBAAoB,CAAC,oBAAoB,YAAY,CAAC,CAAC,CAAlC,oBAAuD,MAAM,IAAI,qCAAqC,QAAQ,IAAI,kCAAkC,UAAU,IAAI,mCAAmC,CAAC,CAA3N,oBAAgP,MAAM,IAAI,qCAAqC,QAAQ,IAAI,kCAAkC,UAAU,IAAI,mCAAmC,CAAC,CAAC,aAAa,WAAW,IAAI,CAAC,CAAC,aAAa,WAAW,MAAM,eAAe,YAAY,WAAW,QAAQ,CAAC,CAA7E,aAA2F,CAAj9B,eAAi+B,MAAM,IAAI,8BAA8B,WAAW,IAAI,0BAA0B,CAAC,IAAI,kBAAkB,CAAC,CAApN,aAAkO,CAA3kD,gBAA4lD,YAAY,QAAQ,CAAC,CAAC,iBAAiB,eAAe,GAAG,CAAC,CAApC,iBAAsD,CAArrC,eAAqsC,MAAM,IAAI,kCAAkC,WAAW,IAAI,+BAA+B,CAAC,CAAjK,iBAAmL,CAAryD,gBAAszD,YAAY,UAAU,CAAC,CAAngF,OAA2gF,KAAK,CAAC,cAAc,CAAjkE,eAAilE,QAAQ,CAAC,CAAC,CAAzjF,OAAikF,KAAK,CAAC,eAAe,CAA1zD,aAAw0D,QAAQ,IAAI,CAAC,CAAjnF,OAAynF,CAAC,kBAAkB,CAAh3D,aAA24D,CAAvqF,OAA+qF,CAAC,oBAAoB,CAAx7D,eAAq9D,CAAjuF,OAAyuF,CAAC,oBAAoB,CAAlgE,eAA85D,QAAQ,IAAI,CAAqH,CAAC,2BAA2B,UAAU,2BAA2B,GAAG,CAAC,CAAC,wBAAwB,UAAU,wBAAwB,GAAG,CAAC,CAAC,yBAAyB,QAAQ,aAAa,UAAU,EAAE,eAAe,MAAM,CAAC,CAAhF,wBAAyG,CAAC,IAAI,QAAQ,aAAa,SAAS,SAAS,WAAW,IAAI,wCAAwC,QAAQ,IAAI,uCAAuC,eAAe,OAlBnyxK,cAkBwzxK,GAAG,CAAC,WAA3a,2BAAid,GAAK,UAAU,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,WAAgB,EAAE,CAAC,CAAC,WAAld,wBAAqf,GAAK,UAAU,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,UAAU,WAAgB,EAAE,CAAC,CAAC,CANnrvK,IAMwrvK,CAAtqF,eAAsrF,EAAE,CAN1svK,IAM+svK,CAA7qF,eAA6rF,EAAE,CANjuvK,IAMsuvK,CAAprF,aAAksF,EAAE,CANtvvK,IAM2vvK,CAA59G,eAA4+G,EAAE,YAAY,GAAG,CAAC,CAN7xvK,IAMkyvK,CAAhwF,eAAgxF,CANlzvK,IAMuzvK,CAArwF,aAAmxF,cAAc,GAAG,CAAC,CANv1vK,IAM41vK,CAA10F,eAA01F,WAAW,GAAG,CAAC,CAN33vK,IAMg4vK,CAAj8E,eAAi9E,UAAU,IAAI,CAAC,CAN/5vK,IAMo6vK,CAAplE,cAAmmE,OAAO,IAAI,sCAAsC,KAAK,GAAG,EAAE,IAAI,wCAAwC,CAAC,CAN3hwK,IAMgiwK,CAAhtE,aAA8tE,aAAa,WAAW,KAAK,GAAG,EAAE,IAAI,sCAAsC,CAAC,CAN3nwK,IAMgowK,CAAhzE,aAA8zE,aAAa,IAAI,uBAAuB,IAAI,mCAAmC,wBAAwB,IAAI,kCAAkC,CAAC,CAN5xwK,IAMiywK,CAAj9E,aAA+9E,YAAY,cAAc,KAAK,GAAG,EAAE,IAAI,sCAAsC,CAAC,CAN93wK,IAMm4wK,CAAnjF,aAAikF,YAAY,IAAI,0BAA0B,IAAI,mCAAmC,2BAA2B,IAAI,kCAAkC,CAAC,CANpixK,IAMyixK,CAA7nF,oBAAkpF,cAAc,GAAG,CAAC,CANhlxK,IAMqlxK,CAA9rF,oBAAmtF,WAAW,GAAG,CAAC,CANznxK,IAM8nxK,CAAhkE,iBAAklE,YAAY,KAAK,KAAK,EAAE,IAAI,qBAAqB,CAAC,CANlsxK,IAMusxK,CAAzoE,iBAA2pE,CAAvsH,eAAutH,CANzuxK,IAM8uxK,CAAhrE,iBAAksE,CAA9tH,eAA8uH,CANhxxK,IAMqxxK,CAAvtE,iBAAyuE,CAArvH,aAAmwH,YAAY,IAAI,uCAAuC,CAAC,CAN72xK,IAMk3xK,CAApzE,iBAAs0E,CAAr8G,eAAq9G,aAAa,KAAK,IAAI,wCAAwC,EAAE,KAAK,uBAAuB,qNAAqN,IAAI,IAAI,IAAI,GAAG,CAAC,CANrtyK,IAM0tyK,CAA5pF,iBAA8qF,CAA55G,cAA26G,YAAY,KAAK,GAAG,EAAE,CAAC,IAAI,wCAAwC,EAAE,KAAK,CAAC,CANt0yK,IAM20yK,CAA7wF,gBAA8xF,CAAC,aAAa,CAA36H,eAA27H,cAAc,IAAI,mCAAmC,IAAI,mCAAmC,IAAI,mCAAmC,CAAC,CAAC,CAN//yK,IAMogzK,CAAt8F,gBAAu9F,CAAxL,YAAqM,KAAK,CAAC,gBAAgB,CAAznI,eAAyoI,uBAAuB,2QAA2Q,IAAI,IAAI,IAAI,GAAG,CAAC,CAN13zK,IAM+3zK,CAAj0G,gBAAk1G,CAAnjB,YAAgkB,KAAK,CAA1X,gBAA2Y,CAAp/I,eAAogJ,CAAnnI,aAAioI,YAAY,IAAI,0BAA0B,CAAG,CAAC,CAN//zK,IAMog0K,CAA/sH,aAA6tH,aAAa,KAAK,KAAK,EAAE,IAAI,sBAAsB,CAAC,CANtk0K,IAM2k0K,CAAtxH,aAAoyH,CAAvkK,eAAulK,CANzm0K,IAM8m0K,CAAzzH,aAAu0H,CAA1lK,eAA0mK,CAN5o0K,IAMip0K,CAA51H,aAA02H,CAA7mK,aAA2nK,aAAa,IAAI,uCAAuC,CAAC,CANtu0K,IAM2u0K,CAAt7H,aAAo8H,CAA1zJ,eAA00J,cAAc,KAAK,IAAI,wCAAwC,EAAE,KAAK,uBAAuB,qNAAqN,IAAI,IAAI,IAAI,GAAG,CAAC,CAN3k1K,IAMgl1K,CAA3xI,aAAyyI,CAA9wJ,cAA6xJ,aAAa,KAAK,GAAG,EAAE,CAAC,IAAI,wCAAwC,EAAE,KAAK,CAAC,CANzr1K,IAM8r1K,CAAz4I,YAAs5I,CAA92C,aAA43C,CAA1xK,eAA0yK,cAAc,IAAI,mCAAmC,IAAI,mCAAmC,EAAE,IAAI,kCAAkC,CAAC,CAN921K,IAMm31K,CAA9jJ,YAA2kJ,CAAniD,aAAijD,CAA/8K,eAA+9K,uBAAuB,6QAA6Q,IAAI,IAAI,IAAI,GAAG,CAAC,CANlt2K,IAMut2K,CAAl6J,YAA+6J,CAAv4D,aAAq5D,CAAnzL,eAAm0L,CAAl7K,aAAg8K,YAAY,IAAI,2BAA2B,CAAG,CAAC,CAN/z2K,IAMo02K,CAA9iO,OAAsjO,CAAC,CAAvjO,OAA+jO,KAAK,CAA7/I,eAA6gJ,WAAW,GAAG,CAAC,CANz32K,IAM832K,CAAh0J,gBAAi1J,CAAv2D,eAAu3D,CAAn9M,eAAm+M,OAAO,CANt72K,IAM272K,CAA73J,gBAA84J,CAAp6D,eAAo7D,CAAhhN,eAAgiN,QAAQ,QAAQ,GAAG,SAAS,SAAS,WAAW,IAAI,gCAlB/35K,cAkB665K,GAAG,CAAC,CANll3K,IAMul3K,CAAzhK,gBAA0iK,CAAhkE,eAAglE,CAA5qN,eAA4rN,OAAO,MAAM,KAAK,OAAO,KAAK,KAAK,IAAI,OAAO,CAAG,CAAC,CAN1r3K,IAM+r3K,CAAjoK,gBAAkpK,CAAxqE,eAAwrE,CAApxN,eAAoyN,QAAQ,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,CANny3K,IAMwy3K,CAAlnJ,wBAA2oJ,CAAC,IAAI,MAAM,IAAI,OAAO,GAAG,CAAC,CAN313K,IAMg23K,CAA1qJ,wBAAmsJ,CAAC,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,CANl53K,IAMu53K,CAAjuJ,wBAA0vJ,CAAC,GAAG,aAAa,UAAU,6BAA6B,IAAI,QAAQ,CAAC,CANr/3K,IAM0/3K,CAAp0J,wBAA61J,CAAC,GAAG,cAAc,UAAU,6BAA6B,IAAI,KAAM,QAAQ,CAAC,CAN/l4K,IAMom4K,CAA96J,wBAAu8J,CAAC,GAAG,cAAc,UAAU,6BAA6B,IAAI,IAAI,QAAQ,CAAC,WAA5P,6BAAoS,GAAG,QAAQ,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CANj13K,GAMq13K,CAA/wO,eAA+xO,EAAE,CANv23K,GAM223K,CAArxO,eAAqyO,EAAE,CAN733K,GAMi43K,CAA3xO,aAAyyO,EAAE,CANj53K,GAMq53K,CAAlkQ,eAAklQ,EAAE,YAAY,GAAG,CAAC,CANv73K,GAM273K,CAAr2O,eAAq3O,CAN383K,GAM+83K,CAAz2O,aAAu3O,cAAc,GAAG,CAAC,CAN/+3K,GAMm/3K,CAA76O,eAA67O,WAAW,GAAG,CAAC,CANlh4K,GAMsh4K,CAAtjN,oBAA2kN,cAAc,GAAG,CAAC,CAN7j4K,GAMik4K,CAAtnN,oBAA2oN,WAAW,GAAG,CAAC,CANrm4K,GAMym4K,CAAruN,cAAovN,OAAO,KAAK,GAAG,EAAE,IAAI,uCAAuC,KAAK,GAAG,EAAE,IAAI,wCAAwC,CAAC,CAN3u4K,GAM+u4K,CAA32N,cAA03N,CAN9v4K,GAMkw4K,CAA93N,cAA64N,IAAI,cAAc,IAAI,kCAAkC,CAAC,CAN104K,GAM804K,CAA5tM,iBAA8uM,YAAY,KAAK,IAAI,EAAE,IAAI,qBAAqB,CAAC,CANj54K,GAMq54K,CAAnyM,iBAAqzM,CAAj2P,eAAi3P,CANv74K,GAM274K,CAAz0M,iBAA21M,CAAv3P,eAAu4P,CAN794K,GAMi+4K,CAA/2M,iBAAi4M,CAA74P,aAA25P,YAAY,IAAI,CAAC,CANlh5K,GAMsh5K,CAAp6M,gBAAq7M,CAAtpM,aAAoqM,KAAK,CAA/tM,cAA8uM,CAAtlP,eAAsmP,CANzl5K,GAM6l5K,CAA3+M,gBAA4/M,CAA7tM,aAA2uM,KAAK,CAAtyM,cAAqzM,CAA5wO,cAA2xO,CAN/p5K,GAMmq5K,CAAjjN,gBAAkkN,CAAnyM,aAAizM,KAAK,CAA52M,cAA23M,CAAl1O,cAAi2O,IAAI,0BAA0B,GAAG,CAAC,CANvw5K,GAM2w5K,CAAzpN,gBAA0qN,CAAj8M,YAA88M,KAAK,CAA75M,eAA66M,CAA30P,eAA21P,CAN905K,GAMk15K,CAAhuN,gBAAivN,CAAxgN,YAAqhN,KAAK,CAAp+M,eAAo/M,CAAjgP,cAAghP,CANp55K,GAMw55K,CAAtyN,gBAAuzN,CAA9kN,YAA2lN,KAAK,CAA1iN,eAA0jN,CAAvkP,cAAslP,IAAI,uBAAuB,GAAG,CAAC,CANz/5K,GAM6/5K,CAA34N,gBAA45N,KAAK,CAAxrN,aAAssN,KAAK,CAArpN,eAAqqN,CAAnkQ,eAAmlQ,CANtk6K,GAM0k6K,CAAx9N,gBAAy+N,KAAK,CAArwN,aAAmxN,KAAK,CAAluN,eAAkvN,CAA/vP,cAA8wP,CANlp6K,GAMsp6K,CAApiO,gBAAqjO,KAAK,CAAj1N,aAA+1N,KAAK,CAA9yN,eAA8zN,CAA30P,cAA01P,IAAI,0BAA0B,IAAI,uBAAuB,GAAG,CAAC,CAN3x6K,GAM+x6K,CAA7qO,iBAA+rO,CAAzgS,cAAwhS,CAAC,CAAj0R,gBAAk1R,YAAY,GAAG,CAAC,CANl26K,GAMs26K,CAA7/O,aAA2gP,aAAa,KAAK,IAAI,EAAE,IAAI,sBAAsB,CAAC,CANv66K,GAM266K,CAAlkP,aAAglP,CAAn3R,eAAm4R,CANz86K,GAM686K,CAApmP,aAAknP,CAAr4R,eAAq5R,CAN3+6K,GAM++6K,CAAtoP,aAAopP,CAAv5R,aAAq6R,aAAa,IAAI,CAAC,CAN7h7K,GAMii7K,CAAxrP,YAAqsP,CAA7pO,aAA2qO,KAAK,CAAtuO,cAAqvO,CAA7lR,eAA6mR,CANhm7K,GAMom7K,CAA3vP,YAAwwP,CAAhuO,aAA8uO,KAAK,CAAzyO,cAAwzO,CAA/wQ,cAA8xQ,CANlq7K,GAMsq7K,CAA7zP,YAA00P,CAAlyO,aAAgzO,KAAK,CAA32O,cAA03O,CAAj1Q,cAAg2Q,IAAI,2BAA2B,GAAG,CAAC,CANvw7K,GAM2w7K,CAAl6P,YAA+6P,CAA77O,YAA08O,KAAK,CAAz5O,eAAy6O,CAAv0R,eAAu1R,CAN107K,GAM807K,CAAr+P,YAAk/P,CAAhgP,YAA6gP,KAAK,CAA59O,eAA4+O,CAAz/Q,cAAwgR,CAN547K,GAMg57K,CAAviQ,YAAojQ,CAAlkP,YAA+kP,KAAK,CAA9hP,eAA8iP,CAA3jR,cAA0kR,IAAI,wBAAwB,GAAG,CAAC,CAN9+7K,GAMk/7K,CAAzoQ,YAAspQ,KAAK,CAAzqP,aAAurP,KAAK,CAAtoP,eAAspP,CAApjS,eAAokS,CANvj8K,GAM2j8K,CAAltQ,YAA+tQ,KAAK,CAAlvP,aAAgwP,KAAK,CAA/sP,eAA+tP,CAA5uR,cAA2vR,CAN/n8K,GAMmo8K,CAA1xQ,YAAuyQ,KAAK,CAA1zP,aAAw0P,KAAK,CAAvxP,eAAuyP,CAApzR,cAAm0R,IAAI,2BAA2B,IAAI,wBAAwB,GAAG,CAAC,CANtw8K,GAM0w8K,CAAj6Q,aAA+6Q,CAAh/T,cAA+/T,CAAC,CAAxyT,gBAAyzT,aAAa,IAAI,uCAAuC,CAAC,CANl38K,GAMs38K,CAA5iV,OAAojV,CAAC,CAArjV,OAA6jV,KAAK,CAA3/P,eAA2gQ,WAAW,GAAG,CAAC,CAN368K,GAM+68K,CAArsP,wBAA8tP,CAAC,IAAI,MAAM,IAAI,OAAO,GAAG,CAAC,CANl+8K,GAMs+8K,CAA5vP,wBAAqxP,CAAC,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,CANxh9K,GAM4h9K,CAAlzP,wBAA20P,CAAC,GAAG,aAAa,UAAU,4BAA4B,IAAI,QAAQ,CAAC,CANzn9K,GAM6n9K,CAAn5P,wBAA46P,CAAC,GAAG,cAAc,UAAU,4BAA4B,IAAI,KAAM,QAAQ,CAAC,CANju9K,GAMqu9K,CAA3/P,wBAAohQ,CAAC,GAAG,cAAc,UAAU,4BAA4B,IAAI,IAAI,QAAQ,CAAC,WAAvP,4BAA8R,GAAG,UAAU,WAAW,EAAG,CAAC,IAAI,UAAU,WAAW,KAAK,CAAC,IAAI,UAAU,WAAW,EAAG,CAAC,CAAC,MAAM,mCAAmC,MAAM,6BAA6B,MAAM,uCAAuC,KAAK,CAAC,CANlh/K,IAMuh/K,uBAAuB,KAAK,0BAA0B,KAAK,kCAAkC,YAAY,6BAA6B,YAAY,uCAAuC,KAAK,iCAAiC,IAAI,KAAK,gCAAgC,KAAK,mCAAmC,KAAK,qCAAqC,KAAK,+BAA+B,QAAQ,mCAAmC,YAAY,yCAAyC,KAAK,kCAAkC,MAAM,4CAA4C,MAAM,2CAA2C,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,oCAAoC,KAAK,gCAAgC,IAAI,MAAM,QAAQ,yCAAyC,QAAQ,yBAAyB,KAAK,6BAA6B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CANr2gL,IAM02gL,CANzkgL,KAM+kgL,CANh3gL,GAMo3gL,CANnlgL,KAMylgL,2CAA2C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,oCAAoC,KAAK,gCAAgC,IAAI,MAAM,IAAI,wBAAwB,yCAAyC,IAAI,wBAAwB,yBAAyB,IAAI,oBAAoB,6BAA6B,IAAI,uBAAuB,CAAC,CANhxgL,GAMoxgL,uBAAuB,KAAK,0BAA0B,KAAK,uCAAuC,KAAK,iCAAiC,KAAK,KAAK,gCAAgC,KAAK,mCAAmC,KAAK,qCAAqC,KAAK,gCAAgC,IAAI,MAAM,YAAY,yCAAyC,KAAK,kCAAkC,KAAK,4CAA4C,KAAK,6BAA6B,YAAY,yCAAyC,WAAW,CAAC,CANvzhL,GAM2zhL,CAN3zhL,GAM+zhL,CAN1+hL,KAMg/hL,CANr0hL,GAMy0hL,CAAC,eAAe,2CAA2C,IAAI,4BAA4B,kCAAkC,IAAI,yBAAyB,yBAAyB,IAAI,iBAAiB,oCAAoC,IAAI,oBAAoB,+BAA+B,IAAI,iBAAiB,mCAAmC,IAAI,yBAAyB,2BAA2B,IAAI,mBAAmB,CAAC,CAAhhoC,WAA4hoC,UAAU,WAAgB,GAAG,WAAW,IAAI,0BAA0B,OAAO,KAAK,WAAW,IAAI,wBAAwB,UAAU,IAAI,2BAA2B,eAAe,IAAI,uBAAuB,OAAO,CAAC,CAAC,CAAjvoC,UAA4voC,QAAQ,QAAQ,GAAG,SAAS,SAAS,iBAAiB,IAAI,8BAA8B,QAAQ,MAAM,QAAQ,GAAG,MAAI,EAAQ,KAAY,KAAU,EAAE,OAAO,IAAI,MAAM,KAAK,iBAAiB,IAAI,GAAG,UAAU,OAAO,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,UAAU,CAAC,CAAC,uBAAuB,EAAE,KAAK,OAAO,GAAG,CAAC,eAAe,EAAE,KAAK,QAAQ,CAN9hnJ,qBAMojnJ,CAAjmpC,WAA6mpC,iBAAiB,KAAK,IAAI,6BAA6B,CAAC,IAAI,gCAAgC,wBAAwB,SAAS,MAAM,KAAK,IAAI,6BAA6B,gBAAgB,SAAS,MAAM,KAAK,IAAI,4BAA4B,CAAC,CAAC,CAA51pC,UAAu2pC,CANn5oJ,UAM85oJ,QAAQ,QAAQ,cAAc,CAAC,CAAj5pC,UAA45pC,CAFx3xJ,cAEu4xJ,OAAO,QAAQ,cAAc,CAAC,CAAz8pC,WAAq9pC,CAFvgwJ,cAEshwJ,IAAI,KAAK,SAAS,SAAS,OAAO,KAAK,OAAO,KAAK,aAAa,KAAK,IAAI,kCAAkC,CAAC,IAAI,kCAAkC,EAAE,IAAI,sBAAsB,cAAc,KAAK,IAAI,mCAAmC,CAAC,IAAI,mCAAmC,EAAE,IAAI,sBAAsB,CAAC,CAAjxqC,UAA4xqC,CAAC,wBAAwB,CAAC,CAFx2wJ,cAEu3wJ,OAAO,CAAC,CAAC,CAA90qC,WAA01qC,CAAC,gBAAgB,MAAM,KAAK,YAAY,EAAE,SAAS,OAAO,SAAS,QAAQ,CAAC,CAAt6qC,WAAk7qC,SAAS,MAAM,KAAK,YAAY,EAAE,iBAAiB,IAAI,mCAAmC,cAAc,IAAI,wCAAwC,QAAQ,IAAI,kCAAkC,OAAO,IAAI,iCAAiC,MAAM,IAAI,qCAAqC,UAAU,IAAI,oCAAoC,YAAY,IAAI,sCAAsC,OAAO,IAAI,gCAAgC,CAAC,CAAn2rC,WAA+2rC,QAAQ,mBAAmB,MAAM,IAAI,2CAA2C,CAAC,CAAh8rC,WAA48rC,QAAQ,cAAc,MAAM,IAAI,2CAA2C,CAAC,CAAxhsC,WAAoisC,CAAC,CANzo5K,KAM+o5K,WAAW,SAAS,YAAY,EAAE,MAAM,IAAI,0BAA0B,CAAC,IAAI,kBAAkB,CAAC,CAAC,uBAAuB,MAAM,KAAK,SAAS,KAAK,2BAA2B,MAAM,UAAU,EAAE,YAAY,OAAO,WAAW,WAAW,SAAS,QAAQ,CAAC,CAAlysC,UAA6ysC,KAAK,CAAC,gCAAgC,CAAzM,uBAAiO,QAAQ,IAAI,CAAC,CAAC,sBAAsB,gBAAgB,MAAM,oBAAoB,OAAO,kBAAkB,UAAU,QAAQ,aAAa,eAAe,OAAO,YAAY,OAAO,OAAO,IAAI,mCAAmC,SAAS,SAAS,cAAc,IAAI,yCAAyC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAA5T,sBAAmV,OAAO,IAAI,4CAA4C,CAAC,CAAC,CAA5Y,sBAAma,IAAI,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,cAAc,IAAI,yCAAyC,CAAC,CAAC,iBAAiB,SAAS,KAAK,2BAA2B,MAAM,QAAQ,KAAK,UAAU,KAAK,eAAe,OAAO,cAAc,WAAW,OAAO,IAAI,8BAA8B,iBAAiB,IAAI,gCAAgC,WAAW,IAAI,MAAM,IAAI,oCAAoC,aAAa,IAAI,qBAAqB,cAAc,IAAI,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAnZ,iBAAqa,OAAO,IAAI,uCAAuC,CAAC,CAAC,CAAC,uBAAuB,gBAAgB,MAAM,oBAAoB,OAAO,kBAAkB,SAAS,CAAC,CAApG,sBAA2H,CAAC,IAAI,MAAM,KAAK,OAAO,KAAK,cAAc,MAAM,WAAW,MAAM,mBAAmB,OAAO,gBAAgB,OAAO,cAAc,QAAQ,oBAAoB,GAAG,CAAC,CAAC,6BAA6B,QAAQ,MAAM,SAAS,SAlB3rtL,cAkBkttL,IAAI,WAAW,WAAW,OAAO,OAAO,CAAC,CAApH,4BAAiJ,OAAO,CAAxJ,4BAAqL,QAAQ,SAAS,SAAS,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,CAA3O,4BAAwQ,OAAO,UAAU,OAAO,MAAM,CAAC,CAAvS,4BAAoU,QAAQ,UAAU,OAAO,OAAO,CAAC,CAA79vC,UAAw+vC,KAAK,CAAhtF,0BAA2uF,CAAtoC,iBAAwpC,QAAQ,IAAI,CAAC,CAAviwC,UAAkjwC,CAAC,EAAE,gCAAgC,IAAI,uBAAuB,CAAC,CANjyrL,IAMsyrL,CAAtnwC,WAAkowC,CAAC,CANvu9K,IAM4u9K,CAFtynL,SAEgznL,aAAa,YAAY,IAAI,CAAC,CANh2rL,IAMq2rL,CAArrwC,WAAiswC,CAAC,CANty9K,IAM2y9K,CAFr2nL,SAE+2nL,YAAY,aAAa,IAAI,CAAC,CAN/5rL,IAMo6rL,CAApvwC,WAAgwwC,CAAC,CANr29K,IAM029K,KAAK,CAFz6nL,UAEo7nL,CAAC,CAA57F,gBAA68F,YAAY,GAAG,CAAC,CANx+rL,IAM6+rL,CAA7zwC,WAAy0wC,CAA9+F,eAA8/F,CAAC,CAAC,CAN/79K,IAMo89K,KAAK,CAFngoL,WAE+goL,YAAY,GAAG,CAAC,CANjjsL,IAMsjsL,CAA3iG,gBAA4jG,WAAW,IAAI,cAAc,GAAG,CAAC,CANxmsL,IAM6msL,CAAnzE,uBAlBzpqL,QAkB4+uL,IAAI,cAAc,IAAI,wCAAwC,IAAI,wCAAwC,EAAE,EAAE,OAAO,IAAI,MAAM,IAAI,0CAA0C,cAAc,IAAI,CAAC,CAN70sL,IAMk1sL,CAA/2E,+BAA+4E,CAAxjF,sBAA+kF,CAAC,SAAS,cAAc,EAAE,EAAE,IAAI,wCAAwC,IAAI,uCAAuC,CAAC,CAN7/sL,IAMkgtL,CAAz9E,sBAAg/E,UAAU,IAAI,CAAC,CANxitL,IAM6itL,CAApgF,qBAA0hF,CAAC,CAA3hF,sBAAkjF,YAAY,GAAG,CAAC,CAN3mtL,IAMgntL,CAAx0C,6BAAs2C,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,OAAO,KAAK,WAAW,QAAQ,OAAO,IAAI,MAAM,KAAK,WAAW,EAAI,EAAI,IAAI,KAAc,CAAC,CANtwtL,IAM2wtL,CAAn+C,4BAAggD,OAAO,CAN/ytL,IAMoztL,CAA5gD,4BAAyiD,QAAQ,MAAM,KAAK,OAAO,IAAI,WAAW,KAAK,YAAY,KAAK,WAAW,IAAI,CAAC,CANh6tL,IAMq6tL,CAAz5D,uBAAi7D,CAN77tL,IAMk8tL,CAAC,sBAAsB,WAAW,WAAW,YAAY,EAAE,WAAW,IAAI,SAAS,SAAS,SAAS,OAAO,OAAO,KAAK,CAAC,IAAI,8BAA8B,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,8BAA8B,EAAE,IAAI,EAAE,GAAG,YAAY,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CANhtuL,IAMqtuL,CAAzsE,uBAAiuE,CAN7uuL,IAMkvuL,CAA/S,sBAAsU,MAAM,KAAK,CAAC,IAAI,wCAAwC,EAAE,IAAI,EAAE,GAAG,OAAO,KAAK,CAAC,IAAI,wCAAwC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CANj5uL,IAMs5uL,CAA14E,uBAAk6E,CAAt8uI,cAAq9uI,CAN77uL,IAMk8uL,CAAt7E,uBAA88E,CAA9olI,WAA0plI,CANt+uL,IAM2+uL,CAAxiB,sBAA+jB,CAA1hvI,cAAyivI,CANjhvL,IAMshvL,CAAnlB,sBAA0mB,CAAjulI,WAA6ulI,SAAS,SAAS,MAAM,IAAI,OAAO,IAAI,QAAQ,CAAC,CAAC,CAN9puL,GAMkquL,CAA97zC,WAA08zC,yBAAyB,IAAI,uBAAuB,CAAC,CANnuuL,GAMuuuL,CAAz3H,uBAlBzpqL,QAkBkjyL,KAAK,KAAK,EAAE,cAAc,IAAI,MAAM,IAAI,yCAAyC,CAAC,CANz1uL,GAM61uL,CAAhwH,sBAAuxH,IAAI,MAAM,IAAI,mCAAmC,OAAO,IAAI,mCAAmC,cAAc,MAAM,WAAW,MAAM,mBAAmB,OAAO,gBAAgB,MAAM,CAAC,CANzivL,GAM6ivL,CAAh9H,qBAAs+H,CAAC,CAAv+H,sBAA8/H,YAAY,IAAI,CAAC,CAN5mvL,GAMgnvL,CAAzlI,+BAAynI,CAAlyI,uBAA0zI,WAAW,IAAI,mCAAmC,cAAc,IAAI,wCAAwC,IAAI,wCAAwC,EAAE,CAAC,CAAC,CANp0vL,GAMw0vL,CAAjzI,+BAAi1I,SAAS,uBAAuB,EAAE,wBAAwB,CAAC,CAAC,CANp6vL,GAMw6vL,CAAz2K,gBAA03K,WAAW,IAAI,cAAc,GAAG,CAAC,CAN19vL,GAM89vL,CAAloG,6BAAgqG,MAAM,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,iBAAiB,IAAI,yBAlBv2zL,cAkB84zL,KAAK,OAAO,IAAI,MAAM,IAAI,kCAAkC,CAAC,CANhqwL,GAMoqwL,CAAx0G,4BAAq2G,OAAO,CANxswL,GAM4swL,CAAh3G,4BAA64G,QAAQ,MAAM,KAAK,OAAO,IAAI,WAAW,IAAI,mCAAmC,YAAY,KAAK,WAAW,IAAI,CAAC,CAN11wL,GAM81wL,CAA9xH,uBAAszH,CANt3wL,GAM03wL,CAAn4D,sBAA05D,wBAAwB,YAAY,WAAW,WAAW,YAAY,EAAE,WAAW,IAAI,SAAS,SAAS,SAAS,OAAO,OAAO,KAAK,CAAC,IAAI,8BAA8B,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,8BAA8B,EAAE,KAAK,EAAE,GAlBv60L,cAkBw70L,IAAI,YAAY,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CANhsxL,GAMosxL,CAApoI,uBAA4pI,CAN5txL,GAMguxL,CAAzuE,sBAAgwE,MAAM,KAAK,CAAC,IAAI,wCAAwC,EAAE,IAAI,EAAE,GAAG,OAAO,KAAK,CAAC,IAAI,wCAAwC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CANh4xL,GAMo4xL,CAAp0I,uBAA41I,KAAK,QAAQ,CAAC,IAAI,CAN96xL,GAMk7xL,CAA37E,sBAAk9E,KAAK,QAAQ,CAAC,IAAI,UAAU,MAAM,IAAI,CAAC,CANh/xL,GAMo/xL,CAAp7I,uBAA48I,KAAK,QAAQ,CAAC,CAA9/yI,cAA6gzI,CANziyL,GAM6iyL,CAA7+I,uBAAqgJ,KAAK,QAAQ,CAAC,CAAntpI,WAA+tpI,CAN/lyL,GAMmmyL,CAA5mF,sBAAmoF,KAAK,QAAQ,CAAC,CAA5mzI,cAA2nzI,CANvpyL,GAM2pyL,CAApqF,sBAA2rF,KAAK,QAAQ,CAAC,CAAh0pI,WAA40pI,UAAU,UAAU,IAAI,CAAC,MAAM,MAAM,EAAE,CAAC,CANpvyL,GAMwvyL,CAAxrJ,uBAAgtJ,CAApvzI,cAAmwzI,CAN/xyL,GAMmyyL,CAAnuJ,uBAA2vJ,CAA37pI,WAAu8pI,CANv0yL,GAM20yL,CAAp1F,sBAA22F,CAAt0zI,cAAq1zI,CANj3yL,GAMq3yL,CAA93F,sBAAq5F,CAA5gqI,WAAwhqI,MAAM,KAAK,OAAO,KAlBrt2L,cAkBwu2L,IAAI,QAAQ,KAAK,YAAY,OAAO,gBAAgB,OAAO,SAAS,SAAS,KAAK,IAAI,IAAI,IAAI,UAAU,UAAU,IAAI,CAAC,MAAM,MAAM,KAAK,OAAO,KAAK,QAAQ,EAAE,6BAA6B,IAAI,iBAAiB,2BAA2B,IAAI,gBAAgB,CAAC,CAN7rzL,GAMiszL,CAAjoK,uBAAypK,CAA7r0I,aAA2s0I,OAAQ,CAN/uzL,GAMmvzL,CAAnrK,uBAA2sK,CAA34qI,UAAs5qI,OAAQ,CAN9xzL,GAMkyzL,CAA3yG,sBAAk0G,CAA7x0I,aAA2y0I,OAAQ,CAN/0zL,GAMm1zL,CAA51G,sBAAm3G,CAA1+qI,UAAq/qI,OAAQ,MAAM,IAAI,oBAAoB,UAAU,KAAK,MAAM,KAAK,OAAO,KAAK,YAAY,KAAK,KAAK,EAAE,SAAS,MAAM,CAAC,WAAW,YAAY,aAAa,IAAI,wrEAAyrE,YAAY,IAAI,WAAW,MAAM,CAAC,MAAM,qBAAqB,OAAO,CAAC,MAAM,SAAS,SAAS,QAAQ,MAAM,YAAY,KAAK,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,YAAY,KAAK,aAAa,KAAK,SAAS,SAAS,SAAS,OAAO,SAAS,KAAK,WAAW,KAlBnv8L,QAkBgw8L,EAAE,QAAQ,EAAE,QAAQ,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,eAAe,eAAe,MAAM,CAAC,CAArC,eAAqD,SAAS,SAAS,MAAM,KAAK,OAAO,KAAK,QAAQ,EAAE,QAAQ,KAAK,oBAAoB,UAAU,2BAA2B,IAAI,2CAA2C,CAAC,SAAS,WAAW,WAAW,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,CAAzB,aAAuC,CAAtT,eAAsU,UAAU,WAAkB,EAAE,CAAC,CAAC,kBAAkB,aAAa,KAAK,CAAC,CAA5Z,gBAA6a,aAAa,KAAK,CAAC,CAAhK,aAA8K,YAAY,EAAE,MAAM,KAAK,OAAO,KAAK,SAAS,SAAS,oBAAoB,UAAU,QAAQ,KAAK,CAAC,CAAC,6BAA6B,WAAW,MAAM,CAAC,CAAC,kBAAkB,CAAlB,kBAAqC,CAAvW,aAAqX,OAAO,IAAI,CAAC,CAA/D,kBAAkF,CAAnqB,eAAmrB,YAAY,WAAW,oBAAoB,SAAS,CAAC,MAAM,CAAC,CAAC,uBAAuB,CAAxf,aAAsgB,UAAU,WAAW,GAAG,oBAAoB,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAn2B,eAAm3B,YAAY,MAAM,CAAC,CAA7D,UAAwE,CAAj5B,eAAi6B,gBAAgB,WAAW,CAAC,CAApH,UAA+H,YAAY,MAAM,CAAC,CAAlJ,UAA6J,CAAC,mBAAmB,CAAjL,UAA4L,CAAtvB,aAAowB,gBAAgB,WAAW,CAAC,CAA5N,eAA4O,CAAC,CAAhkC,eAAglC,SAAS,KAAK,gBAAgB,KAAK,mBAAmB,IAAI,CAAC,CAAxT,eAAwU,CAAC,CAA5pC,cAA2qC,oBAAoB,QAAQ,IAAI,CAAC,CAAzX,eAAyY,CAAC,CAA7tC,cAA4uC,CAAC,CAA99B,aAA4+B,kBAAkB,MAAM,KAAK,CAAC,CAAtc,eAAsd,CAAn8B,iBAAq9B,CAAC,CAA5zC,eAA40C,iBAAiB,EAAE,SAAS,CAAC,CAAthB,eAAsiB,CAA14C,eAA05C,CAAC,CAA14C,eAA05C,iBAAiB,EAAE,SAAS,CAAC,CAApmB,eAAonB,CAAC,gBAAgB,CAAC,CAAz9C,eAAy+C,iBAAiB,IAAI,CAAC,CAA5qB,eAA4rB,CAAvE,gBAAwF,CAAC,CAAjiD,cAAgjD,CAAC,CAAlyC,aAAgzC,kBAAkB,IAAI,CAAC,CAAnwB,eAAmxB,CAAC,eAAe,CAAC,CAAvnD,cAAsoD,QAAS,QAAQ,GAAG,YAAY,EAAE,MAAM,IAAI,CAAC,CAAh2B,eAAg3B,CAA5F,eAA4G,CAAC,CAAptD,cAAmuD,CAAC,CAAr9C,aAAm+C,kBAAkB,OAAO,OAAO,iBAAiB,MAAM,CAAC,CAAv9B,eAAu+B,CAAnN,eAAmO,CAAp+C,iBAAs/C,CAAC,CAA71D,cAA42D,CAAC,CAA9lD,YAA2mD,aAAa,oBAAoB,IAAI,gCAAgC,CAAC,CAA7mC,eAA6nC,CAAzW,eAAyX,CAA1nD,iBAA4oD,CAAC,CAAn/D,cAAkgE,QAAS,OAAO,KAAK,WAAW,IAAI,MAAM,IAAI,+BAA+B,CAAC,CAA7vC,eAA6wC,CAAzf,eAAygB,CAAjoE,eAAipE,CAAC,CAAjoE,cAAgpE,CAAC,CAAl4D,YAA+4D,aAAa,mBAAmB,IAAI,gCAAgC,CAAC,CAAh5C,eAAg6C,CAA5oB,eAA4pB,CAApxE,eAAoyE,CAAC,CAApxE,cAAmyE,QAAS,MAAM,KAAK,UAAU,IAAI,OAAO,IAAI,+BAA+B,CAAC,CAAviD,UAAkjD,CAAC,oBAAoB,CAAvkD,UAAklD,CAAC,2BAA2B,CAA9mD,UAAynD,CAAC,yBAAyB,CAAnpD,UAA8pD,CAAC,0BAA0B,CAAzrD,UAAosD,CAAC,wBAAwB,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,eAAe,KAAK,QAAQ,EAAE,CAAC,CAAlzD,UAA6zD,CAA1Q,oBAA+R,WAAW,SAAe,CAAC,CAA72D,UAAw3D,CAA9P,yBAAwR,iBAAiB,gBAAgB,GAAG,IAAnB,CAAwB,SAAxB,CAAuC,MAAc,CAAC,CAAz9D,UAAo+D,CAArU,0BAAgW,iBAAiB,gBAAgB,GAAG,KAAnB,CAAyB,SAAzB,CAAwC,MAAc,CAAC,CAAvkE,UAAklE,CAA7Y,wBAAsa,iBAAiB,gBAAgB,GAAG,GAAnB,CAAuB,SAAvB,CAAsC,MAAc,CAAC,CAAjrE,UAA4rE,CAAzmB,2BAAqoB,iBAAiB,gBAAgB,GAAG,MAAnB,CAA0B,SAA1B,CAAyC,MAAc,CAAC,CAAC,sBAAsB,MAAM,KAAK,OAAO,KAAK,SAAS,SAAS,KAAK,IAAI,IAAI,IAAI,YAAY,MAAM,WAAW,MAAM,QAAQ,GAAG,iBAAiB,IAAI,WAAW,WAAW,OAAO,IAAI,MAAM,IAAI,wBAAwB,CAAC,IAAI,uBAlBlnjM,cAkBupjM,IAAI,iBAAiB,WAAW,CAAC,CAAC,sBAAsB,CAAC,qBAAqB,CAA9U,sBAAqW,CAA9mH,MAAqnH,KAAK,CAA/E,uBAAuG,CAAzY,sBAAga,UAAU,sBAAsB,GAAG,SAAS,MAAM,CAAC,CAAC,4BAA4B,yBAAyB,IAAI,CAAC,CAAC,4BAA4B,yBAAyB,IAAI,CAAC,WAA/J,sBAAgM,GAAG,UAAU,OAAO,EAAK,CAAC,GAAK,UAAU,OAAO,OAAO,CAAC,CAAC,CAAC,eAAe,CAA/gH,aAA6hH,4BAA4B,OAAO,UAAU,WAAW,EAAE,CAAC,CAAxF,cAAuG,CAAniG,gBAAojG,CAAv4H,cAAs5H,OAAQ,QAAQ,GAAG,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,eAAe,IAAI,CAAC,CAA7M,cAA4N,CAAxpG,eAAwqG,CAArpH,kBAAwqH,CAA9gI,cAA6hI,OAAQ,OAAO,IAAI,MAAM,IAAI,sBAAsB,CAAC,CAAlU,cAAiV,CAA7wG,eAA6xG,CAAjoI,gBAAkpI,CAAjoI,cAAgpI,OAAQ,MAAM,IAAI,OAAO,IAAI,sBAAsB,CAAC,MAAM,yBAAyB,IAAI,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,SAAS,SAAS,IAAI,IAAI,8BAA8B,CAAC,KAAK,MAAM,KAAK,IAAI,yBAAyB,EAAE,GAAG,EAAE,IAAI,OAAO,IAAI,0BAA0B,WAAW,KAAK,IAAI,EAAE,CAAC,IAAI,yBAAyB,EAAE,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,KAAK,YAAY,OAAO,gBAAgB,OAAO,MAAM,IAAI,yBAAyB,CAAC,IAAI,sBAAsB,CAAC,CAAvY,kBAA0Z,CAAC,uBAAuB,CAA9Z,kBAAib,CAA1C,uBAAkE,QAAQ,IAAI,OAAO,KAAK,eAAe,IAAI,CAAC,CAAzgB,kBAA4hB,CAAC,qBAAqB,CAA9hB,kBAAijB,CAAxC,qBAA8D,QAAQ,EAAE,OAAO,KAAK,eAAe,IAAI,CAAC,CAAC,2BAA2B,CAAjqB,mBAAqrB,CAA/C,2BAA2E,CAA7rB,mBAAitB,QAAQ,cAAc,CAAC,CAA5vB,mBAAgxB,IAAI,CAAhwB,mBAAoxB,IAAI,MAAM,KAAK,OAAO,KAAK,cAAc,QAAQ,WAAW,QAAQ,iBAAiB,MAAM,CAAC,CAAC,WAAW,CAAh5B,mBAAo6B,IAAI,CAAnC,WAA+C,CAAh6B,mBAAo7B,IAAI,UAAU,OAAO,OAAO,CAAC,CAAj9B,mBAAq+B,CAApH,WAAgI,CAArgC,mBAAyhC,KAAK,IAAI,gCAAgC,CAAC,MAAM,MAAM,IAAI,CAAgH,CAAC,mBAAmB,QAAQ,IAAI,CAAC,CAApuC,kBAAuvC,OAAO,CAA1uC,kBAA6vC,OAAO,YAAY,aAAa,UAAU,IAAI,0BAA0B,eAAe,eAAe,eAAe,EAAE,aAAa,QAAQ,YAAY,CAAC,CAAC,CAAv5C,kBAA06C,OAAO,CAAhkB,WAA4kB,CAAj9C,kBAAo+C,OAAO,QAAQ,MAAM,CAAC,CAA1/C,mBAA8gD,CAAzoB,WAAqpB,CAAtgD,mBAA0hD,MAAM,IAAI,gCAAgC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAzmD,kBAA4nD,OAAO,CAA9vB,WAA0wB,CAA3nD,kBAA8oD,OAAO,QAAQ,MAAM,CAAC,CAAC,kBAAkB,SAAS,SAAS,WAAW,OAAO,WAAW,IAAI,QAAQ,UAAU,WAAgB,GAAG,QAAQ,EAAE,CAAC,CAArH,iBAAuI,CAAC,yBAAyB,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAvM,kBAA0N,CAA1N,iBAA4O,CAAhE,2BAA4F,QAAQ,cAAc,CAAC,CAA31L,iBAA62L,CAAC,CAAC,0BAA0B,CAA1B,yBAAoD,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,2BAA2B,OAAO,IAAI,0BAA0B,CAAC,KAAK,IAAI,IAAI,uBAAuB,CAAC,MAAM,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,kCAAkC,SAAS,OAAO,UAAU,CAAC,CAAC,CAA9D,kCAAiG,CAAC,yBAAyB,UAAU,MAAM,KAAK,SAAS,QAAQ,CAAC,CAAlK,kCAAqM,CAAC,gCAAmD,CAAzP,kCAA4R,CAAC,qCAAvD,UAAU,MAAM,EAAE,CAA6F,CAArV,kCAAwX,CAAC,qCAAqC,UAAU,MAAM,IAAI,CAAC,CAAnb,kCAAsd,CAAC,0CAA0C,UAAU,MAAM,IAAI,CAAC,CAAthB,kCAAyjB,CAAC,qCAAqC,UAAU,MAAM,IAAI,CAAC,CAApnB,kCAAupB,CAAC,0CAA0C,UAAU,MAAM,IAAI,CAAC,CAArnB,yBAA+oB,MAAM,IAAI,gCAAgC,CAAC,IAAI,+BAA+B,CAAC,MAAM,OAAO,IAAI,iCAAiC,CAAC,IAAI,+BAA+B,CAAC,MAAM,QAAQ,aAAa,cAAc,IAAI,wCAAwC,CAAC,KAAK,WAAW,IAAI,yCAAyC,CAAC,MAAM,QAAQ,IAAI,2CAA2C,EAAE,GAAG,CAAC,MAAM,CAAlhC,yBAA4iC,OAAO,KAlBl4rM,OAkB84rM,EAlB94rM,QAkBw5rM,EAAE,WAAW,KAAK,mBAAmB,KAAK,gBAAgB,KAAK,WAAW,IAAI,CAAC,CAAC,4BAA4B,CAArrC,yBAA+sC,OAAO,OAAO,CAAC,CAA9tC,wBAAuvC,YAAY,QAAQ,cAAc,CAAC,CAAtrC,gCAAutC,QAAQ,IAAI,kCAAkC,EAAE,GAAG,WAAW,IAAI,yBAAyB,CAAC,IAAI,sBAAsB,CAAC,CAAC,0BAA0B,CAA3xD,0BAAszD,CAA5hQ,eAA4iQ,CAAC,CAAv0D,0BAAk2D,MAAM,IAAI,yBAAyB,CAAC,KAAK,KAAK,IAAI,wBAAwB,CAAC,MAAM,IAAI,IAAI,UAAU,YAAY,CAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAA5N,0BAAuP,CAAx/D,0BAAmhE,CAArsD,yBAA+tD,CAAnxQ,eAAmyQ,CAAC,CAA9jE,0BAAylE,CAA3wD,yBAAqyD,OAAO,IAAI,uCAAuC,CAAC,KAAK,EAAE,QAAQ,KAAK,CAAC,CAA1b,0BAAqd,CAAttE,yBAAgvE,CAApgE,kCAAuiE,CAAz/Q,eAAygR,CAAC,CAApyE,yBAA8zE,CAAllE,kCAAqnE,IAAI,IAAI,UAAU,WAAW,MAAM,MAAM,GAAG,CAAC,CAA7oB,0BAAwqB,CAAz6E,yBAAm8E,CAAvtE,kCAA0vE,CAAxpE,yBAAkrE,CAAtuR,eAAsvR,CAAC,CAAjhF,yBAA2iF,CAA/zE,kCAAk2E,CAAhwE,yBAA0xE,QAAQ,aAAa,WAAW,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,CAA7gR,iBAA+hR,CAAC,CAAjrF,0BAA4sF,CAA93E,yBAAw5E,CAAjrF,4BAA8sF,CAAnwF,0BAA8xF,CAAh9E,yBAA0+E,OAAO,EAAE,IAAI,yCAAyC,CAAC,IAAI,CAAC,CAAnuR,iBAAqvR,CAAC,CAAv4F,yBAAi6F,CAArrF,kCAAwtF,CAA/4F,4BAA46F,CAAj+F,yBAA2/F,CAA/wF,kCAAkzF,KAAK,IAAI,UAAU,UAAW,MAAM,YAAY,MAAM,CAAC,CAAp8R,iBAAs9R,CAAC,CAAxmG,yBAAkoG,CAAt5F,kCAAy7F,CAAv1F,yBAAi3F,CAA1oG,4BAAuqG,CAA5tG,yBAAsvG,CAA1gG,kCAA6iG,CAA38F,yBAAq+F,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,CAAC,CAApsS,iBAAstS,CAA98I,UAAy9I,CAAC,CAAvoG,kCAA0qG,CAAxkG,yBAAkmG,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,CAAt2G,2BAAk4G,MAAM,IAAI,kCAAkC,CAAC,QAAQ,CAAC,CAAC,8BAA8B,WAAW,IAAI,wCAAwC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,QAAQ,CAAC,CAAzH,8BAAwJ,CAAC,mCAAmC,WAAW,IAAI,yBAAyB,CAAC,IAAI,uBAAuB,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,UAAU,MAAM,GAAG,iBAAiB,KAAK,GAAG,CAAC,CAAh/J,WAA4/J,CAA/W,8BAA8Y,CAArP,mCAAyR,iBAAiB,MAAM,GAAG,CAAC,CAAl2T,iBAAo3T,CAAC,CAAhe,8BAA+f,CAA/f,6BAA6hB,CAA9gI,6BAA4iI,CAA3jB,6BAAylB,CAA93E,0BAAy5E,CAAC,uCAAuC,CAAx6U,eAAw7U,CAAC,CAA7qB,6BAA2sB,CAAtF,uCAA8H,MAAM,KAAK,OAAO,IAAI,oCAAoC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,CAArtU,iBAAuuU,CAAC,CAAn1B,6BAAi3B,CAA5P,uCAAoS,CAAz5B,6BAAu7B,CAAx6I,4BAAq8I,CAA/V,uCAAuY,CAA5/B,6BAA0hC,CAA/zF,2BAA21F,CAAl0V,eAAk1V,CAAC,CAAvkC,8BAAsmC,MAAM,IAAI,oCAAoC,CAAC,KAAK,OAAO,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,QAAQ,IAAI,CAAC,CAAC,iBAAiB,cAAc,IAAI,gCAAgC,CAAC,MAAM,SAAS,SAAS,iBAAiB,KAAK,WAAW,IAAI,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,yBAAyB,CAAC,CAAxM,iBAA0N,CAA1N,gBAA2O,CAA7D,0BAAwF,QAAQ,cAAc,CAAC,CAA34V,iBAA65V,CAAC,CAAhT,iBAAkU,CAAlU,gBAAmV,CAAC,4BAA4B,SAAS,SAAS,KAAK,IAAI,+BAA+B,CAAC,IAAI,OAAO,IAAI,yBAAyB,CAAC,KAAK,IAAI,IAAI,sBAAsB,CAAC,MAAM,QAAQ,GAAG,OAAO,IAAI,uBAAuB,CAAC,KAAK,MAAM,KAAK,KAAK,EAAE,EAAE,EAAE,IAAI,+BAA+B,CAAC,IAAI,CAAC,CAAhnB,gBAAioB,CAAC,0BAA0B,CAAjoX,eAAipX,CAAC,CAA7qB,iBAA+rB,SAAS,SAAS,KAAK,IAAI,uBAAuB,CAAC,MAAM,MAAM,IAAI,wBAAwB,CAAC,KAAK,IAAI,IAAI,+BAA+B,CAAC,IAAI,QAAQ,GAAG,MAAM,IAAI,uBAAuB,CAAC,KAAK,OAAO,KAAK,KAAK,EAAE,EAAE,EAAE,IAAI,+BAA+B,CAAC,IAAI,CAAC,CAAC,sBAAsB,OAAO,KAAK,MAAM,KAAK,SAAS,SAAS,WAAW,IAAI,gCAAgC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,IAAI,gCAAgC,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B,OAAO,IAAI,CAAC,CAAC,sBAAsB,QAAQ,IAAI,CAAC,CAAC,sBAAsB,MAAM,KAAK,OAAO,KAAK,QAAQ,KAAK,gBAAgB,OAAO,YAAY,OAAO,WAAW,MAAM,CAAC,CAAtH,qBAA4I,CAAC,OAAO,CAApJ,qBAA0K,CAAC,IAAI,CAA/K,qBAAqM,CAAC,IAAI,UAAU,KAAK,WAAW,KAAK,cAAc,QAAQ,WAAW,OAAO,CAAC,CAAC,oBAAoB,OAAO,KAAK,aAAa,IAAI,CAAC,CAA1oZ,OAAkpZ,CAAC,oBAAoB,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,eAAe,KAAK,QAAQ,EAAE,QAAQ,KAAK,CAAC,CAA5oW,gBAA6pW,CAAC,CAAtmZ,eAAsnZ,2BAA2B,SAlB771M,OAkB681M,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,CAArrZ,eAAqsZ,UAAU,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAxuZ,eAAwvZ,UAAU,KAAK,eAAe,MAAM,CAAC,CAAC,WAAW,CAAj2W,iBAAm3W,CAA5iZ,aAA0jZ,2BAA2B,QAAQ,CAAC,CAA/E,YAA4F,CAA3mZ,aAAynZ,eAAe,KAAK,oBAAoB,OAAO,CAAC,CAA1J,YAAuK,CAAtrZ,aAAosZ,CAApsZ,aAAktZ,eAAe,IAAI,CAAC,CAAvN,YAAoO,CAAC,oBAAwC,CAA7Q,YAA0R,CAArD,oBAA0E,CAA1E,oBAAoB,eAAe,IAAI,CAA4E,CAAC,YAAY,SAAS,OAAO,CAAC,CAA7B,YAA0C,CAAl5Z,aAAg6Z,eAAe,KAAK,oBAAoB,OAAO,QAAQ,EAAE,WAAW,OAAO,iBAAiB,EAAE,EAAE,MAAM,KAAK,OAAO,IAAI,CAAC,CAA/K,YAA4L,CAApia,aAAkja,CAAlja,aAAgka,eAAe,IAAI,CAAC,CAA5O,WAAwP,CAAjwQ,WAA6wQ,CAA5ma,aAA0na,iBAAiB,KAAK,CAAC,CAAC,CAA1S,YAAuT,CAA3a,oBAAgc,CAA5U,YAAyV,CAA7c,oBAAke,CAAle,oBAAuf,eAAe,IAAI,CAAC,CAAvZ,YAAoa,CAAxhB,oBAA6iB,CAAzb,YAAsc,CAAC,kBAAkB,CAAzd,YAAse,CAAC,kBAAkB,eAAe,KAAK,WAAW,OAAO,CAAC,CAAhiB,YAA6iB,CAA7rZ,mBAAitZ,SAAS,SAAS,KAAK,EAAE,OAAO,EAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAjpB,YAA8pB,CAA9yZ,kBAAi0Z,QAAQ,QAAQ,GAAG,WAAW,KAAK,SAAS,SAAS,MAAW,EAAmB,OAAO,KAAK,KAAK,CAAC,CAAtxB,YAAmyB,CAA5V,iBAA8W,CAAC,CAA9pb,aAA4qb,eAAe,KAAK,WAAW,OAAO,CAAC,CAA32B,YAAw3B,CAAC,wBAAwB,CAA5mX,2BAAwoX,CAA76B,YAA07B,CAAjE,wBAA0F,CAAvoX,yBAAiqX,CAA7+B,YAA0/B,CAAjI,wBAA0J,CAAlqX,0BAA6rX,CAA9iC,YAA2jC,CAAlM,wBAA2N,CAA7rX,wBAAstX,QAAQ,EAAE,oBAAoB,MAAM,CAAC,CAAC,YAAY,SAAS,OAAO,CAAC,CAA7B,YAA0C,CAAric,aAAmjc,eAAe,KAAK,oBAAoB,OAAO,QAAQ,CAAC,CAAC,CAAjH,YAA8H,CAAznc,aAAuoc,CAAvoc,aAAqpc,eAAe,IAAI,CAAC,CAA9K,YAA2L,CAAl8C,oBAAu9C,CAAhN,YAA6N,CAAp+C,oBAAy/C,CAAz/C,oBAA8gD,eAAe,IAAI,CAAC,CAA3R,YAAwS,CAAC,wBAAwB,CAA/qY,2BAA2sY,CAA7V,YAA0W,CAAjE,wBAA0F,CAA1sY,yBAAouY,CAA7Z,YAA0a,CAAjI,wBAA0J,CAAruY,0BAAgwY,CAA9d,YAA2e,CAAlM,wBAA2N,CAAhwY,wBAAyxY,QAAQ,EAAE,oBAAoB,MAAM,CAAC,CAAC,gBAAgB,CAA9kd,aAA4ld,oBAAoB,OAAO,SAAS,OAAO,oBAAoB,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,aAAa,SAAS,OAAO,CAAC,CAA9B,aAA4C,CAAjud,aAA+ud,iBAAiB,OAAO,OAAO,oBAAoB,OAAO,SAAS,MAAM,CAAC,MAAM,2BAA2B,KAAK,gCAAgC,KAAK,IAAI,uBAAuB,EAAE,KAAM,kCAAkC,IAAI,sBAAsB,kCAAkC,IAAI,sBAAsB,oCAAoC,KAAK,sCAAsC,IAAI,2CAA2C,KAAK,0CAA0C,KAAK,mCAAmC,KAAK,gCAAgC,KAAK,qCAAqC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAK,uCAAuC,KAAK,uCAAuC,IAAI,CAAC,CAFnmqG,cAEknqG,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,CAAC,CAAC,wBAAwB,CAF388F,SAEq98F,oBAAoB,GAAG,UAAU,iBAAiB,GAAG,CAAC,CAAxF,wBAAiH,CAFh+8F,UAE2+8F,oBAAoB,GAAG,UAAU,kBAAkB,aAAa,CAAC,CAA7L,wBAAsN,CAFrk9F,SAE+k9F,CAAC,sBAAsB,CAAvP,wBAAgR,CAF/n9F,SAEyo9F,CAF18tF,mBAE89tF,UAAU,cAAc,CAAC,CAAvU,wBAAgW,CAAC,4BAA4B,WAAW,IAAI,UAAU,cAAc,CAAC,CAAC,mBAAmB,CAFxy9F,SAEkz9F,CAAlO,sBAAyP,CAApD,mBAAwE,CAF719F,SAEu29F,CAFxquF,mBAE4ruF,oBAAoB,GAAG,CAAC,CAA9H,mBAAkJ,CAFv69F,SAEi79F,CAAjW,sBAAwX,UAAU,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAApN,mBAAwO,CAF7/9F,SAEug+F,CAFx0uF,mBAE41uF,UAAU,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC,CAAlC,mBAAsD,CAFn3qL,QAE43qL,UAAU,IAAI,CAAC,CAAvX,oBAA4Y,WAAW,EAAE,CAAC,CAAC,CAAC,iBAlBh49M,OAkBw59M,EAAE,GAAG,CAAC,CAAC,uBAAuB,eAAe,KAAK,SAAS,SAAS,KAAK,EAAE,MAAM,KAAK,OAAO,IAAI,uBAAuB,QAAQ,GAAG,QAAQ,EAAE,oBAAoB,GAAG,CAAC,CAA9J,sBAAqL,CAAC,+BAA+B,QAAQ,CAAC,CAAC,CAF9qrL,OAEsrrL,CAAC,CAFvrrL,OAE+rrL,CAAC,qBAAqB,OAAO,KAAK,IAAI,qBAAqB,EAAE,IAAI,uBAAuB,CAAC,CANjwpM,IAMswpM,CAAC,CAAje,kBAAof,KAAK,CAAC,uBAAuB,CAF90rL,OAEs1rL,CAAC,CAFv1rL,OAE+1rL,CAA/J,qBAAqL,CAAj2B,mBAAq3B,KAAK,CAAvF,uBAA+G,CAFt6rL,OAE86rL,CAAC,CAF/6rL,OAEu7rL,CAAvP,qBAA6Q,CAA/1C,wBAAw3C,KAAK,CAApL,uBAA4M,CAFngsL,OAE2gsL,CAAC,CAF5gsL,OAEohsL,CAApV,qBAA0W,OAAO,IAAI,oBAAoB,CAAC,CAAnR,sBAA0S,CAFjmsL,OAEymsL,CAAC,CAF1msL,OAEknsL,CAAlb,qBAAwc,UAAU,YAAY,CAAC,CAAC,KAAK,IAAI,qBAAqB,EAAE,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAA1a,sBAAic,CAFxvsL,OAEgwsL,CAAC,CAFjwsL,OAEywsL,CAAzkB,qBAA+lB,CAAjmjB,OAAymjB,OAAO,KAAK,KAAK,EAAE,IAAI,qBAAqB,CAAC,GAAG,CAAC,CANv5jL,MAM85jL,CAAC,CAFh2sL,OAEw2sL,CAAxqB,qBAA8rB,CAAhsjB,OAAwsjB,OAAO,KAAK,KAAK,EAAE,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAFv7sL,OAE+7sL,CAAC,CAAj/B,uBAAygC,OAAO,KAAK,IAAI,qBAAqB,EAAE,IAAI,wBAAwB,UAAU,WAAkB,EAAE,CAAC,CAF1jtL,OAEkktL,CAAC,CAApnC,sBAA2oC,CAAr9B,+BAAq/B,UAAU,WAAkB,EAAE,CAAC,CAFzptL,OAEiqtL,CAAC,CAFlqtL,OAE0qtL,CAAC,CAA5tC,uBAAovC,OAAO,KAAK,IAAI,qBAAqB,EAAE,EAAE,EAAE,IAAI,uBAAuB,CAAC,CAF1wtL,OAEkxtL,CAAC,CAFnxtL,OAE2xtL,CAAC,CAA70C,sBAAo2C,CAA9qC,+BAA8sC,UAAU,YAAY,CAAC,CAAC,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAvsC,qBAA6tC,oBAAoB,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAlxC,qBAAwyC,CAA1ykB,OAAkzkB,MAAM,KAAK,OAAO,IAAI,CAAC,CAAv0C,qBAA61C,CAAl7jB,aAAg8jB,MAAM,KAAK,QAAQ,KAAK,YAAY,OAAO,gBAAgB,MAAM,CAAC,CAA76C,qBAAm8C,IAAI,MAAM,KAAK,OAAO,IAAI,QAAQ,MAlBrnhN,cAkByohN,IAAI,UAAU,GAAG,CAAC,CAA3gD,qBAAiiD,CAAtnkB,aAAookB,IAAI,UAAU,UAAW,MAAM,oBAAoB,IAAK,CAAC,CAAxmD,qBAA8nD,CAA/9K,oBAAo/K,IAAI,UAAU,MAAM,IAAI,CAAC,CAA5qD,qBAAksD,CAAniL,mBAAujL,CAAC,CAA5ykB,aAA0zkB,IAAI,UAAU,UAAW,IAAI,CAAC,CAAC,sBAAsB,WAAW,WAAW,oBAAoB,IAAI,SAAS,SAAS,OAAO,EAAE,KAAK,EAAE,QAAQ,EAlBlgiN,QAkB4giN,IAAI,IAAI,MAAM,KAAK,WAAW,OAAO,UAAU,IAAI,qCAAqC,YAAY,IAAI,sCAAsC,CAAC,UAAU,CAAC,CAAC,uBAAuB,EAAE,KAAK,OAAO,GAAG,CAAC,eAAe,EAAE,KAAK,QAAQ,CANlriL,qBAMwsiL,CAAhX,sBAAuY,wBAAwB,SAAS,MAAM,KAAK,IAAI,6BAA6B,gBAAgB,SAAS,MAAM,KAAK,IAAI,4BAA4B,CAAC,CAAC,CAA1hB,qBAAgjB,OAAO,QAAQ,IAAI,CAAC,CAApkB,qBAA0lB,CAAC,6BAA6B,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAhqB,sBAAurB,MAAM,IAAI,2CAA2C,CAAC,CANjggN,KAMuggN,CAAnvB,sBAA0wB,CAAC,4BAA4B,CAAvyB,sBAA8zB,MAAM,IAAI,0CAA0C,CAAC,CAAC,+BAA+B,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,SAAS,OAAO,WAAW,IAAI,4BAA4B,WAAW,IAAI,oBAAoB,iBAAiB,aAAa,IAAI,CAAC,CAAC,kBAAkB,CAAjke,uBAAyle,CAAC,kBAAkB,CAA5me,uBAAooe,QAAQ,GAAG,eAAe,IAAI,CAAC,CAAC,oBAAoB,MAAM,KAAK,OAAO,KAAK,SAAS,SAAS,SAAS,OAAO,QAAQ,KAAK,gBAAgB,OAAO,YAAY,OAAO,YAAY,EAAE,WAAW,UAAU,CAAC,CAAxK,oBAA6L,IAAI,CAAl0P,sBAAy1P,QAAQ,IAAI,CAAC,CAArO,oBAA0P,IAAI,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAjU,mBAAqV,CAA1nO,oBAA+oO,IAAI,CAA/+P,sBAAsgQ,CAArY,mBAAyZ,CAAnoN,kBAAspN,IAAI,CAAjjQ,sBAAwkQ,CAAvc,mBAA2d,CAArqN,kBAAwrN,IAAI,CAAnnQ,sBAA0oQ,QAAQ,IAAI,CAAC,CAAthB,mBAA0iB,CAA/0O,oBAAo2O,IAAI,CAAnkB,mBAAulB,CAAj0N,kBAAo1N,IAAI,CAA9mB,mBAAkoB,CAA50N,kBAA+1N,IAAI,QAAQ,MAAM,CAAC,CAAxqB,mBAA4rB,CAAj+O,mBAAq/O,CAAC,yBAAyB,CAF9o4G,UAEyp4G,CAArvB,mBAAywB,CAAn/N,iBAAqgO,CAA1E,yBAAoG,CAFzt4G,UAEou4G,CAAh0B,mBAAo1B,CAA9hO,iBAAgjO,CAArJ,yBAA+K,CAFpy4G,UAE+y4G,QAAQ,KAAK,CAAC,CAAz5B,oBAA86B,OAAO,MAAM,KAAK,OAAO,IAAI,CAAC,CAA58B,oBAAi+B,CAFr44G,UAEg54G,QAAQ,KAAK,SAAS,SAAS,MAAM,KAAK,OAAO,KAAK,YAAY,MAAM,WAAW,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,qBAAqB,CANtjpL,MAM6jpL,CAN5x1M,KAMky1M,EAAE,CAApC,qBAA0D,CAN3lpL,MAMkmpL,CANj01M,KAMu01M,IAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,KAAK,CAAC,CAAhH,qBAAsI,CANl0nL,UAM60nL,CAAx6E,sBAA+7E,CAAtkJ,mBAA0lJ,CANx3nL,UAMm4nL,CAArmJ,mBAAynJ,CAFt7zL,QAE+7zL,iBAAiB,IAAI,+BAA+B,CAAC,KAAK,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAA9tJ,mBAAkvJ,aAAa,IAAI,CAAC,CAApwJ,mBAAwxJ,CANpprL,OAM4prL,CAAhyJ,mBAAozJ,CAFjn0L,QAE0n0L,UAAU,WAAgB,GAAG,oBAAoB,IAAI,MAAM,IAAI,iCAAiC,CAAC,IAAI,sBAAsB,CAAC,CAAz7J,mBAA68J,CANz0rL,OAMi1rL,EAAE,CAAv9J,mBAA2+J,CAFxy0L,QAEiz0L,EAAE,MAAM,IAAI,iCAAiC,CAAC,IAAI,oBAAoB,CAAC,IAAI,mBAAmB,CAAC,CAAzlJ,sBAAgnJ,CANt+rL,OAM8+rL,CAAxnJ,sBAA+oJ,CAFt80L,OAE880L,KAAK,CAAnxJ,sBAA0yJ,QAAQ,EAAE,WAAW,OAAO,eAAe,IAAI,CAAC,CAAnuJ,sBAA0vJ,CAFjj1L,OAEyj1L,KAAK,CAA93J,qBAAo5J,CAAC,CAAtoK,uBAA8pK,CAAtzJ,sBAA60J,CAFpo1L,OAE4o1L,CAAC,CAF7o1L,OAEqp1L,CAAr9J,oBAA0+J,CAAC,CAA5tK,uBAAovK,UAAU,YAAY,CAAC,CAAC,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAh8J,sBAAu9J,CAAt9E,+BAAs/E,WAAW,IAAI,mCAAmC,CAAC,CAAC,mBAAmB,CAArrK,qBAA2sK,CAAzC,mBAA6D,CAF/51L,QAEw61L,CAAjnK,sBAAwoK,CAA/vK,qBAAqxK,CAA9pK,sBAAqrK,CAF5+1L,QAEq/1L,iBAAiB,IAAI,qCAAqC,CAAC,CAA9M,mBAAkO,CAAhoH,sBAAupH,CAApyK,sBAA2zK,CAA9qH,sBAAqsH,MAAM,IAAI,2CAA2C,iBAAiB,IAAI,qCAAqC,CAAC,CAN1u3M,IAM+u3M,CAAC,gCAAgC,CAN91tL,OAMs2tL,QAAQ,EAAE,eAAe,IAAI,CAAC,CAAxgM,mBAA4hM,CAFz12L,OAEi22L,OAAO,CAA3iM,mBAA+jM,CAF532L,OAEo42L,QAAQ,QAAQ,cAAc,CAAC,CAAC,0BAA0B,CAN/5qL,UAM06qL,CAAC,wBAAwB,CANn8qL,UAM88qL,WAAW,IAAI,qCAAqC,CAAC,CAA9H,0BAAyJ,CAN9hrL,SAMwirL,OAAO,CAA1K,0BAAqM,CAN1krL,SAMolrL,QAAQ,CAAjL,wBAA0M,CANrnrL,SAM+nrL,OAAO,CAA3N,wBAAoP,CAN/prL,SAMyqrL,QAAQ,QAAQ,cAAc,CAAC,CAAnU,0BAA8V,CAAh6B,mBAAo7B,CANr1uL,OAM61uL,CAA57B,mBAAg9B,CAFlz3L,QAE2z3L,CAAjX,wBAA0Y,CANn5uL,OAM25uL,CAAlZ,wBAA2a,CAFr33L,QAE833L,MAAM,IAAI,uCAAuC,CAAC,CAA5gB,0BAAuiB,EAAE,CAA3mC,mBAA+nC,CANhivL,OAMwivL,EAAE,CAAzoC,mBAA6pC,CAF//3L,QAEwg4L,EAAE,CAAhkB,wBAAylB,CANlmvL,OAM0mvL,EAAE,CAAnmB,wBAA4nB,CAFtk4L,QAE+k4L,EAAE,MAAM,IAAI,uCAAuC,CAAC,CAAjyC,mBAAqzC,CAA/1H,+BAA+3H,CAA7uB,wBAAswB,CAAx5H,+BAAw7H,WAAW,IAAI,gCAAgC,CAAC,WAA/mP,iBAA2oP,GAAG,UAAU,WAAgB,GAAG,MAAM,IAAI,QAAQ,CAAC,CAAC,IAAI,UAAU,WAAgB,GAAG,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAK,UAAU,WAAgB,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAltP,kBAA+uP,GAAG,UAAU,WAAgB,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,IAAI,UAAU,WAAgB,GAAG,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAK,UAAU,WAAgB,GAAG,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,4BAA4B,MAAM,0CAA0C,KAAK,uCAAuC,KAAK,sCAAsC,KAAK,mCAAmC,GAAG,CAAC,CANj+pN,IAMs+pN,yBAAyB,IAAI,qCAAqC,KAAK,mCAAmC,KAAK,gCAAgC,KAAK,6BAA6B,IAAI,IAAI,KAAK,MAAM,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,4BAA4B,KAAK,kCAAkC,KAAK,uCAAuC,UAAU,oCAAoC,IAAI,oCAAoC,IAAI,uCAAuC,MAAO,wCAAwC,KAAK,qCAAqC,KAAK,uCAAuC,IAAI,iCAAiC,KAAK,mCAAmC,IAAI,2BAA2B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,+BAA+B,GAAG,CAAC,GAAG,CAAC,IAAI,8BAA8B,KAAK,oCAAoC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,iCAAiC,KAAK,6BAA6B,IAAI,CAAC,CANt4rN,IAM24rN,CAN1mrN,KAMgnrN,CANj5rN,GAMq5rN,CANpnrN,KAM0nrN,2BAA2B,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAM,+BAA+B,EAAE,CAAC,EAAE,CAAC,GAAG,8BAA8B,KAAK,6BAA6B,KAAK,iCAAiC,KAAK,oCAAoC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANltrN,GAMstrN,yBAAyB,KAAK,mCAAmC,KAAK,qCAAqC,KAAK,gCAAgC,KAAK,6BAA6B,KAAK,4BAA4B,KAAK,kCAAkC,KAAK,uCAAuC,KAAK,oCAAoC,KAAK,oCAAoC,IAAI,wCAAwC,KAAK,qCAAqC,KAAK,uCAAuC,IAAI,iCAAiC,KAAK,mCAAmC,IAAI,CAAC,CANlysN,GAMsysN,CANtysN,GAM0ysN,CANr9sN,KAM29sN,CANhzsN,GAMozsN,CAAC,eAAe,8BAA8B,IAAI,oBAAoB,2BAA2B,IAAI,mBAAmB,6BAA6B,IAAI,4BAA4B,oCAAoC,IAAI,4BAA4B,iCAAiC,IAAI,mBAAmB,CAAC,CAAC,aAAa,SAAS,SAAS,KAAK,IAAI,0BAA0B,IAAI,IAAI,0BAA0B,MAAM,KAAK,KAAK,EAAE,IAAI,0BAA0B,EAAE,GAAG,QAAQ,MAAM,UAAU,KAlBnkxN,OAkB+kxN,EAAE,OAAO,KAAK,QAAQ,KAAK,WAAW,WAAW,oBAAoB,UAAU,UAAU,IAAI,UAAU,IAAI,6BAA6B,QAAQ,IAAI,oCAAoC,IAAI,sCAAsC,cAAc,IAAI,iCAAiC,WAAW,IAAI,8BAA8B,WAAW,IAAI,4BAA4B,WAAW,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC,uBAAuB,EAAE,KAAK,OAAO,GAAG,CAAC,eAAe,EAAE,KAAK,QAAQ,CAFnmzG,uBAE2nzG,CAAxrB,aAAssB,iBAAiB,KAAK,IAAI,+BAA+B,CAAC,IAAI,wBAAwB,SAAS,MAAM,KAAK,MAAM,gBAAgB,SAAS,MAAM,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAA13B,aAAw4B,KAAK,IAAI,MAAM,IAAI,6BAA6B,YAAY,KAAK,GAAG,EAAE,IAAI,4BAA4B,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,MAAM,IAAI,6BAA6B,CAAC,IAAI,mBAAmB,UAAU,IAAI,mCAAmC,eAAe,IAAI,wCAAwC,YAAY,IAAI,qCAAqC,YAAY,IAAI,qCAAqC,eAAe,IAAI,uCAAuC,CAAC,CAAC,sBAAsB,MAAM,IAAI,kCAAkC,UAAU,IAAI,sCAAsC,eAAe,IAAI,2CAA2C,YAAY,IAAI,wCAAwC,YAAY,IAAI,uCAAuC,CAAC,CAAC,kBAAkB,MAAM,IAAI,8BAA8B,UAAU,IAAI,kCAAkC,eAAe,IAAI,uCAAuC,YAAY,IAAI,oCAAoC,YAAY,IAAI,mCAAmC,CAAC,CAAC,8BAA8B,MAAM,IAAI,qCAAqC,UAAU,IAAI,wCAAwC,CAAC,CAAC,kBAAkB,UAAU,EAAE,YAAY,IAAI,4BAA4B,CAAC,CAA3E,kBAA8F,CAA9F,kBAAiH,EAAE,MAAM,IAAI,uCAAuC,OAAO,IAAI,sCAAsC,CAAC,CAAtN,kBAAyO,EAAE,UAAU,IAAI,4BAA4B,CAAC,CAAtR,kBAAyS,IAAI,OAAO,IAAI,4BAA4B,CAAC,CAAC,oBAAoB,QAAQ,KAAK,gBAAgB,WAAW,YAAY,MAAM,CAAC,CAAC,0BAA0B,YAAY,KAAK,OAAO,QAAQ,SAAS,QAAQ,CAAC,CAA5E,yBAAsG,OAAO,YAAY,sBAAsB,YAAY,IAAI,WAAW,OAAO,YAAY,EAAE,eAAe,OAAO,eAAe,KAAK,YAAY,OAAO,UAAU,OAAO,UAAU,IAAI,uBAAuB,YAAY,eAAe,mBAAmB,wBAAwB,UAAU,sBAAsB,OAAO,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,SAAS,SAAS,KAAK,IAAI,IAAI,IAAI,WAAW,MAAM,CAAC,CANj/zN,IAMs/zN,CAAn8F,aAAi9F,oBAAoB,KAAM,UAAU,YAAY,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CANhk0N,IAMqk0N,CAAlhG,YAA+hG,CAFty3G,SAEgz3G,UAAU,WAAkB,GAAG,QAAQ,CAAC,CAAC,CANro0N,IAM0o0N,CAAvlG,YAAomG,CAFvy3G,UAEkz3G,UAAU,YAAY,CAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CANps0N,IAMys0N,CAAtoC,kBAAypC,aAAa,GAAG,CAAC,CAN7u0N,IAMkv0N,CAAz1B,mBAA62B,CAAC,CAAC,qBAAqB,WAAW,IAAI,CAAC,CAN7y0N,IAMkz0N,CAAp3C,8BAAm5C,aAAa,IAAI,YAAY,IAAI,CAAC,CANn30N,IAMw30N,CAA17C,6BAAw9C,CAAC,CAA96B,0BAAy8B,YAAY,IAAI,CAAC,CANn80N,IAMw80N,CAA/9B,0BAA0/B,UAAU,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,oBAAoB,GAAG,CAAC,CAN5i1N,IAMij1N,CAAxkC,yBAAkmC,CAN14/L,aAMw5/L,oBAAoB,GAAG,QAAQ,EAAE,CAAC,CAN3n1N,IAMgo1N,CAAvpC,yBAAirC,OAAO,MAAM,KAAK,QAAQ,yBAAyB,UAAU,MAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,CAAC,CANxy1N,IAM6y1N,CAN5g1N,KAMkh1N,CAA10C,yBAAo2C,OAAO,CANp11N,GAMw11N,CANvj1N,KAM6j1N,CAAr3C,yBAA+4C,OAAO,MAAM,IAAI,CAAC,CAN970N,GAMk80N,CAA31H,aAAy2H,UAAU,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CANj/0N,GAMq/0N,CAA94H,YAA25H,CAFlq5G,SAE4q5G,oBAAoB,IAAI,UAAU,WAAiB,GAAG,2BAA2B,aAAa,CAAC,CAAC,EAAG,CAAC,GAAI,CAAC,EAAE,CAAC,CANxn1N,GAM4n1N,CAArhI,YAAkiI,CAFzy5G,QAEkz5G,CAAC,2BAA2B,oBAAoB,GAAG,CAAC,CANts1N,GAM0s1N,CAAnmI,YAAgnI,CAFnz5G,UAE8z5G,UAAU,KAAK,oBAAoB,IAAI,2BAA2B,QAAQ,UAAU,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAN701N,GAMi11N,CAAC,uBAAuB,CAAlvE,kBAAqwE,SAAS,SAAS,KAAK,IAAI,sCAAsC,IAAI,IAAI,mCAAmC,CAAC,CANz+1N,GAM6+1N,CAA3J,uBAAmL,CAAzsC,qBAA+tC,CAN3h2N,GAM+h2N,CAA7M,uBAAqO,CAA1mE,oBAA+nE,YAAY,KAAK,IAAI,6BAA6B,EAAE,KAAK,CAAC,CANto2N,GAM0o2N,CAAnhF,kBAAsiF,aAAa,GAAG,CAAC,CAN9q2N,GAMkr2N,CAAlvG,qBAAwwG,CAAC,CAAp+F,kBAAu/F,WAAW,GAAG,CAAC,CAN3u2N,GAM+u2N,CAAlyE,mBAAszE,CAAC,CAAx8C,qBAA89C,WAAW,GAAG,CAAC,CANzy2N,GAM6y2N,CAA3zF,8BAA01F,YAAY,GAAG,CAAC,CAN512N,GAMg22N,CAA92F,6BAA44F,QAAQ,QAAQ,GAAG,MAAM,IAAI,OAAO,IAlB7s6N,cAkB+t6N,IAAI,QAAQ,aAAa,eAAe,OAAO,aAAa,IAAI,WAAW,IAAI,oCAAoC,CAAC,CANxi3N,GAM4i3N,CAA/gF,0BAA0iF,MAAM,KAAK,OAAO,KAAK,oBAAoB,GAAG,CAAC,CANtn3N,GAM0n3N,CAA7lF,yBAAunF,OAAO,CAN3p3N,GAM+p3N,CAAloF,yBAA4pF,QAAQ,MAAM,KAAK,OAAO,KAAK,KAAK,IAAI,IAAI,IAAI,YAAY,MAAM,WAAW,KAAK,CAAC,CAN5w3N,GAMgx3N,CAAnvF,yBAA6wF,OAAO,MAAM,IAAI,4BAA4B,QAAQ,kBAAkB,YAAY,KAAK,UAAU,IAAI,CAAC,WAAW,mBAAmB,GAAG,UAAU,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,UAAU,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAK,UAAU,WAAiB,EAAE,CAAC,CAAC,MAAM,6CAA6C,QAAQ,0CAA0C,KAAK,qCAAqC,IAAI,oBAAoB,CAAC,CAN9o5N,IAMmp5N,sCAAsC,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,qDAAqD,IAAI,oCAAoC,KAAK,sCAAsC,KAAK,+CAA+C,IAAI,CAAC,CANz55N,IAM855N,CAN7n5N,KAMmo5N,CANp65N,GAMw65N,CANvo5N,KAM6o5N,oCAAoC,QAAQ,sCAAsC,KAAK,+CAA+C,IAAI,CAAC,CAN7m5N,GAMin5N,sCAAsC,KAAK,qDAAqD,IAAI,+CAA+C,IAAI,CAAC,CANzw5N,GAM6w5N,CANx75N,KAM875N,CANnx5N,EAMsx5N,CANj85N,KAMu85N,+CAA+C,IAAI,CAAC,CANh15N,GAMo15N,CANp15N,GAMw15N,CANng6N,KAMyg6N,CAN915N,GAMk25N,CAAC,eAAe,oCAAoC,IAAI,mBAAmB,sCAAsC,IAAI,mBAAmB,CAAC,CAAC,kBAAkB,CAAC,mBAAmB,QAAQ,KAAK,CAAC,CAApD,kBAAuE,CAAC,uBAAuB,QAAQ,IAAI,CAAC,CAA5G,kBAA+H,CAAC,oBAAoB,QAAQ,KAAK,CAAC,CAAlK,kBAAqL,CAF/9+K,KAEq++K,EAAE,OAAO,QAAQ,IAAI,CAAC,CAAC,sBAAsB,KAAK,CAAC,gCAAgC,WAAW,MAAM,CAAC,CAA9E,sBAAqG,KAAK,CAA9E,gCAA+G,CAA3I,sBAAkK,KAAK,CAA3I,gCAA4K,EAAE,UAAU,IAAI,CAAC,CAAC,sBAAsB,WAAW,IAAI,qCAAqC,WAAW,IAAI,uCAAuC,WAAW,WAAW,SAAS,SAAS,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC,CAAtM,sBAA6N,CAAC,4BAA4B,SAAS,SAAS,SAAS,KAAK,2BAA2B,MAAM,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAjV,sBAAwW,CAAlkB,uBAA0lB,QAAQ,KAAK,SAAS,SAAS,OAAO,KAAK,MAAM,IAAI,2CAA2C,OAAO,IAAI,0CAA0C,CAAC,CAAthB,sBAA6iB,CAA3uB,+BAA2wB,QAAQ,KAAK,CAAC,CAA3lB,sBAAknB,CAAC,kCAAkC,MAAM,IAAI,6CAA6C,CAAC,CAA7sB,sBAAouB,CAF17gL,KAhB7++C,OAkBo7/N,EAAE,MAAM,IAAI,uCAAuC,UAAU,IAAI,qCAAqC,CAAC,CAAx1B,sBAA+2B,CAFrkhL,KAE2khL,EAAE,MAAM,IAAI,gDAAgD,YAAY,IAAI,qDAAqD,CAAC,CAAv/B,sBAA8gC,CAFpuhL,KAE0uhL,GAAG,WAAW,EAAE,WAAW,CAAC,CAAhjC,sBAAukC,CAF7xhL,KAEmyhL,EAAE,OAAO,CAAtlC,sBAA6mC,CAFn0hL,KAEy0hL,EAAE,QAAQ,QAAQ,cAAc,CAAC,CAAppC,sBAA2qC,CAAC,+BAA+B,WAAW,IAAI,4CAA4C,CAAC,KAAK,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAjuyE,qBAAuvyE,CAAj0C,sBAAw1C,iBAAiB,IAAI,6BAA6B,CAAC,IAAI,0BAA0B,cAAc,IAAI,oCAAoC,WAAW,KAAK,GAAG,EAAE,IAAI,8BAA8B,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAh+yE,qBAAs/yE,CAAhkD,sBAAulD,CAAz3C,4BAAs5C,YAAY,IAAI,4BAA4B,CAAC,CAAvlzE,qBAA6mzE,CAAvrD,sBAA8sD,CAA3lC,kCAA8nC,MAAM,IAAI,iCAAiC,CAAC,CAAntzE,qBAAyuzE,CAAnzD,sBAA00D,EAAE,YAAY,cAAc,EAAE,EAAE,IAAI,oCAAoC,IAAI,oCAAoC,SAAS,SAAS,SAAS,MAAM,CAAC,CAAl5zE,qBAAw6zE,CAAl/D,sBAAygE,CAF/xhK,aAE6yhK,aAAa,KAAK,IAAI,yCAAyC,EAAE,IAAI,uCAAuC,CAAC,KAAK,CAAC,CAN9+/N,IAMm//N,CAA/oE,sBAAsqE,CAAh4E,uBAAw5E,MAAM,KAAK,cAAc,IAAI,CAAC,CANpn/N,GAMwn/N,CAA5oF,kBAA+pF,CANrinM,OAM6inM,CAAr9E,uBAA6+E,aAAa,GAAG,CAAC,CAN5r/N,GAMgs/N,CAAC,mBAAmB,CAN9mnM,OAMsnnM,CAA9hF,uBAAsjF,YAAY,IAAI,aAAa,IAAI,CAAC,CANtx/N,GAM0x/N,CAAl4E,sBAAy5E,CAAnnF,uBAA2oF,MAAM,KAAK,cAAc,GAAG,CAAC,CANt2/N,GAM02/N,CAAl9E,sBAAy+E,CAAnsF,uBAA2tF,OAAO,aAAa,CAAC,CAAC,MAAM,qBAAqB,IAAI,KAAK,uBAAuB,KAAK,yBAAyB,IAAI,6BAA6B,IAAI,IAAI,+BAA+B,IAAI,CAAC,CANjihO,IAMsihO,2BAA2B,IAAI,sBAAsB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,wBAAwB,IAAI,CAAC,CANhsgO,GAMosgO,2BAA2B,GAAG,CAAC,CANnugO,GAMuugO,CANvugO,GAM2ugO,CANt5gO,KAM45gO,CANjvgO,GAMqvgO,CAAC,eAAe,sBAAsB,IAAI,mBAAmB,wBAAwB,IAAI,qBAAqB,CAAC,CAAC,QAAQ,SAAS,SAAS,QAAQ,MAAM,WAAW,IAAI,uBAAuB,cAAc,IAAI,4BAA4B,QAAQ,IAAI,sBAAsB,MAAM,IAAI,yBAAyB,UAAU,IAAI,wBAAwB,YAAY,IAAI,0BAA0B,WAAW,WAAW,YAAY,IAAI,QAAQ,EAAE,UAAU,MAAM,IAAI,oBAAoB,KAAM,oBAAoB,OAAO,CAAC,UAAU,QAAQ,KAAK,CAAC,CAAna,OAA2a,CAAC,WAAW,UAAU,MAAM,GAAG,QAAQ,CAAC,CAAC,CAApd,OAA4d,CAAC,YAAY,QAAQ,EAAE,UAAU,MAAM,EAAE,CAAC,CAAj70G,eAAi80G,CAAthB,QAA+hB,UAAU,IAAI,gCAAgC,QAAQ,IAAI,6BAA6B,CAAC,CAAC,MAAM,SAAS,SAAS,WAAW,OAAO,YAAY,KAAK,aAAa,KAAK,QAAQ,YAAY,CAAC,CAAlG,MAAyG,IAAI,CAAC,UAAU,UAAU,KAAK,OAAO,IAAI,CAAC,CAAnJ,MAA0J,IAAI,OAAO,CAArK,MAA4K,IAAI,KAAK,CAAvE,UAAkF,OAAO,CAAzF,UAAoG,KAAK,oBAAoB,GAAG,CAAuE,CAAC,eAAe,OAAO,IAAI,WAAW,IAAI,4BAA4B,MAAM,KAAK,QAAQ,KAAK,CAAC,WAAW,YAAY,SAAS,IAAI,sjEAAwjE,OAAO,QAAQ,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,MAAM,CAAC,OAAO,aAAa,KAAK,CAAC,CAAC,cAAc,YAAY,mBAAmB,oBAAoB,KAAK,iBAAiB,KAAK,YAAY,IAAI,CAAC,CAA7G,cAA4H,CAA5H,cAA2I,EAAE,MAAM,IAAI,4BAA4B,eAAe,gBAAgB,CAAC,CAAC,eAAe,QAAQ,YAAY,CAAC,CAApC,eAAoD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,CAAnF,eAAmG,QAAQ,KAAK,IAAI,iBAAiB,CAAC,CAAtI,eAAsJ,KAAK,KAAK,IAAI,sBAAsB,CAAC,CAAC,gBAAgB,QAAQ,YAAY,CAAC,CAArC,gBAAsD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,CAArF,gBAAsG,KAAK,KAAK,IAAI,iBAAiB,CAAC,CAAtI,gBAAuJ,KAAK,KAAK,IAAI,sBAAsB,CAAC,CAAC,sBAAsB,CAAC,qBAAqB,mBAAmB,gBAAgB,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,YAAY,MAAM,WAAW,gBAAgB,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,YAAY,MAAM,kBAAkB,KAAK,KAAK,UAAU,KAAK,KAAK,oBAAoB,OAAO,YAAY,OAAO,sBAAsB,IAAI,IAAI,cAAc,IAAI,IAAI,UAAU,qBAAqB,GAAG,QAAQ,CAAC,CAAC,qBAAqB,UAAU,qBAAqB,GAAG,QAAQ,CAAC,CAAC,sBAAsB,UAAU,sBAAsB,GAAG,QAAQ,CAAC,WAAnI,qBAAmK,GAAG,QAAQ,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,GAAK,QAAQ,CAAC,CAAC,CAAC,WAA5lB,qBAA4nB,GAAG,sBAAsB,IAAI,IAAI,cAAc,IAAI,GAAG,CAAC,GAAK,sBAAsB,MAAM,IAAI,cAAc,MAAM,GAAG,CAAC,CAAC,WAAnS,sBAAoU,GAAG,UAAU,MAAM,EAAE,CAAC,IAAI,UAAU,MAAM,EAAE,CAAC,IAAI,UAAU,MAAM,KAAK,CAAC,GAAK,UAAU,MAAM,EAAE,CAAC,CAAC,MAAM,iBAAiB,KAAK,sBAAsB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,CANhwqO,KAMswqO,iBAAiB,QAAQ,sBAAsB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,MAAM,gCAAgC,MAAM,8BAA8B,IAAI,mCAAmC,KAAK,2BAA2B,KAAK,iCAAiC,MAAM,8BAA8B,KAAK,+BAA+B,KAAK,kCAAkC,KAAK,sCAAsC,IAAI,kCAAkC,KAAK,kCAAkC,KAAK,8BAA8B,KAAK,+BAA+B,KAAK,qCAAqC,MAAM,0CAA0C,KAAK,8BAA8B,MAAM,sCAAsC,KAAK,uCAAuC,KAAK,+CAA+C,KAAK,sDAAsD,IAAI,iCAAiC,KAAK,iCAAiC,KAAK,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,uCAAuC,IAAI,CAAC,MAAM,CANp2sO,KAM02sO,KAAK,CAN/2sO,KAMq3sO,iCAAiC,QAAQ,iCAAiC,QAAQ,iCAAiC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,iCAAiC,KAAK,uCAAuC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CAAC,aAAa,SAAS,OAAO,MAAM,KAAK,QAAQ,KAAK,eAAe,MAAM,CAAC,CAAC,qBAAqB,CAAjG,aAA+G,CAAC,mBAAmB,CAAnI,aAAiJ,CAAjJ,YAA8J,CAAC,oBAAoB,SAAS,QAAQ,CAAC,CAAC,yBAAyB,WAAW,IAAI,iCAAiC,CAAC,CAA1E,wBAAmG,QAAQ,QAAQ,GAAG,CAAC,CAAvH,yBAAiJ,CAF1wwF,kBAE6xwF,cAAc,IAAI,sBAAsB,CAAC,CAAnS,mBAAuT,CANzq8N,KAM+q8N,WAAW,IAAI,iCAAiC,CAAC,CAA9W,mBAAkY,CANr/7N,aAMmg8N,eAAe,IAAI,sBAAsB,CAAC,CAAC,kBAAkB,CAA7jB,aAA2kB,CAA/f,qBAAqhB,CAAjmB,aAA+mB,CAA/f,mBAAmhB,CAAnoB,aAAipB,OAAO,IAAI,CAAC,CAAlH,kBAAqI,CAAhrB,aAA8rB,CAFv9+M,QAEg++M,CAA3nB,qBAAipB,CAA7tB,aAA2uB,CAFpg/M,QAE6g/M,CAApoB,mBAAwpB,CAAxwB,aAAsxB,CAF/i/M,QAEwj/M,SAAS,QAAQ,CAAC,CAAruB,qBAA2vB,MAAM,IAAI,iCAAiC,UAAU,KAAK,WAAW,IAAI,CAAC,CAN/0uO,GAMm1uO,CAAz0B,qBAA+1B,CAFz3rG,cAhB3xmI,QAkB2qyO,GAAG,CAAC,CAA13B,qBAAg5B,CAA59B,aAA0+B,WAAW,IAAI,CAAC,CAA96B,qBAAo8B,CAF3+8M,YAEw/8M,uBAAuB,IAAI,4BAA4B,wBAAwB,IAAI,2BAA2B,CAAC,CAAhkC,qBAAslC,CAAC,4BAA4B,SAAS,OAAO,YAAY,CAAC,CAAC,CAAjpC,qBAAuqC,CAAhF,2BAA4G,aAAa,uBAAuB,IAAI,4BAA4B,wBAAwB,IAAI,2BAA2B,CAAC,CAA/zC,qBAAq1C,CAA9P,2BAA0R,YAAY,0BAA0B,IAAI,4BAA4B,2BAA2B,IAAI,2BAA2B,CAAC,CAAl/C,qBAAwgD,CAAjb,2BAA6c,YAAY,YAAY,cAAc,IAAI,2BAA2B,CAAC,CAA1mD,qBAAgoD,CAFr+gN,OAE6+gN,CAAC,CANxt+N,aAMsu+N,CAAhkB,2BAA4lB,aAAa,uBAAuB,EAAE,wBAAwB,CAAC,CAAC,CAApxC,kBAAuyC,CANr1+N,aAMm2+N,CAApxD,qBAA0yD,CANz3+N,aAMu4+N,CAApxD,mBAAwyD,CAN35+N,aAMy6+N,CAAhuD,yBAA0vD,CANn8+N,aAMi9+N,QAAQ,KAAK,gBAAgB,WAAW,YAAY,QAAQ,eAAe,OAAO,WAAW,MAAM,CAAC,CAAC,oBAAoB,WAAW,GAAG,CAAC,CAAnC,mBAAuD,YAAY,cAAc,GAAG,CAAC,CAAC,gCAAgC,CAAC,gCAAgC,YAAY,KAAK,aAAa,IAAI,CAAC,CAApG,+BAAoI,aAAa,CAAhH,+BAAgJ,aAAa,WAAW,IAAI,CAAC,CAA9M,gCAA+O,CAAC,yBAAyB,CAAzQ,gCAA0S,CAAC,yBAAyB,CAAnS,gCAAoU,CAArH,yBAA+I,CAA9V,gCAA+X,CAArH,yBAA+I,OAAO,IAAI,qCAAqC,CAAC,CAN9/yO,IAMmgzO,CAAhf,gCAAihB,CAAjS,yBAA2T,CAN9jzO,IAMmkzO,CAAhjB,gCAAilB,CAAtS,yBAAgU,CAN9nzO,IAMmozO,CAA/kB,gCAAgnB,CAAja,yBAA2b,CAN9rzO,IAMmszO,CAA/oB,gCAAgrB,CAAta,yBAlB7p1O,cAkB2m2O,GAAG,CAAC,CANp0yO,GAMw0yO,CAAjwB,gCAAkyB,CAAljB,yBAA4kB,CANn4yO,GAMu4yO,CAAh0B,gCAAi2B,CAAtjB,yBAAglB,CANl8yO,GAMs8yO,CAA91B,gCAA+3B,CAAhrB,yBAA0sB,CANjgzO,GAMqgzO,CAA75B,gCAA87B,CAAprB,yBAlB7p1O,cAkBy32O,IAAI,CAAC,CANnlzO,GAMulzO,CAAhhC,gCAAijC,CAAj0B,wBAA01B,OAAQ,CANzpzO,GAM6pzO,CAAtlC,gCAAunC,CAA50B,wBAAq2B,OAAQ,CAN/tzO,GAMmuzO,CAA3nC,gCAA4pC,CAA78B,wBAAs+B,OAAQ,CANryzO,GAMyyzO,CAAjsC,gCAAkuC,CAAx9B,wBAAi/B,OAAQ,cAAc,OAAO,CAAC,CAA/gC,yBAAyiC,iBAAiB,KAAK,iBAAiB,gBAAgB,GAAG,MAAnB,CAA0B,KAA1B,CAA2C,KAAU,CAAC,gBAAgB,GAAG,IAAnB,CAAwB,KAAxB,CAA+C,MAAW,SAAS,QAAQ,CAAC,CAA7wC,yBAAuyC,SAAS,SAAS,iBAAiB,gBAAgB,GAAG,KAAnB,CAAyB,GAAzB,CAA6B,OAA7B,CAAqC,IAArC,CAA0C,OAA1C,CAAkD,IAAlD,CAAuD,OAAvD,CAA+D,IAAI,CAAC,CAA94C,wBAAu6C,OAAO,QAAQ,GAAG,SAAS,SAAS,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,KAAK,iBAAiB,gBAAgB,GAAG,MAAnB,CAA0B,KAA1B,CAA8C,KAAK,CAAC,CAAC,gCAAgC,CAAC,gCAAgC,MAAM,IAAI,OAAO,IAAI,SAAS,SAAS,KAAK,KAAK,IAAI,KAAK,QAAQ,CAAC,CAAC,CAArI,+BAAqK,OAAO,CAA3I,+BAA2K,OAAO,iBAAiB,QAAQ,QAAQ,GAAG,SAAS,SAAS,MAAM,IAAI,2CAA2C,OAAO,IAAI,2CAA2C,OAAO,IAAI,MAAM,KAlB5h5O,cAkB+i5O,IAAI,WAAW,EAAI,EAAI,IAAI,UAAe,WAAW,WAAW,KAAK,IAAI,IAAI,IAAI,UAAU,UAAU,IAAI,CAAC,MAAM,WAAW,KAAM,oBAAoB,UAAU,iBAAiB,MAAM,CAAC,CAA/kB,+BAA+mB,CAAC,uCAAuC,OAAO,CAA9pB,+BAA8rB,CAAC,uCAAuC,OAAO,CAA5sB,+BAA4uB,CAA7J,uCAAqM,OAAO,CAA3xB,+BAA2zB,CAA7J,uCAAqM,OAAO,UAAU,MAAM,KAAK,UAAU,QAAQ,CAAC,SAAS,CAAC,CAAC,0BAA0B,YAAY,KAAK,aAAa,IAAI,CAAC,CAAC,mBAAmB,SAAS,SAAS,MAAM,IAAI,+BAA+B,UAAU,KAAK,OAAO,KAAK,UAAU,EAAE,YAAY,KAAK,aAAa,IAAI,CAAC,CAAxJ,mBAA4K,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,CAAvM,mBAA2N,CAAC,0BAA0B,MAAM,aAAa,OAAO,aAAa,SAAS,SAAS,WAAW,WAAW,OAAO,IAAI,MAAM,KAAK,WAAW,EAAI,EAAI,IAAI,UAAe,WAAW,IAlB/h7O,cAkBij7O,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,CAA/a,mBAAmc,CAAz7F,yBAAm9F,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,UAAU,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC,yBAAyB,QAAQ,KAAK,YAAY,OAAO,cAAc,GAAG,CAAC,CAA3E,wBAAoG,CAAC,CAArG,yBAA+H,WAAW,GAAG,CAAC,CAAC,sBAAsB,gBAAgB,cAAc,QAAQ,KAAK,YAAY,MAAM,CAAC,CAAC,uBAAuB,CAAC,0BAA0B,UAAU,IAAI,mCAAmC,MAAM,IAAI,8BAA8B,YAAY,EAAE,aAAa,IAAI,CAAC,CAA3K,uBAAmM,MAAM,IAAI,CAAC,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,0BAA0B,MAAM,IAAI,+BAA+B,OAAO,IAAI,gCAAgC,WAAW,IAAI,kCAAkC,cAAc,IAAI,uCAAuC,WAAW,OAAO,UAAU,IAAI,mCAAmC,QAAQ,KAAK,gBAAgB,OAAO,YAAY,OAAO,YAAY,EAAE,YAAY,IAAI,CAAC,CAAja,uBAAyb,MAAM,CAAva,uBAA+b,MAAM,CAA7a,0BAAwc,MAAM,MAAM,KAAK,OAAO,KAAK,mBAAmB,KAAK,gBAAgB,KAAK,WAAW,KAAK,OAAO,KAAK,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,QAAQ,YAAY,QAAQ,UAAU,QAAQ,WAAW,OAAO,QAAQ,MAlBp09O,cAkBw19O,GAAG,CAAC,CAA7tB,uBAAqvB,KAAK,4BAA4B,CAAtxB,uBAA8yB,KAAK,4BAA4B,CAAvzB,uBAA+0B,KAAK,4BAA4B,CAAh3B,uBAAw4B,KAAK,4BAA4B,CAAj5B,0BAA46B,KAAK,4BAA4B,CAA78B,0BAAw+B,KAAK,4BAA4B,mBAAmB,KAAK,WAAW,KAlB3t+O,OAkBuu+O,EAAE,QAAQ,IAAI,CAAC,CAA/lC,uBAAunC,MAAM,IAAI,kCAAkC,CAAC,CAApqC,sBAA2rC,aAAa,YAAY,IAAI,CAAC,CAAC,oBAAoB,+BAA+B,YAAY,oBAAoB,IAAI,+BAA+B,6BAA6B,IAAI,+BAA+B,qBAAqB,IAAI,oCAAoC,2BAA2B,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAI,CAAC,CAA3S,oBAAgU,CAAv49K,WAAm59K,oBAAoB,IAAI,oBAAoB,SAAS,CAAC,CAAlY,oBAAuZ,CAA999K,UAAy+9K,OAAO,MAAM,KAAK,OAAO,KAAK,YAAY,MAAM,WAAW,KAAK,CAAC,CAAne,oBAAwf,CAApo8K,wBAA6p8K,CAAxl+K,WAAom+K,UAAU,MAAM,IAAI,CAAC,CANxn8O,GAM4n8O,CAAtjB,mBAA0kB,CAAru3K,gBAAsv3K,KAAK,CAAru3K,mBAAyv3K,CAA3r+K,WAAus+K,WAAW,IAAI,iCAAiC,OAAO,IAAI,CAAC,CAAC,6BAA6B,QAAQ,KAAK,gBAAgB,aAAa,gBAAgB,aAAa,YAAY,QAAQ,OAAO,KAAK,WAAW,IAAI,kCAAkC,eAAe,KAAK,YAAY,KAAK,WAAW,UAAU,CAAC,CAAC,sBAAsB,QAAQ,KAAK,YAAY,OAAO,eAAe,cAAc,CAAC,CAAC,iBAAiB,+BAA+B,YAAY,oBAAoB,IAAI,4BAA4B,6BAA6B,IAAI,qBAAqB,IAAI,2BAA2B,EAAE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,sBAAsB,IAAI,CAAC,CAA7P,iBAA+Q,CAAz1/K,WAAq2/K,oBAAoB,GAAG,oBAAoB,UAlB1rhP,cAkBkthP,GAAG,CAAC,CAAlW,iBAAoX,CAAv/gL,gBAAwghL,OAAO,IAAI,MAAM,KAAK,IAAI,4BAA4B,EAAE,KAAK,YAAY,KAAK,IAAI,EAAE,CAAC,IAAI,4BAA4B,EAAE,KAAK,CAAC,CAAlgB,iBAAohB,CAAnq+K,wBAA4r+K,CAAvngL,WAAmogL,UAAU,MAAM,EAAE,CAAC,CANrp+O,GAMyp+O,CAAhlB,gBAAimB,CAA/v5K,gBAAgx5K,KAAK,CAA/v5K,mBAAmx5K,CAArtgL,WAAiugL,WAAW,IAAI,iCAAiC,OAAO,IAAI,CAAC,CAAC,uBAAuB,UAAU,IAAI,8BAA8B,WAAW,KAAK,YAAY,EAAE,OAAO,IAAI,gCAAgC,YAAY,CAAC,CAAC,CAAnmG,uBAA2nG,YAAY,EAAE,cAAc,IAAI,CAAC,CAAC,0BAA0B,sBAAsB,IAAI,CAAC,CAArD,0BAAgF,CAAp1jL,UAA+1jL,iBAAiB,gBAAgB,GAAG,KAAnB,CAAyB,KAAzB,CAAuC,KAAK,CAAC,gBAAgB,GAAG,KAAnB,CAAyB,MAAqB,GAA9C,CAAkD,MAAe,IAAI,CAAC,gBAAgB,GAAG,IAAnB,CAAwB,MAAqB,GAA7C,CAAiD,MAAe,KAAK,gBAAgB,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,oBAAoB,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,kBAAkB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,wBAAwB,CAA5rkL,UAAuskL,iBAAiB,gBAAgB,GAAG,KAAnB,CAAyB,GAAzB,CAA6B,OAA7B,CAAqC,IAArC,CAA0C,OAA1C,CAAkD,IAAlD,CAAuD,OAAvD,CAA+D,IAAI,CAAC,CAAC,+BAA+B,CAA5zkL,UAAu0kL,iBAAiB,gBAAgB,GAAG,KAAnB,CAAyB,IAAzB,CAA8B,KAAK,CAAC,CAAxgR,4BAAqiR,WAAW,IAAI,CAAC,CAArjR,2BAAilR,aAAa,WAAW,CAAC,CAAC,CAA3mR,2BAAuoR,YAAY,cAAc,CAAC,CAAC,CAAnqR,2BAA+rR,YAAY,YAlBvlkP,OAkB0mkP,CAAC,CAAC,CAAC,qBAAqB,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,yBAAyB,MAAM,KAAK,QAAQ,KAAK,UAAU,MAAM,CAAC,CAAlE,yBAA4F,CAAC,2BAA2B,MAAM,IAAI,CAAC,CAAtC,2BAAkE,MAAM,IAAI,uCAAuC,OAAO,IAAI,wCAAwC,OAAO,OAAO,CAAC,CAAC,kCAAkC,CAAC,2CAA2C,YAAY,KAAK,aAAa,KAAK,cAAc,IAAI,uDAAuD,SAAS,OAAO,YAAY,CAAC,CAAC,CAAC,2BAA2B,CAAC,2BAA2B,OAAO,IAAI,+CAA+C,CAAC,CAAC,oCAAoC,QAAQ,IAAI,CAAC,CAAjD,oCAAsF,CAAzM,2BAAqO,CAAlH,oCAAuJ,CAA9O,2BAA0Q,MAAM,GAAG,CAAC,CAAC,iCAAiC,CAAC,sCAAsC,CAAC,wBAAwB,CAAC,gCAAgC,CAAC,+BAA+B,CAAC,gCAAgC,YAAY,KAAK,aAAa,IAAI,CAAC,CAAC,6BAA6B,CAApQ,iCAAsS,CAA/D,6BAA6F,CAAlS,sCAAyU,CAApI,6BAAkK,CAAhU,wBAAyV,CAA3L,6BAAyN,CAA9V,gCAA+X,CAA1P,6BAAwR,CAA5X,+BAA4Z,CAAxT,6BAAsV,CAA1Z,gCAA2b,WAAW,IAAI,kCAlBzinP,QAkBmlnP,IAlBnlnP,cAkBqmnP,IAAI,WAAW,KAAK,YAAY,IAAI,aAAa,GAAG,CAAC,CAAvf,6BAAqhB,CAA5vB,gCAA6xB,YAAY,CAAlkB,6BAAgmB,CAAryB,qCAA20B,YAAY,CAAlpB,6BAAgrB,CAA90B,uBAAs2B,YAAY,CAAptB,6BAAkvB,CAAv3B,+BAAu5B,YAAY,CAA9xB,6BAA4zB,CAAh6B,8BAA+7B,YAAY,CAAv2B,6BAAq4B,CAAz8B,+BAAy+B,YAAY,cAAc,IAAI,CAAC,CAAp8B,6BAAk+B,CAA9+L,uBAAsgM,CAA1/B,6BAAwhC,CAA5gM,0BAAuiM,WAAW,IAAI,uCAAuC,CAAC,CAA1mC,6BAAwoC,CAA33M,uBAAm5M,CAAhqC,6BAA8rC,CAAz5M,0BAAo8M,CAAzuC,6BAAuwC,CAA9+C,iCAAghD,CAA9yqL,YAA2zqL,aAAa,CAAn0C,6BAAi2C,CAAtiD,sCAA6kD,CAA74qL,YAA05qL,aAAa,CAAl6C,6BAAg8C,CAArkD,gCAAsmD,CAAt+qL,YAAm/qL,aAAa,CAA3/C,6BAAyhD,CAA7nD,+BAA6pD,CAA9jrL,YAA2krL,aAAa,CAAnlD,6BAAinD,CAArrD,gCAAstD,CAAvprL,YAAoqrL,aAAtc,YAAY,GAAG,CAAod,CAA5rD,6BAA0tD,CAAj8D,iCAAm+D,CAAjwrL,YAA8wrL,YAAY,CAArxD,6BAAmzD,CAAx/D,sCAA+hE,CAA/1rL,YAA42rL,YAAY,CAAn3D,6BAAi5D,CAAthE,gCAAujE,CAAv7rL,YAAo8rL,YAAY,CAA38D,6BAAy+D,CAA7kE,+BAA6mE,CAA9gsL,YAA2hsL,YAAY,CAAliE,6BAAgkE,CAApoE,gCAAqqE,CAAtmsL,YAAmnsL,YAAY,aAAa,GAAG,CAAC,MAAM,0BAA0B,KAAK,gCAAgC,KAAK,iCAAiC,KAAK,0BAA0B,KAAK,8BAA8B,KAAK,gCAAgC,IAAI,+BAA+B,QAAQ,wBAAwB,KAAK,2BAA2B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,oCAAoC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,sCAAsC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,yBAAyB,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,wCAAwC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,kCAAkC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,oCAAoC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,MAAM,CANj0oP,KAMu0oP,KAAK,CAN50oP,KAMk1oP,2BAA2B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,oCAAoC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,sCAAsC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,yBAAyB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,wCAAwC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,kCAAkC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,oCAAoC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANnhqP,IAMwhqP,8BAA8B,IAAI,CAAC,CAN/mpP,GAMmnpP,8BAA8B,IAAI,CAAC,CAAC,mBAAmB,aAAa,IAAI,iCAAiC,cAAc,IAAI,kCAAkC,WAAW,IAAI,2BAA2B,QAAQ,KAAK,YAAY,OAAO,gBAAgB,UAAU,CAAC,CAAC,sBAAsB,QAAQ,KAAK,gBAAgB,WAAW,YAAY,MAAM,CAAC,CAAjF,qBAAuG,CAAC,CAFpy8J,SAE8y8J,CAAlH,qBAAwI,CAAC,CAF9w8J,eAE8x8J,CAAzJ,qBAA+K,CAAC,EAAE,UAAU,IAAI,yBAAyB,MAAM,IAAI,yBAAyB,CAAC,CAA7P,qBAAmR,aAAa,YAAY,KAAK,IAAI,2BAA2B,EAAE,IAAI,CAAC,CAAvV,qBAA6W,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,oBAAoB,UAAU,IAAI,+BAA+B,YAAY,IAAI,iCAAiC,MAAM,IAAI,+BAA+B,CAAC,CAAC,gBAAgB,MAAM,IAAI,2BAA2B,OAAO,IAAI,2BAA2B,OAAO,QAlBnyuP,cAkByzuP,IAAI,iBAAiB,MAAc,oBAAoB,IAAI,SAAS,SAAS,aAAa,GAAG,CAAC,CAAtN,eAAsO,CANv42N,aAMq52N,iBAAiB,IAAI,sCAAsC,CAAC,CAAhT,eAAgU,OAAO,oBAAoB,IAAI,QAAQ,GAAG,SAAS,SAAS,KAAK,IAAI,IAAI,IAAI,MAAM,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM,YAAY,cAAc,IAAI,MAAM,YAAY,UAAU,UAAU,IAAI,CAAC,MAAM,YAAY,IAAI,MAAM,IAAI,2BAA2B,CAAC,CAAC,uBAAuB,QAAQ,EAAE,eAAe,KAAK,WAAW,MAAM,CAAC,CAAC,mBAAmB,oBAAoB,IAAI,2BAA2B,aAAa,KAAK,GAAG,EAAE,IAAI,2BAA2B,CAAC,CAAC,uBAAuB,QAAQ,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAA1D,uBAAkF,QAAQ,KAAK,CAAC,CAA3D,oBAAgF,CAAC,CAApnD,mBAAwoD,CAAz4B,eAAy5B,OAAO,UAAU,UAAU,IAAI,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC,CAA7sD,mBAAiuD,MAAM,IAAI,+BAA+B,CAAC,CAAC,wBAAwB,CAApyD,mBAAwzD,CAA5C,wBAAqE,CAAC,CAAl1D,mBAAs2D,OAAO,QAAQ,oBAAoB,IAAK,CAAC,CAAC,CAAh5D,mBAAo6D,oBAAoB,IAAK,CAAC,CAAC,CAA/7D,kBAAk9D,CANp34N,aAMk44N,WAAW,IAAI,oCAAoC,CAAC,CAAC,oBAAoB,CAAziE,mBAA6jE,CAAxC,oBAA6D,CAAC,CAAnlE,mBAAumE,OAAO,OAAO,CAAC,CAAC,sBAAsB,CAA7oE,mBAAiqE,CAA1C,sBAAiE,CAAC,CAAzrE,mBAA6sE,WAAW,IAAI,0CAA0C,CAAC,KAAK,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAd,cAA6B,CAAz0E,mBAA61E,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAAlJ,cAAiK,CAAjK,cAAgL,CAAhL,cAA+L,CAA3+E,mBAA+/E,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAApT,cAAmU,CAAnU,cAAkV,CAAlV,cAAiW,CAAjW,cAAgX,CAA5pF,mBAAgrF,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAAre,cAAof,CAApf,cAAmgB,CAAngB,cAAkhB,CAAlhB,cAAiiB,CAAjiB,cAAgjB,CAA51F,mBAAg3F,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAArqB,cAAorB,CAAprB,cAAmsB,CAAnsB,cAAktB,CAAltB,cAAiuB,CAAjuB,cAAgvB,CAAhvB,cAA+vB,CAA3iG,mBAA+jG,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAAp3B,cAAm4B,CAAn4B,cAAk5B,CAAl5B,cAAi6B,CAAj6B,cAAg7B,CAAh7B,cAA+7B,CAA/7B,cAA88B,CAA98B,cAA69B,CAAzwG,mBAA6xG,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAAllC,cAAimC,CAAjmC,cAAgnC,CAAhnC,cAA+nC,CAA/nC,cAA8oC,CAA9oC,cAA6pC,CAA7pC,cAA4qC,CAA5qC,cAA2rC,CAA3rC,cAA0sC,CAAt/G,mBAA0gH,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAA/zC,cAA80C,CAA90C,cAA61C,CAA71C,cAA42C,CAA52C,cAA23C,CAA33C,cAA04C,CAA14C,cAAy5C,CAAz5C,cAAw6C,CAAx6C,cAAu7C,CAAv7C,cAAs8C,CAAlvH,mBAAswH,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAA3jD,cAA0kD,CAA1kD,cAAylD,CAAzlD,cAAwmD,CAAxmD,cAAunD,CAAvnD,cAAsoD,CAAtoD,cAAqpD,CAArpD,cAAoqD,CAApqD,cAAmrD,CAAnrD,cAAksD,CAAlsD,cAAitD,CAA7/H,mBAAihI,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,EAAE,CAAC,CAAt0D,cAAq1D,CAAr1D,cAAo2D,CAAp2D,cAAm3D,CAAn3D,cAAk4D,CAAl4D,cAAi5D,CAAj5D,cAAg6D,CAAh6D,cAA+6D,CAA/6D,cAA87D,CAA97D,cAA68D,CAA78D,cAA49D,CAA59D,cAA2+D,CAAvxI,mBAA2yI,aAAa,KAAK,IAAI,iCAAiC,EAAE,IAAI,+BAA+B,EAAE,GAAG,CAAC,MAAM,2BAA2B,QAAQ,6BAA6B,QAAQ,8BAA8B,IAAI,wBAAwB,MAAM,wBAAwB,KAAK,yBAAyB,IAAI,iCAAiC,YAAY,6BAA6B,KAAK,kCAAkC,KAAK,+BAA+B,IAAI,4BAA4B,KAAK,0BAA0B,KAAK,sCAAsC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,MAAM,CANhrzP,KAMsrzP,KAAK,CAN3rzP,KAMiszP,0BAA0B,QAAQ,4BAA4B,KAAK,sCAAsC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANrm0P,IAM0m0P,iCAAiC,IAAI,sCAAsC,IAAI,mCAAmC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,sCAAsC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,kCAAkC,KAAK,8BAA8B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,mCAAmC,IAAI,CAAC,CAN160P,IAM+60P,CAN9o0P,KAMop0P,CANr70P,GAMy70P,CANxp0P,KAM8p0P,mCAAmC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,kCAAkC,QAAQ,sCAAsC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,kCAAkC,QAAQ,8BAA8B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,mCAAmC,IAAI,CAAC,CANly0P,GAMsy0P,sCAAsC,IAAI,iCAAiC,GAAG,CAAC,CANr30P,GAMy30P,CANz30P,GAM630P,CANxi1P,KAM8i1P,CANn40P,GAMu40P,CAAC,eAAe,mCAAmC,IAAI,4BAA4B,kCAAkC,IAAI,mBAAmB,8BAA8B,IAAI,iBAAiB,mCAAmC,IAAI,mBAAmB,CAAC,CAAC,YAAY,OAAO,IAAI,yBAAyB,iBAAiB,IAAI,2BAA2B,QAAQ,MAAM,SAAS,SAAS,OAAO,IAAI,+BAA+B,MAAM,IAAI,+BAA+B,QAAQ,KAAK,eAAe,OAAO,YAAY,QAAQ,OAAO,IAAI,yBAAyB,WAAW,UAAU,CAAC,CAApU,WAAgV,CAAC,sBAAsB,OAAO,IAAI,CAAC,CAAC,oBAAoB,QAAQ,KAAK,UAAU,KAAK,WAAW,IAAI,mCAAmC,QAAQ,IAAI,SAAS,SAAS,SAAS,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,IAAI,kCAAkC,YAAY,EAAE,WAAW,UAAU,CAAC,CAA/O,mBAAmQ,OAAO,QAAQ,GAAG,SAAS,SAAS,iBAAiB,IAAI,uCAAuC,QAAQ,MAAM,QAAQ,GAAG,MAAI,KAAW,KAAY,EAAO,EAAE,OAAO,IAAI,MAAM,KAAK,iBAAiB,IAAI,KAAK,UAAU,OAAO,KAAK,EAAE,EAAE,IAAI,0BAA0B,CAAC,MAAM,CAAC,mBAAmB,mBAAmB,KAAK,gBAAgB,KAAK,WAAW,KAAK,OAAO,KAlBx46P,QAkBq56P,EAlBr56P,OAkB856P,EAAE,QAAQ,EAAE,YAAY,QAAQ,WAAW,EAAE,EAAE,OAAO,QAAQ,WAAW,KAAK,cAAc,IAAI,uCAAuC,SAAS,SAAS,QAAQ,EAAE,QAAQ,KAAK,MAAM,KAAK,SAAS,OAAO,MAAM,IAAI,8BAA8B,OAAO,IAAI,8BAA8B,YAAY,OAAO,gBAAgB,OAAO,OAAO,IAAI,gCAAgC,WAAW,WAAW,MAAM,IAAI,oCAAoC,iBAAiB,IAAI,kCAAkC,YAAY,CAAC,CAAC,MAAM,CAA7mB,mBAAioB,CAF78qK,SAEu9qK,MAAM,CAAjpB,mBAAqqB,CAF17qK,eAE08qK,MAAM,CAA3rB,mBAA+sB,EAAE,UAAU,IAAI,mCAAmC,WAAW,MAAM,CAAC,MAAM,CAA1xB,mBAA8yB,CAF1nrK,SAEoorK,IAAI,MAAM,CAAl0B,mBAAs1B,CAFlqrK,SAE4qrK,IAAI,MAAM,CAA12B,mBAA83B,CAFnprK,eAEmqrK,IAAI,MAAM,CAAx5B,mBAA46B,CAFjsrK,eAEitrK,IAAI,MAAM,CAAt8B,mBAA09B,EAAE,IAAI,MAAM,CAAt+B,mBAA0/B,EAAE,IAAI,UAAU,GAAG,CAAC,CAAC,2BAA2B,MAAM,IAAI,WAAW,IAAI,uCAlBp38P,OAkBk68P,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,oBAAoB,oBAAoB,WAAW,mBAAmB,KAAK,gBAAgB,KAAK,WAAW,KAAK,OAAO,KAAK,QAAQ,EAAE,OAAO,KAAK,oBAAoB,KAAK,iBAAiB,KAAK,YAAY,KAAK,QAAQ,IAAI,0BAA0B,SAAS,KAAK,YAAY,GAAG,WAAW,WAAW,MAAM,IAAI,6BAA6B,UAAU,IAAI,4BAA4B,YAAY,IAAI,6BAA6B,CAAC,CAA1a,oBAA+b,CAAC,wBAAwB,eAAe,KAAK,MAAM,IAAI,mCAAmC,CAAC,CAA1hB,oBAA+iB,IAAI,UAAU,IAAI,CAAC,CAAlkB,oBAAulB,EAAE,eAAe,IAAI,CAAC,CAAC,oBAAoB,QAAQ,MAAM,MAAM,KAAK,UAAU,IAAI,CAAC,CAA5D,oBAAiF,CAF313H,cAE023H,QAAQ,KAAK,UAAU,KAlB5p+P,QAkByq+P,GAAG,CAAC,CAAC,6BAA6B,SAAS,SAAS,QAAQ,KAAK,sBAAsB,GAAG,CAAC,CAAtF,6BAAoH,CAFr0mO,cAEo1mO,gBAAgB,qBAAqB,SAAS,KAAK,2BAA2B,MAAM,gBAAgB,KAAK,gBAAgB,WAAW,CAAC,CAAxQ,6BAAsS,CAFv/mO,aAEqgnO,oBAAoB,mBAAmB,KAAK,WAAW,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAha,6BAA8b,CAF/onO,aAE6pnO,0BAA0B,WAAW,KAAK,WAAW,EAAE,CAAC,CAAC,CAArgB,6BAAmiB,CAFpvnO,aAEkwnO,0BAA0B,iBAAiB,YAAY,QAAQ,EAlB9x/P,cAkB8y/P,OAAO,SAAS,QAAQ,CAAC,CAAzpB,6BAAurB,CAFx4nO,cAEu5nO,CAApjD,2BAAglD,OAAO,IAAI,CAAC,CAAx44N,WAAo54N,CAA3/G,YAAwgH,OAAO,KAlB57/P,OAkBw8/P,EAAE,iBAAiB,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAA5+4N,WAAw/4N,CAArlD,oBAA0mD,YAAY,IAAI,gCAAgC,eAAe,IAAI,gCAAgC,aAAa,IAAI,yBAAyB,cAAc,IAAI,0BAA0B,MAAM,IAAI,uBAAuB,UAAU,IAAI,qBAAqB,CAAC,CAA3w5N,WAAux5N,CAA1gH,oBAA+hH,WAAW,IAAI,CAAC,CAA5z5N,WAAw05N,CAA3jH,mBAA+kH,OAAO,QAAQ,cAAc,CAAC,CAA5y0N,mBAAg00N,CAA3+D,oBAAggE,cAAc,IAAI,iCAAiC,CAAC,CAN5o+P,IAMip+P,MAAM,CAArsG,mBAAytG,WAAW,QAAQ,GAAG,CAAC,CANls+P,IAMus+P,MAAM,CAA3vG,kBAA8wG,CAN/hpO,aAM6ipO,QAAQ,GAAG,oBAAoB,EAAE,CAAC,CANp09P,GAMw09P,MAAM,CAAx0G,mBAA41G,wBAAwB,KAAK,IAAI,qBAAqB,EAAE,IAAK,CAAC,CANh69P,GAMo69P,CAAjiD,6BAA+jD,CAFhxpO,cAE+xpO,aAAa,IAAI,cAAc,GAAG,CAAC,CAAC,UAAU,SAAS,QAAQ,CAAC,CAA5B,UAAuC,IAAI,QAAQ,MAAM,MAAM,KAAK,UAAU,EAAE,OAAO,KAlBv3hQ,OAkBm4hQ,EAAE,IAAI,CAAC,CAA1G,UAAqH,KAAK,oBAAoB,IAAK,CAAC,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC,kBAAkB,eAAe,KAAK,WAAW,KAAK,UAAU,KAAK,YAAY,IAAI,YAAY,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,wBAAwB,QAAQ,KAAK,YAAY,MAAM,CAAC,CAAC,wBAAwB,QAAQ,aAAa,MAAM,KAAK,OAAO,KAlB7siQ,cAkBguiQ,IAAI,aAAa,GAAG,CAAC,MAAM,0CAA0C,IAAI,oCAAoC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,gCAAgC,QAAQ,4BAA4B,IAAI,+BAA+B,KAAK,iCAAiC,IAAI,kCAAkC,KAAK,wCAAwC,KAAK,0CAA0C,KAAK,mCAAmC,KAAK,iCAAiC,KAAK,mCAAmC,IAAI,kCAAkC,QAAQ,+BAA+B,IAAI,IAAI,qCAAqC,IAAI,kCAAkC,KAAK,kCAAkC,IAAI,8BAA8B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,2CAA2C,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,MAAM,CANx6gQ,KAM86gQ,KAAK,CANn7gQ,KAMy7gQ,8BAA8B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,2CAA2C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANv1hQ,IAM41hQ,+CAA+C,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANz9gQ,GAM69gQ,+CAA+C,OAAO,CAAC,CAAC,WAAW,SAAS,QAAQ,CAAC,CAA7B,WAAyC,IAAI,QAAQ,MAAM,MAAM,KAAK,UAAU,EAAE,OAAO,KAlBz5kQ,OAkBq6kQ,EAAE,IAAI,CAAC,CAA5G,WAAwH,KAAK,KAAK,KAAK,aAAa,IAAI,kCAAkC,CAAC,CAAC,wBAAwB,OAAO,IAAI,qCAAqC,aAAa,IAAI,0CAA0C,CAAC,CAAC,gBAAgB,OAAO,IAAI,6BAA6B,WAAW,IAAI,+BAA+B,MAAM,IAAI,iCAAiC,QAAQ,KAAK,UAAU,IAAI,gCAAgC,YAAY,IAAI,kCAAkC,gBAAgB,cAAc,YAAY,EAAE,cAAc,GAAG,CAAC,CAA5T,eAA4U,CAAC,KAAK,YAAY,KAAK,MAAM,EAAE,QAAQ,KAAK,YAAY,WAAW,gBAAgB,OAAO,YAAY,MAAM,CAAC,CAAzb,eAAyc,CAAC,IAAI,aAAa,gBAAgB,UAAU,CAAC,CAAtf,eAAsgB,CAAC,IAAI,YAAY,gBAAgB,QAAQ,CAAC,CAAC,mBAAmB,eAAe,KAAK,WAAW,KAAK,UAAU,IAAI,mCAAmC,YAAY,GAAG,CAAC,CAAC,yBAAyB,MAAM,IAAI,+CAA+C,CAAC,CAAC,yBAAyB,UAAU,IAAI,yCAAyC,YAAY,IAAI,0CAA0C,CAAC,CAAC,wBAAwB,WAAW,KAlB9inQ,OAkB0jnQ,EAlB1jnQ,QAkBoknQ,CAAC,CAAC,CAA3D,wBAAoF,GAAG,YAAY,MAAM,CAAC,CAA1G,wBAAmI,KAAK,QAAQ,aAAa,MAAM,IAAI,oCAAoC,OAAO,IAAI,oCAlBjunQ,cAkBmxnQ,IAAI,aAAa,GAAG,CAAC,CAAvqC,eAAurC,CAAC,CAAC,kBAAkB,WAAW,GAAG,CAAC,CAAjC,kBAAoD,QAAQ,KAAK,UAAU,KAAK,YAAY,OAAO,gBAAgB,OAAO,UAAU,IAAI,kCAAkC,MAAM,KAAK,WAAW,GAAG,CAAC,CAAC,yBAAyB,mBAAmB,eAAe,gBAAgB,eAAe,WAAW,eAAe,iBAAiB,YAlBpooQ,cAkB8poQ,EAAE,OAAO,KAAK,QAAQ,YAAY,OAAO,QAAQ,YAAY,QAAQ,UAAU,QAAQ,WAAW,cAAc,CAAC,CAAC,uBAAuB,SAAS,SAAS,MAAM,IAAI,mCAAmC,MAAM,KAAK,QAAQ,KAAK,YAAY,OAAO,YAAY,IAAI,oCAAoC,oBAAoB,IAAI,QAAQ,IAAI,gCAAgC,cAAc,IAAI,sCAAsC,SAAS,MAAM,CAAC,CAAjU,uBAAyV,KAAK,MAAM,IAAI,mCAAmC,OAAO,IAAI,mCAAmC,aAAa,IAlBttpQ,cAkBwupQ,IAAI,oBAAoB,GAAG,CAAC,CAAC,8BAA8B,MAAM,IAAI,2CAA2C,CAAC,CAApF,8BAAmH,KAAK,iBAAiB,IAAI,qDAAqD,CAAC,MAAM,yBAAyB,KAAK,yBAAyB,IAAI,EAAE,2BAA2B,KAAK,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,MAAM,CANt+mQ,KAM4+mQ,KAAK,CANj/mQ,KAMu/mQ,iCAAiC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANn1nQ,IAMw1nQ,+BAA+B,YAAY,yCAAyC,IAAI,mCAAmC,IAAI,IAAI,gCAAgC,oBAAoB,2BAA2B,KAAK,oCAAoC,IAAI,8BAA8B,IAAI,kCAAkC,OAAO,yCAAyC,IAAI,4BAA4B,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,mCAAmC,KAAK,oCAAoC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAM,iCAAiC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAK,CAAC,CANp5oQ,IAMy5oQ,CANxnoQ,KAM8noQ,CAN/5oQ,GAMm6oQ,CANlooQ,KAMwooQ,4BAA4B,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,mCAAmC,KAAK,oCAAoC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAM,iCAAiC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAK,CAAC,CANproQ,GAMwroQ,yCAAyC,IAAI,mCAAmC,KAAK,IAAI,gCAAgC,mBAAmB,2BAA2B,KAAK,oCAAoC,IAAI,8BAA8B,IAAI,IAAI,kCAAkC,IAAI,yCAAyC,GAAG,CAAC,CANrgpQ,GAMygpQ,CANzgpQ,GAM6gpQ,CANxrpQ,KAM8rpQ,CANnhpQ,GAMuhpQ,CAAC,eAAe,4BAA4B,IAAI,kBAAkB,+BAA+B,IAAI,6BAA6B,mCAAmC,IAAI,gCAAgC,iCAAiC,IAAI,kBAAkB,oCAAoC,IAAI,4BAA4B,CAAC,CAAC,YAAY,QAAQ,KAAK,YAAY,OAAO,gBAAgB,WAAW,UAAU,IAAI,4BAA4B,SAAS,KAAK,YAAY,OAAO,QAAQ,IAAI,0BAA0B,gBAAgB,KAAK,gBAAgB,WAAW,CAAC,CAAzO,WAAqP,oBAAoB,mBAAmB,KAAK,WAAW,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAjW,WAA6W,0BAA0B,WAAW,KAAK,WAAW,EAAE,CAAC,CAAC,CAAta,WAAkb,0BAA0B,iBAAiB,YAAY,QAAQ,EAlBznuQ,cAkByouQ,OAAO,SAAS,QAAQ,CAAC,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,sBAAsB,YAAY,EAAE,wBAAwB,qBAAqB,CAAC,CAA3H,qBAAiJ,CAAC,CAAlJ,sBAAyK,CAAzK,qBAA+L,CAAC,CAAzK,iBAA2L,CAAlN,qBAAwO,CAAC,CAAhM,sBAAuN,CAAzO,gBAA0P,CAAC,CAAlR,sBAAyS,CAAlR,gBAAmS,CAAC,CAApS,iBAAsT,CAAtT,gBAAuU,CAAC,CAAtT,sBAA6U,CAA7U,qBAAmW,CAAC,CAA7Y,sBAAoa,CAA3X,qBAAiZ,CAAC,CAApa,iBAAsb,CAApa,qBAA0b,CAAC,CAA3b,sBAAkd,YAAY,IAAI,yBAAyB,CAAC,CAA9gB,iBAAgiB,MAAM,IAAI,6BAA6B,YAAY,IAAI,mCAAmC,QAAQ,IAAI,+BAA+B,iBAAiB,IAAI,gCAAgC,QAAQ,KAAK,YAAY,OAAO,cAAc,IAAI,oCAAoC,CAAC,CAAjzB,iBAAm0B,CAFvwiQ,KAE6wiQ,UAAU,IAAI,4BAA4B,MAAM,IAAI,4BAA4B,OAAO,IAAI,2BAA2B,CAAC,CAAh8B,iBAAk9B,EAAE,MAAM,QAAQ,wBAAwB,qBAAqB,CAAC,CAAC,wBAAwB,MAAM,IAAI,kCAAkC,CAAC,IAAI,8BAA8B,YAAY,IAAI,yCAAyC,CAAC,CAAhqC,sBAAurC,MAAM,IAAI,kCAAkC,OAAO,KAAK,SAAS,OAAO,QAAQ,KAAK,YAAY,MAAM,CAAC,CAA/xC,qBAAqzC,OAAQ,YAAY,sBAAsB,YAAY,IAAI,WAAW,OAAO,YAAY,EAAE,eAAe,OAAO,eAAe,KAAK,YAAY,OAAO,UAAU,OAAO,UAAU,IAAI,uBAAuB,YAAY,eAAe,mBAAmB,wBAAwB,UAAU,sBAAsB,OAAO,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,QAAQ,IAAI,iCAAiC,MAAM,IAAI,CAAC,CAN1lvQ,IAM+lvQ,CAAlvD,qBAAwwD,OAAQ,UAAU,KAAK,OAAO,IAAI,CAAC,CAN5suQ,GAMgtuQ,CAA/yD,qBAAq0D,OAAQ,UAAU,KAAK,OAAO,IAAI,CAAC,CAAj5D,sBAAw6D,QAAQ,KAAK,YAAY,OAAO,QAAQ,IAAI,oCAAoC,WAAW,IAAI,qCAAqC,WAAW,IAAI,cAAc,IAAI,0CAA0C,OAAO,OAAO,CAAC,CAAtoE,sBAA6pE,KAAK,CAAlqE,qBAAwrE,OAAQ,CAAhsE,qBAAstE,QAAS,QAAQ,GAAG,MAAM,IAAI,OAAO,IAAI,WAAW,IAAI,kCAlBj7yQ,cAkBi+yQ,GAAG,CAAC,CAAl0E,sBAAy1E,KAlB5/yQ,OAkBwgzQ,EAAE,GAAG,CAAC,MAAM,wBAAwB,KAAK,uBAAuB,IAAI,CAAC,CAAC,aAAa,QAAQ,cAAc,CAAC,CAAC,cAAc,QAAQ,eAAe,CAAC,CAAC,oBAAoB,QAAQ,qBAAqB,CAAC,CAAC,qBAAqB,QAAQ,sBAAsB,CAAC,CAAC,eAAe,QAAQ,gBAAgB,CAAC,CAAC,aAAa,QAAQ,cAAc,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,cAAc,YAAY,WAAW,CAAC,CAAC,eAAe,YAAY,YAAY,CAAC,CAAC,mBAAmB,eAAe,aAAa,CAAC,CAAC,2BAA2B,eAAe,qBAAqB,CAAC,CAAC,sBAAsB,eAAe,gBAAgB,CAAC,CAAC,8BAA8B,eAAe,wBAAwB,CAAC,CAAC,2BAA2B,gBAAgB,oBAAoB,CAAC,CAAC,uBAAuB,gBAAgB,gBAAgB,CAAC,CAAC,yBAAyB,gBAAgB,kBAAkB,CAAC,CAAC,8BAA8B,gBAAgB,uBAAuB,CAAC,CAAC,6BAA6B,gBAAgB,sBAAsB,CAAC,CAAC,6BAA6B,gBAAgB,sBAAsB,CAAC,CAAC,wBAAwB,gBAAgB,iBAAiB,CAAC,CAAC,sBAAsB,gBAAgB,eAAe,CAAC,CAAC,oBAAoB,gBAAgB,aAAa,CAAC,CAAC,qBAAqB,gBAAgB,cAAc,CAAC,CAAC,sBAAsB,gBAAgB,eAAe,CAAC,CAAC,yBAAyB,cAAc,oBAAoB,CAAC,CAAC,uBAAuB,cAAc,kBAAkB,CAAC,CAAC,qBAAqB,cAAc,gBAAgB,CAAC,CAAC,4BAA4B,cAAc,uBAAuB,CAAC,CAAC,2BAA2B,cAAc,sBAAsB,CAAC,CAAC,sBAAsB,cAAc,iBAAiB,CAAC,CAAC,qBAAqB,YAAY,kBAAkB,CAAC,CAAC,uBAAuB,YAAY,oBAAoB,CAAC,CAAC,qBAAqB,YAAY,kBAAkB,CAAC,CAAC,mBAAmB,YAAY,gBAAgB,CAAC,CAAC,oBAAoB,YAAY,iBAAiB,CAAC,CAAC,sBAAsB,WAAW,oBAAoB,CAAC,CAAC,oBAAoB,WAAW,kBAAkB,CAAC,CAAC,kBAAkB,WAAW,gBAAgB,CAAC,CAAC,mBAAmB,WAAW,iBAAiB,CAAC,CAAC,gBAAgB,WAAW,cAAc,CAAC,CAAC,kBAAkB,WAAW,gBAAgB,CAAC,CAAC,iBAAiB,WAAW,eAAe,CAAC,CAAC,mBAAmB,WAAW,iBAAiB,CAAC,CAAC,WAAW,MAAM,cAAc,CAAC,CAAC,YAAY,MAAM,eAAe,CAAC,CAAC,WAAW,MAAM,cAAc,CAAC,CAAC,sBAAsB,eAAe,gBAAgB,CAAC,CAAC,sBAAsB,eAAe,gBAAgB,CAAC,CAAC,mBAAmB,eAAe,aAAa,CAAC,CAAC,WAlB334Q,QAkB844Q,WAAW,CAAC,CAAC,gBAAgB,aAAa,WAAW,CAAC,CAAC,iBAAiB,cAAc,WAAW,CAAC,CAAC,sBAAsB,aAAa,YAAY,cAAc,WAAW,CAAC,CAAC,eAAe,YAAY,WAAW,CAAC,CAAC,kBAAkB,eAAe,WAAW,CAAC,CAAC,oBAAoB,YAAY,YAAY,eAAe,WAAW,CAAC,CAAC,UAlBzt5Q,OAkB0u5Q,WAAW,CAAC,CAAC,eAAe,YAAY,WAAW,CAAC,CAAC,gBAAgB,aAAa,WAAW,CAAC,CAAC,qBAAqB,YAAY,YAAY,aAAa,WAAW,CAAC,CAAC,cAAc,WAAW,WAAW,CAAC,CAAC,iBAAiB,cAAc,WAAW,CAAC,CAAC,mBAAmB,WAAW,YAAY,cAAc,WAAW,CAAC,CAAC,WAAW,MAAM,cAAc,CAAC,CAAC,UAAU,MAAM,cAAc,CAAC,CAAC,QAAQ,QAAQ,IAAI,kCAAkC,CAAC,CAAC,aAAa,QAAQ,KAAK,IAAI,wBAAwB,EAAE,YAAY,CAAC,CAAC,YAAY,YAAY,IAAI,kCAAkC,CAAC,CAAC,iBAAiB,YAAY,KAAK,IAAI,wBAAwB,EAAE,YAAY,CAAC,CAAC,eAAe,eAAe,IAAI,kCAAkC,CAAC,CAAC,oBAAoB,eAAe,KAAK,IAAI,wBAAwB,EAAE,YAAY,CAAC,CAAC,aAAa,aAAa,IAAI,kCAAkC,CAAC,CAAC,kBAAkB,aAAa,KAAK,IAAI,wBAAwB,EAAE,YAAY,CAAC,CAAC,cAAc,cAAc,IAAI,kCAAkC,CAAC,CAAC,mBAAmB,cAAc,KAAK,IAAI,wBAAwB,EAAE,YAAY,CAAC,CAAC,iBAAiB,YAAY,IAAI,mCAAmC,eAAe,IAAI,kCAAkC,CAAC,CAAC,sBAAsB,YAAY,KAAK,IAAI,wBAAwB,EAAE,aAAa,eAAe,KAAK,IAAI,wBAAwB,EAAE,YAAY,CAAC,CAAC,mBAAmB,aAAa,IAAI,mCAAmC,cAAc,IAAI,kCAAkC,CAAC,CAAC,wBAAwB,aAAa,KAAK,IAAI,wBAAwB,EAAE,aAAa,cAAc,KAAK,IAAI,wBAAwB,EAAE,YAAY,CAAC,CAAC,OAAO,OAAO,IAAI,iCAAiC,CAAC,CAAC,YAAY,OAAO,KAAK,IAAI,uBAAuB,EAAE,YAAY,CAAC,CAAC,WAAW,WAAW,IAAI,iCAAiC,CAAC,CAAC,gBAAgB,WAAW,KAAK,IAAI,uBAAuB,EAAE,YAAY,CAAC,CAAC,cAAc,cAAc,IAAI,iCAAiC,CAAC,CAAC,mBAAmB,cAAc,KAAK,IAAI,uBAAuB,EAAE,YAAY,CAAC,CAAC,YAAY,YAAY,IAAI,iCAAiC,CAAC,CAAC,iBAAiB,YAAY,KAAK,IAAI,uBAAuB,EAAE,YAAY,CAAC,CAAC,aAAa,aAAa,IAAI,iCAAiC,CAAC,CAAC,kBAAkB,aAAa,KAAK,IAAI,uBAAuB,EAAE,YAAY,CAAC,CAAC,gBAAgB,WAAW,IAAI,kCAAkC,cAAc,IAAI,iCAAiC,CAAC,CAAC,qBAAqB,WAAW,KAAK,IAAI,uBAAuB,EAAE,aAAa,cAAc,KAAK,IAAI,uBAAuB,EAAE,YAAY,CAAC,CAAC,kBAAkB,YAAY,IAAI,kCAAkC,aAAa,IAAI,iCAAiC,CAAC,CAAC,uBAAuB,YAAY,KAAK,IAAI,uBAAuB,EAAE,aAAa,aAAa,KAAK,IAAI,uBAAuB,EAAE,YAAY,CAAC,CAAC,oBAAoB,MAAM,IAAI,sCAAsC,CAAC,CAAC,kBAAkB,iBAAiB,IAAI,oCAAoC,CAAC,CAAC,sBAAsB,aAAa,IAAI,wCAAwC,CCdhv/Q,CAAA,aAAA,OACI,QAAA,GACA,MAAA,KACA,OAAA,IACA,SAAA,SACA,KAAA,IACA,IAAA,IACA,YAAA,MACA,WAAA,KAZJ,cAaI,IACA,WAAA,OCCJ,CDEE,CAAA,MAAA,CAAA,aAAA,CAAA,YAAA,KAAA,CAAA,qBAAA,CAAA,gBAAA,sBAAA,kBAAA,sBAAA,gBAAA,mBAAA,kBAAA,sBAAA,gBAAA,mBAIE,iBAAA,OCCJ,CDEE,CAAA,KAAA,CAAA,WACE,qBAAA,ICCJ,CDEE,CAXA,aAWA,CAAA,UACE,YAAA,KCCJ,CDGE,CAhBA,aAgBA,CAAA,UAAA,CAAA,2BAAA,QACE,SAAA,SACA,MAAA,EACA,IAAA,EACA,OAAA,KACA,MAAA,IACA,WAAA,UACA,QAAA,GACA,QAAA,ICCJ,CDGE,CA5BA,aA4BA,CAZA,UAYA,CAZA,2BAYA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,iBACE,QAAA,ICCJ,CDKE,CAAA,IAAA,CAnCA,aAmCA,CAnBA,UAmBA,KAAA,CAnBA,4BAmBA,CAAA,YAAA,CAAA,CAxBA,SAwBA,SAAA,KAnCA,cAgBA,gBAAA,4CALA,iBA0BE,SAAA,SACA,KAAA,EACA,IAAA,EACA,OAAA,KACA,MAAA,IACA,WAAA,UACA,QAAA,GACA,QAAA,ICCJ,CDGE,CAzCA,WAyCA,CAAA,UACE,iBAAA,KACA,MAAA,ICCJ,CDGE,CAAA,gBACE,OAAA,ICCJ,CDEE,CAAA,MACE,WAAA,ICCJ,CDEE,CAAA,OACE,WAAA,KACA,MAAA,GCCJ,CDEE,CA5DA,WA4DA,CAAA,aACE,iBAAA,OCCJ,CDEE,CAJA,aAKE,cAAA,IAAA,yBACA,WAAA,KCCJ,CDEE,CA5EA,MA4EA,CATA,aAUE,iBAAA,ICCJ",
"names": []
diff --git a/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js b/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js
index e6d8ffd8..6f33dbb7 100644
--- a/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js
+++ b/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js
@@ -235,4 +235,4 @@ ${l.toString()}`)}return o&&(typeof o=="string"?c+=`?${o}`:Object.keys(o).length
${e.content}
- `,e.on={open:function(r){r.app.params.dark&&$(r.el).addClass("theme-dark")}};var t=a.popover.create(e);t.open(),a.store.state.popovers[e.targetEl]=t}}else $(e.targetEl).hasClass("popover-disabled")||a.store.state.popovers[e.targetEl].open()}),Shiny.addCustomMessageHandler("toggle_popover",function(e){$(e).toggleClass("popover-disabled")})});$(function(){let a=we();if(a.params.preloader){let e=a.dialog.preloader();a.params.dark&&$(e.el).addClass("theme-dark"),$(document).on("shiny:idle",function(t){window.ran||a.dialog.close(),window.ran=!0})}Shiny.addCustomMessageHandler("show-preloader",function(e){typeof e.el<"u"?a.preloader.showIn(e.el,e.color):a.preloader.show(e.color)}),Shiny.addCustomMessageHandler("hide-preloader",function(e){typeof e.el<"u"?a.preloader.hideIn(e.el):a.preloader.hide()})});$(function(){let a=we();activateAllProgress=function(){$(".progressbar").each(function(){var e="#"+$(this).attr("id"),t=parseInt($(this).attr("data-progress"));a.progressbar.show(e,t)})},activateAllProgress(),Shiny.addCustomMessageHandler("update-progress",function(e){a.progressbar.set("#"+e.id,e.progress)})});$(function(){let a=we();if($("body").attr("data-ptr")==="true"){let t=$('');$(".page-content").addClass("ptr-content").prepend(t).attr("data-ptr-distance","55").attr("data-ptr-mousewheel","true"),a.ptr.create(".ptr-content");var e=a.ptr.get(".ptr-content");e.on("refresh",function(r){Shiny.setInputValue("ptr",!0),setTimeout(function(){a.ptr.done()},2e3)}),e.on("done",function(r){Shiny.setInputValue("ptr",null)})}});$(function(){let a=we(),e="skeleton-text skeleton-effect-fade";if(Shiny.addCustomMessageHandler("add_skeleton",function(t){var r="skeleton-text skeleton-effect-"+t.effect;$(t.target).addClass(r),t.duration!==void 0?setTimeout(function(){$(t.target).removeClass(r)},t.duration*1e3):$(document).on("shiny:idle",function(){$(t.target).removeClass(r)})}),window.ran=!1,a.params.skeletonsOnLoad){let t=[".page-content",".navbar",".toolbar"];$(document).on("shiny:connected",function(r){setTimeout(function(){if($("html").hasClass("shiny-busy"))for(target of t)$(target).addClass(e)},50)}),$(document).on("shiny:idle",function(r){if(!window.ran)for(target of t)$(target).removeClass(e);window.ran=!0})}});$(function(){var a=$(".subnavbar");a.length==1&&$(".page").addClass("page-with-subnavbar")});$(function(){let a=we();$(".swipeout-item").each(function(){$(this).on("click",function(){Shiny.setInputValue($(this).attr("id"),!0,{priority:"event"}),a.swipeout.close($(this).closest(".swipeout"))})})});$(function(){let a=we();function e(){$(".tab-link-highlight").remove();var r=100/$(".toolbar-inner > a").length,o=$(".toolbar-inner > a"),n=[];for(i=0;i')}var t=[];getAllTabSetIds=function(){$(".tabs.ios-edges").each(function(){t.push(this.id)})},getAllTabSetIds(),t.forEach(function(r){var o="insert_"+r;Shiny.addCustomMessageHandler(o,function(n){var s;n.target===void 0?s=$("#"+n.ns):s=$("#"+n.ns+"-"+n.target);var c=$(n.value.html),l;if($(s).hasClass("swiper-slide")?(l=$(c).addClass("swiper-slide"),$(".tabLinks").children(1).hasClass("segmented")&&$(l).removeClass("page-content"),n.select==="true"&&$(l).addClass("swiper-slide-active")):l=$(c),n.target===void 0?($(s).append(l),$(".tabLinks .toolbar-inner").prepend(n.link)):n.position==="after"?($(l).insertAfter($(s)),$(n.link).insertAfter($('.tabLinks [data-tab ="#'+n.ns+"-"+n.target+'"]'))):n.position==="before"&&($(l).insertBefore($(s)),$(n.link).insertBefore($('.tabLinks [data-tab ="#'+n.ns+"-"+n.target+'"]'))),Shiny.renderContent(c[0],{html:c.html(),deps:n.value.deps}),$(".tabLinks").children(1).hasClass("segmented")){var d,p=$('.tabLinks [data-tab ="#'+n.id+'"]');d=$(p).replaceWith('")}if($(s).hasClass("swiper-slide")){var f=document.querySelector(".swiper-container").swiper;f.update()}n.select==="true"&&a.tab.show("#"+n.id,!0),$(".tabLinks").children(1).hasClass("segmented")||e()})}),t.forEach(function(r){var o="remove_"+r;Shiny.addCustomMessageHandler(o,function(n){var s=$("#"+n.ns+"-"+n.target);if($(".tabs.ios-edges").css("transform",""),!$(".tabLinks").children(1).hasClass("segmented"))$('.toolbar-inner a[data-tab="#'+n.ns+"-"+n.target+'"]').remove();else{var c=$('.tabLinks button[data-tab="#'+n.ns+"-"+n.target+'"]'),l=$(".tabLinks button").not('[data-tab="#'+n.ns+"-"+n.target+'"]');$(c).next().length===0?$(l).hasClass("tab-link-active")||$(c).prev().addClass("tab-link-active"):$(l).hasClass("tab-link-active")||$(c).next().addClass("tab-link-active"),$(c).remove()}if($("#"+n.ns+"-"+n.target).remove(),$(s).hasClass("swiper-slide")){var d=document.querySelector(".swiper-container").swiper;d.update()}var p=$(s).next().attr("id");a.tab.show("#"+p),$(".tabLinks").children(1).hasClass("segmented")||e()})})});$(function(){let a=we();Shiny.addCustomMessageHandler("tapHold",function(e){var t=new Function("return ("+e.callback+")");$(e.target).on("taphold",function(){t()})})});$(function(){let a=we();Shiny.addCustomMessageHandler("add_tooltip",function(e){if(a.store.state.tooltips[e.targetEl]===void 0){var t=a.tooltip.create(e);t.show(),a.store.state.tooltips[e.targetEl]=t}}),Shiny.addCustomMessageHandler("update_tooltip",function(e){if(a.store.state.tooltips[e.targetEl]!==void 0){var t=a.tooltip.get(e.targetEl);if(e.action==="update")t&&t.setText(e.text);else if(e.action==="toggle")if(t){var r=Object.assign({},t);a.store.state.tooltips[e.targetEl]=r,t.destroy()}else{var o=a.store.state.tooltips[e.targetEl].params;t=a.tooltip.create(o),a.store.state.tooltips[e.targetEl]=t}}})});var gl=new Shiny.InputBinding;$.extend(gl,{find:function(a){},getValue:function(a){},receiveMessage:function(a,e){},subscribe:function(a,e){},unsubscribe:function(a){}});Shiny.inputBindings.register(gl);function ju(a,e){var t=[];if(a.length===0){e(t);return}for(var r=0;r=0&&t.push(vals[r]);e(t)}var bl=new Shiny.InputBinding;$.extend(bl,{initialize:function(a){var e=$(a).attr("id"),t={};[].forEach.call(a.attributes,function(o){if(/^data-/.test(o.name)){var n=o.name.substr(5).replace(/-(.)/g,function(c,l){return l.toUpperCase()});if(["openIn","choices","value","dropdownPlaceholderText","limit"].indexOf(n)==-1){var s=o.value=="true";t[n]=s}else t[n]=o.value}}),t.value=JSON.parse(t.value),t.openIn=="dropdown"?t.inputEl="#"+e:t.openerEl="#"+e;var r=JSON.parse(t.choices);t.source=function(o,n){var s=[];if(o.length===0){n(s);return}for(var c=0;c=0&&s.push(r[c]);n(s)},t.on={change:function(o){$("#"+e).trigger("change")}},app.autocomplete.create(t)},find:function(a){return $(a).find(".autocomplete-input")},getValue:function(a){var e=app.autocomplete.get($(a));return $(e.params.inputEl).val(e.value),e.value},setValue:function(a,e){a.value=e,a.params.value=e,$(a.params.inputEl).val(a.value)},_setChoices:function(a,e){vals=e,a.params.source=ju},receiveMessage:function(a,e){var t=app.autocomplete.get($(a));e.hasOwnProperty("choices")&&this._setChoices(t,e.choices),e.hasOwnProperty("value")&&this.setValue(t,e.value),$(a).trigger("change")},subscribe:function(a,e){$(a).on("change.f7AutoCompleteBinding",function(t){setTimeout(function(){e()},10)})},unsubscribe:function(a){$(a).off(".f7AutoCompleteBinding")}});Shiny.inputBindings.register(bl,"f7.autocomplete");var vl=new Shiny.InputBinding;$.extend(vl,{find:function(a){return $(a).find(".f7-action-button")},getValue:function(a){return $(a).data("val")||0},setValue:function(a,e){$(a).data("val",e)},getType:function(a){return"shiny.action"},subscribe:function(a,e){$(a).on("click.f7ButtonInputBinding",function(t){var r=$(this),o=r.data("val")||0;r.data("val",o+1),e()})},getState:function(a){return{value:this.getValue(a)}},receiveMessage:function(a,e){var t=$(a);if(e.hasOwnProperty("color")&&($(a).removeClass(function(p,f){return(f.match(/(^|\s)color-\S+/g)||[]).join(" ")}),$(a).addClass("color-"+e.color)),e.hasOwnProperty("fill")){var r=$(a).hasClass("button-fill");e.fill?r||$(a).addClass("button-fill"):r&&$(a).removeClass("button-fill")}if(e.hasOwnProperty("outline")){var o=$(a).hasClass("button-outline");e.outline?o||$(a).addClass("button-outline"):o&&$(a).removeClass("button-outline")}if(e.hasOwnProperty("shadow")){var n=$(a).hasClass("button-raised");e.shadow?n||$(a).addClass("button-raised"):n&&$(a).removeClass("button-raised")}if(e.hasOwnProperty("rounded")){var s=$(a).hasClass("button-round");e.rounded?s||$(a).addClass("button-round"):s&&$(a).removeClass("button-round")}if(e.hasOwnProperty("size")){var c=$(a).hasClass("button-large"),l=$(a).hasClass("button-small");!c&!l&&$(a).addClass("button-"+e.size),!c&l&&($(a).removeClass("button-small"),$(a).addClass("button-"+e.size)),c&!l&&($(a).removeClass("button-large"),$(a).addClass("button-"+e.size))}var d=t.text();e.hasOwnProperty("label")&&(d=e.label),t.html(d)},unsubscribe:function(a){$(a).off(".f7ButtonInputBinding")}});Shiny.inputBindings.register(vl,"f7.button");$(document).on("click","a.f7-action-button",function(a){a.preventDefault()});var wl=new Shiny.InputBinding;$.extend(wl,{find:function(a){return $(a).find(".card-expandable")},getValue:function(a){var e=$(a).hasClass("card-opened");return e},receiveMessage:function(a,e){app.card.toggle($(a))},subscribe:function(a,e){$(a).on("card:opened.f7CardBinding card:closed.f7CardBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7CardBinding")}});Shiny.inputBindings.register(wl,"f7.card");var xl=new Shiny.InputBinding;$.extend(xl,{find:function(a){return $(a).find(".collapsible")},getValue:function(a){var e=$($(a)[0]).attr("id"),t=$("#"+e+" li.accordion-item-opened");if(t.length>0)if(t.length===1){var r=$(t[0]).find(".item-title").html();return{state:!0,value:r}}else{var o=[];return $(t).each(function(n){o.push($(t[n]).find(".item-title").html())}),{state:!0,value:o}}else return{state:!1,value:null}},receiveMessage:function(a,e){if(e.hasOwnProperty("selected")){var t=$($(a)[0]).attr("id"),r=$("#"+t+" .accordion-item"),o=e.selected-1,n=$(r[o])[0];app.accordion.toggle(n)}},subscribe:function(a,e){$(a).on("accordion:opened.f7CollapsibleBinding accordion:closed.f7CollapsibleBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7CollapsibleBinding")}});Shiny.inputBindings.register(xl,"f7.collapsible");var kl=new Shiny.InputBinding;$.extend(kl,{initialize:function(a){app.colorPicker.create({inputEl:a,targetEl:$(a).attr("id")+"-value",targetElSetBackgroundColor:!0,modules:colorPickerModules,openIn:"auto",sliderValue:colorPickerSliderValue,sliderValueEditable:colorPickerSliderValueEditable,sliderLabel:colorPickerSliderLabel,hexLabel:colorPickerHexLabel,hexValueEditable:colorPickerHexValueEditable,groupedModules:colorPickerGroupedModules,palette:colorPickerPalettes,value:{hex:colorPickerValue},on:{open:function(e){e.app.params.dark&&e.$el.closest(".modal-in").addClass("theme-dark")}}})},find:function(a){return $(a).find(".color-picker-input")},getValue:function(a){var e=$(a).attr("id");return document.getElementById(e).value},setValue:function(a,e){},receiveMessage:function(a,e){},subscribe:function(a,e){$(a).on("change.f7ColorPickerBinding ",function(t){e()})},unsubscribe:function(a){$(a).off(".f7ColorPickerBinding ")}});Shiny.inputBindings.register(kl,"f7.colorpicker");var yl=new Shiny.InputBinding;$.extend(yl,{find:function(a){return $(a).find(".date-input")},getValue:function(a){return console.log($(a).attr("value")),$(a).attr("value")},setValue:function(a,e){},receiveMessage:function(a,e){},subscribe:function(a,e){$(a).on("keyup.dateInputBinding input.dateInputBinding",function(t){e(!0)}),$(a).on("change.f7DateBinding",function(t){e(!1)})},getRatePolicy:function(){return{policy:"debounce",delay:250}},unsubscribe:function(a){$(a).off(".f7DateBinding")}});Shiny.inputBindings.register(yl,"f7.date");var Cl=new Shiny.InputBinding;$.extend(Cl,{initialize:function(a){var e=$(a)[0],t=$(a).parent().find("script[data-for='"+a.id+"']");if(t=JSON.parse(t.html()),!t.hasOwnProperty("value"))t.value=[new Date];else for(var r=0;r0&&e.password.length>0?t.close():app.dialog.alert("Please enter a valid password and user."):t.open()},subscribe:function(a,e){$(a).on("loginscreen:opened.f7LoginBinding loginscreen:closed.f7LoginBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7LoginBinding")}});Shiny.inputBindings.register($l,"f7.login");var Sl=new Shiny.InputBinding;$.extend(Sl,{find:function(a){return $(a).find(".menu-item-dropdown")},getValue:function(a){return $(a).hasClass("menu-item-dropdown-opened")},receiveMessage:function(a,e){var t=$(a).hasClass("menu-item-dropdown-opened");t||app.menu.open($(a))},subscribe:function(a,e){$(a).on("menu:opened.f7MenuBinding menu:closed.f7MenuBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7MenuBinding")}});Shiny.inputBindings.register(Sl,"f7.menu");var Tl=new Shiny.InputBinding;$.extend(Tl,{initialize:function(a){this.app=we(),this.app.messagebar.create({el:"#"+$(a).attr("id")})},setState:function(a){var e=this.app.messagebar.get(a).getValue(),t=$(a).find("#"+a.id+"-send");return e.length?$(t).removeClass("disabled"):$(t).addClass("disabled"),e},find:function(a){return $(a).find(".messagebar")},getValue:function(a){return this.setState(a)},setValue:function(a,e){this.app.messagebar.get(a).setValue(e)},setPlaceholder:function(a,e){this.app.messagebar.get(a).setPlaceholder(e)},receiveMessage:function(a,e){e.hasOwnProperty("value")&&this.setValue(a,e.value),e.hasOwnProperty("placeholder")&&this.setPlaceholder(a,e.placeholder)},subscribe:function(a,e){$(a).on("input.f7MessageBarBinding change.f7MessageBarBinding focus.f7MessageBarBinding blur.f7MessageBarBinding",function(t){$(a).find("#"+a.id+"-send").on("click",function(){setTimeout(function(){this.app.messagebar.get(a).clear().focus()},1e3)}),e(!0)})},getRatePolicy:function(){return{policy:"debounce",delay:250}},unsubscribe:function(a){$(a).off(".f7MessageBarBinding")}});Shiny.inputBindings.register(Tl,"f7.messagebar");var zl=new Shiny.InputBinding;$.extend(zl,{initialize:function(a){this.app=we(),$(".page-content").addClass("messages-content");var e=$(a).attr("id"),t=$(a).find("script[data-for='"+e+"']");t=JSON.parse(t.html()),t.el="#"+e,t.firstMessageRule=function(r,o,n){return r.isTitle?!1:!o||o.type!==r.type||o.name!==r.name},t.lastMessageRule=function(r,o,n){return r.isTitle?!1:!n||n.type!==r.type||n.name!==r.name},t.tailMessageRule=function(r,o,n){return r.isTitle?!1:!n||n.type!==r.type||n.name!==r.name},this.app.messages.create(t)},find:function(a){return $(a).find(".messages")},getValue:function(a){var e=this.app.messages.get(a).messages;return e=e.slice(1),e.length>0?{...e}:null},setValue:function(a,e){var t=this.app.messages.get(a),r=e.value;if(e.showTyping){var o=r.pop().name;t.showTyping({header:o+" is typing"}),setTimeout(function(){t.addMessages(r),t.hideTyping()},1e3)}else t.addMessages(r)},receiveMessage:function(a,e){this.setValue(a,e),$(a).trigger("change")},subscribe:function(a,e){$(a).on("change.f7MessagesBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7MessagesBinding")}});Shiny.inputBindings.register(zl,"f7.messages");var Al=new Shiny.InputBinding;$.extend(Al,{initialize:function(a){var e={};e.el="#"+$(a).attr("id"),e.on={opened:function(){$(a).trigger("shown")}},app.panel.create(e)},find:function(a){return $(a).find(".panel")},getValue:function(a){var e=app.panel.get($(a));return e.opened},receiveMessage:function(a,e){var t=app.panel.get($(a));t.toggle(t.side)},subscribe:function(a,e){$(a).on("panel:open.f7PanelBinding panel:close.f7PanelBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7PanelBinding")}});Shiny.inputBindings.register(Al,"f7.panel");var Ml=new Shiny.InputBinding;$.extend(Ml,{find:function(a){return $(a).find(".panel-menu")},initialize:function(a){var e=$(a).find("a").first().data("tab"),t=$(a).find("a.tab-link-active").data("tab");t!==void 0?app.tab.show(t):app.tab.show(e)},getValue:function(a){var e=$(a).find("a.tab-link-active").data("tab");return e!==void 0?e.split("#")[1]:null},receiveMessage:function(a,e){e.hasOwnProperty("selected")&&app.tab.show("#"+e.ns+"-"+e.selected)},subscribe:function(a,e){$(a).find("a").on("click.f7PanelMenuBinding",function(t){$($(this).data("tab")).trigger("shown").trigger("shown"),e(!1)}),app.on("tabShow.f7PanelMenuBinding",function(t){e(!1)})},unsubscribe:function(a){$(a).off(".f7PanelMenuBinding")}});Shiny.inputBindings.register(Ml,"f7.tabsMenu");var Pl=new Shiny.InputBinding;$.extend(Pl,{initialize:function(a){var e=$(a)[0],t={};[].forEach.call(a.attributes,function(o){if(/^data-/.test(o.name)){var n=o.name.substr(5).replace(/-(.)/g,function(c,l){return l.toUpperCase()});if(["openIn","toolbarCloseText","choices","value"].indexOf(n)==-1){var s=o.value=="true";t[n]=s}else t[n]=o.value}}),t.inputEl=e,t.value=JSON.parse(t.value),t.cols=[{textAlign:"center",values:JSON.parse(t.choices)}],t.on={open:function(o){o.app.params.dark&&o.$el.closest(".modal-in").addClass("theme-dark")}};var r=app.picker.create(t);e.f7Picker=r},find:function(a){return $(a).find(".picker-input")},getValue:function(a){var e=app.picker.get($(a));return e.value},setValue:function(a,e){var t=app.picker.get($(a));t.value=e,t.displayValue=e,t.open(),setTimeout(function(){t.close()},10)},receiveMessage:function(a,e){var t=app.picker.get($(a));e.hasOwnProperty("value")&&this.setValue(a,e.value),e.hasOwnProperty("choices")&&(t.cols[0].values=e.choices),e.hasOwnProperty("rotateEffect")&&(t.params.rotateEffect=e.rotateEffect),e.hasOwnProperty("openIn")&&(t.params.openIn=e.openIn),e.hasOwnProperty("scrollToInput")&&(t.params.scrollToInput=e.scrollToInput),e.hasOwnProperty("closeByOutsideClick")&&(t.params.closeByOutsideClick=e.closeByOutsideClick),e.hasOwnProperty("toolbar")&&(t.params.toolbar=e.toolbar),e.hasOwnProperty("toolbarCloseText")&&(t.params.toolbarCloseText=e.toolbarCloseText),e.hasOwnProperty("sheetSwipeToClose")&&(t.params.sheetSwipeToClose=e.sheetSwipeToClose)},subscribe:function(a,e){$(a).on("change.f7PickerBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7PickerBinding")}});Shiny.inputBindings.register(Pl,"f7.picker");var Sr=Shiny.$escape;function Xu(a,e){if(!(typeof a>"u")){if(e.length!==1)throw new Error("labelNode must be of length 1");var t=$.isArray(a)&&a.length===0;t?e.addClass("shiny-label-null"):(e.text(a),e.removeClass("shiny-label-null"))}}var Bl=new Shiny.InputBinding;$.extend(Bl,{find:function(a){return $(a).find(".shiny-input-radiogroup")},getValue:function(a){var e=$('input:radio[name="'+Sr(a.id)+'"]:checked');return e.length===0?null:e.val()},setValue:function(a,e){$.isArray(e)&&e.length===0?$('input:radio[name="'+Sr(a.id)+'"]').prop("checked",!1):$('input:radio[name="'+Sr(a.id)+'"][value="'+Sr(e)+'"]').prop("checked",!0)},getState:function(a){for(var e=$('input:radio[name="'+Sr(a.id)+'"]'),t=new Array(e.length),r=0;r"+r+""};e.hasOwnProperty("choices")&&($(a).find("select").empty(),$.each(e.choices,function(r){var o=e.choices[r];$(a).find("select").append(t(o))})),e.hasOwnProperty("selected")&&this.setValue(a,e.selected)},subscribe:function(a,e){$(a).on("change.f7SmartSelectBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7SmartSelectBinding")}});Shiny.inputBindings.register(Rl,"f7.smartselect");var Ll=new Shiny.InputBinding;$.extend(Ll,{initialize:function(a){this.app=we();var e=$(a).attr("id"),t={};[].forEach.call(a.attributes,function(n){if(/^data-/.test(n.name)){var s=n.name.substr(5).replace(/-(.)/g,function(l,d){return d.toUpperCase()});if(["min","max","step","value","decimalPoint"].indexOf(s)==-1){var c=n.value=="true";t[s]=c}else t[s]=parseFloat(n.value)}}),t.el="#"+e;var r=this.app.stepper.create(t);if(!t.manualInputMode){var o=$(a).find("input");$(o).attr("readonly","")}},find:function(a){return $(a).find(".stepper")},getValue:function(a){return this.app.stepper.getValue(a)},setValue:function(a,e){this.app.stepper.setValue(a,e)},increment:function(){this.app.stepper.increment()},decrement:function(){this.app.stepper.decrement()},receiveMessage:function(a,e){var t=this.app.stepper.get($(a));if(e.hasOwnProperty("min")&&(t.min=e.min,t.params.min=e.min),e.hasOwnProperty("max")&&(t.max=e.max,t.params.max=e.max),e.hasOwnProperty("wraps")&&(t.params.wraps=e.wraps),e.hasOwnProperty("decimalPoint")&&(t.decimalPoint=e.decimalPoint,t.params.decimalPoint=e.decimalPoint),e.hasOwnProperty("manual")){t.params.manualInputMode=e.manual;var r=$(a).find("input");e.manual?typeof $(r).attr("readonly")<"u"&&$(r).removeAttr("readonly"):$(r).attr("readonly","")}e.hasOwnProperty("step")&&(t.step=e.step,t.params.step=e.step),e.hasOwnProperty("autorepeat")&&(t.params.autorepeat=e.autorepeat,t.params.autorepeatDynamic=e.autorepeat),e.hasOwnProperty("rounded")&&(e.rounded?$(a).addClass("stepper-round"):$(a).removeClass("stepper-round")),e.hasOwnProperty("raised")&&(e.raised?$(a).addClass("stepper-raised"):$(a).removeClass("stepper-raised")),e.hasOwnProperty("color")&&($(a).removeClass(function(o,n){return(n.match(/(^|\s)color-\S+/g)||[]).join(" ")}),$(a).addClass("color-"+e.color)),e.hasOwnProperty("size")&&($(a).hasClass("stepper-small")||$(a).hasClass("stepper-large")?$(a).hasClass("stepper-small")&&e.size=="large"?($(a).removeClass("stepper-small"),$(a).addClass("stepper-large")):$(a).hasClass("stepper-large")&&e.size=="small"&&($(a).addClass("stepper-small"),$(a).removeClass("stepper-large")):e.size=="small"?$(a).addClass("stepper-small"):e.size=="large"&&$(a).addClass("stepper-large")),e.hasOwnProperty("value")&&(this.setValue(a,e.value),t.params.value=e.value)},subscribe:function(a,e){var t=this;$(a).on("stepper:change.f7StepperBinding",function(r){var o=t.app.stepper.get(a);o.params.autorepeat?e(!0):e()})},unsubscribe:function(a){$(a).off(".f7StepperBinding")},getRatePolicy:function(){return{policy:"debounce",delay:500}}});Shiny.inputBindings.register(Ll,"f7.stepper");var Fl=new Shiny.InputBinding;$.extend(Fl,{find:function(a){return $(a).find(".tabs")},getValue:function(a){var e;return $(a).hasClass("standalone")?e=$(a).find(".tab-active"):e=$(a).find(".page-content.tab-active"),$(e).data("hidden")?$(".tab-link-highlight").hide():$(".tab-link-highlight").show(),$(e).attr("data-value")!==void 0?$(e).attr("data-value"):null},receiveMessage:function(a,e){e.hasOwnProperty("selected")&&app.tab.show("#"+e.ns+"-"+e.selected)},subscribe:function(a,e){$(a).on("tab:show.f7TabsBinding",function(t){$(a).trigger("shown"),e()})},unsubscribe:function(a){$(a).off(".f7TabsBinding")}});Shiny.inputBindings.register(Fl,"f7.tabs");var Hl=new Shiny.InputBinding;$.extend(Hl,{initialize:function(a){app.toggle.create({el:a})},find:function(a){return $(a).find(".toggle")},getValue:function(a){return app.toggle.get($(a)).checked},setValue:function(a,e){var t=app.toggle.get($(a));t.checked=e},receiveMessage:function(a,e){e.hasOwnProperty("checked")&&this.setValue(a,e.checked),e.hasOwnProperty("color")&&($(a).removeClass(function(t,r){return(r.match(/(^|\s)color-\S+/g)||[]).join(" ")}),$(a).addClass("color-"+e.color))},subscribe:function(a,e){$(a).on("toggle:change.f7ToggleBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7ToggleBinding")}});Shiny.inputBindings.register(Hl,"f7.toggle");var Vl=new Shiny.InputBinding;$.extend(Vl,{decodeHTML:function(a){var e=document.createElement("textarea");return e.innerHTML=a,e.value},initialize:function(a){this.app=we();var e=$(a).attr("id"),t=$(a).find("script[data-for='"+e+"']");t=JSON.parse(t.html()),t.el="#"+e;var r=this;for(var o of t.items)o.media.length>0&&(o.media=''+r.decodeHTML(o.media)+"
");function n(s){var c=s.media.length>0?''+s.media+"
":"",l=''+c+'
"+(s.title===void 0?"":s.title)+'
'+(s.right===void 0?"":s.right)+'
'+(s.subtitle===void 0?"":s.subtitle)+'
'+s.content+"
";return s.url===void 0?""+l+"":''+l+""}t.renderItem=n,t.searchAll=function(s,c){for(var l=[],d=0;d=0||s.trim()==="")&&l.push(d);return l},t.height=t.items[0].media!==void 0?this.app.theme==="ios"?112:this.app.theme==="md"?132:78:this.app.theme==="ios"?63:this.app.theme==="md"?73:46,console.log(t),this.app.virtualList.create(t)},find:function(a){return $(a).find(".virtual-list")},getValue:function(a){var e=this.app.virtualList.get(a);return{length:e.items.length,current_from:e.currentFromIndex+1,current_to:e.currentToIndex+1,reach_end:e.reachEnd}},setValue:function(a,e){var t=this.app.virtualList.get(a);t.resetFilter();var r=function(o){var n;if(o.length===void 0)n=`${o.media}
`,o.media=n;else for(var s=0;s${o[s].media}`,o[s].media=n;return o};switch(e.action){case"appendItem":t.appendItem(r(e.item));break;case"prependItem":t.prependItem(r(e.item));break;case"appendItems":t.appendItems(r(e.items));break;case"prependItems":t.prependItems(r(e.items));break;case"replaceItem":t.replaceItem(e.index,e.item);break;case"replaceAllItems":t.replaceAllItems(e.items);break;case"moveItem":t.moveItem(e.oldIndex,e.newIndex);break;case"insertItemBefore":t.insertItemBefore(e.index,r(e.item));break;case"filterItems":t.filterItems(e.indexes);break;case"deleteItem":t.deleteItem(e.index);break;case"deleteAllItems":t.deleteAllItems(e.indexes);break;case"scrollToItem":t.scrollToItem(e.index);break;default:}$(a).trigger("change")},receiveMessage:function(a,e){this.setValue(a,e)},subscribe:function(a,e){$(a).on("change.f7VirtualListBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7VirtualListBinding")}});Shiny.inputBindings.register(Vl,"f7.virtuallist");
+ `,e.on={open:function(r){r.app.params.dark&&$(r.el).addClass("theme-dark")}};var t=a.popover.create(e);t.open(),a.store.state.popovers[e.targetEl]=t}}else $(e.targetEl).hasClass("popover-disabled")||a.store.state.popovers[e.targetEl].open()}),Shiny.addCustomMessageHandler("toggle_popover",function(e){$(e).toggleClass("popover-disabled")})});$(function(){let a=we();if(a.params.preloader){let e=a.dialog.preloader();a.params.dark&&$(e.el).addClass("theme-dark"),$(document).on("shiny:idle",function(t){window.ran||a.dialog.close(),window.ran=!0})}Shiny.addCustomMessageHandler("show-preloader",function(e){typeof e.el<"u"?a.preloader.showIn(e.el,e.color):a.preloader.show(e.color)}),Shiny.addCustomMessageHandler("hide-preloader",function(e){typeof e.el<"u"?a.preloader.hideIn(e.el):a.preloader.hide()})});$(function(){let a=we();activateAllProgress=function(){$(".progressbar").each(function(){var e="#"+$(this).attr("id"),t=parseInt($(this).attr("data-progress"));a.progressbar.show(e,t)})},activateAllProgress(),Shiny.addCustomMessageHandler("update-progress",function(e){a.progressbar.set("#"+e.id,e.progress)})});$(function(){let a=we();if($("body").attr("data-ptr")==="true"){let t=$('');$(".page-content").addClass("ptr-content").prepend(t).attr("data-ptr-distance","55").attr("data-ptr-mousewheel","true"),a.ptr.create(".ptr-content");var e=a.ptr.get(".ptr-content");e.on("refresh",function(r){Shiny.setInputValue("ptr",!0),setTimeout(function(){a.ptr.done()},2e3)}),e.on("done",function(r){Shiny.setInputValue("ptr",null)})}});$(function(){let a=we(),e="skeleton-text skeleton-effect-fade";if(Shiny.addCustomMessageHandler("add_skeleton",function(t){var r="skeleton-text skeleton-effect-"+t.effect;$(t.target).addClass(r),t.duration!==void 0?setTimeout(function(){$(t.target).removeClass(r)},t.duration*1e3):$(document).on("shiny:idle",function(){$(t.target).removeClass(r)})}),window.ran=!1,a.params.skeletonsOnLoad){let t=[".page-content",".navbar",".toolbar"];$(document).on("shiny:connected",function(r){setTimeout(function(){if($("html").hasClass("shiny-busy"))for(target of t)$(target).addClass(e)},50)}),$(document).on("shiny:idle",function(r){if(!window.ran)for(target of t)$(target).removeClass(e);window.ran=!0})}});$(function(){var a=$(".subnavbar");a.length==1&&$(".page").addClass("page-with-subnavbar")});$(function(){let a=we();$(".swipeout-item").each(function(){$(this).on("click",function(){Shiny.setInputValue($(this).attr("id"),!0,{priority:"event"}),a.swipeout.close($(this).closest(".swipeout"))})})});$(function(){let a=we();function e(){$(".tab-link-highlight").remove();var r=100/$(".toolbar-inner > a").length,o=$(".toolbar-inner > a"),n=[];for(i=0;i')}var t=[];getAllTabSetIds=function(){$(".tabs.ios-edges").each(function(){t.push(this.id)})},getAllTabSetIds(),t.forEach(function(r){var o="insert_"+r;Shiny.addCustomMessageHandler(o,function(n){var s;n.target===void 0?s=$("#"+n.ns):s=$("#"+n.ns+"-"+n.target);var c=$(n.value.html),l;if($(s).hasClass("swiper-slide")?(l=$(c).addClass("swiper-slide"),$(".tabLinks").children(1).hasClass("segmented")&&$(l).removeClass("page-content"),n.select==="true"&&$(l).addClass("swiper-slide-active")):l=$(c),n.target===void 0?($(s).append(l),$(".tabLinks .toolbar-inner").prepend(n.link)):n.position==="after"?($(l).insertAfter($(s)),$(n.link).insertAfter($('.tabLinks [data-tab ="#'+n.ns+"-"+n.target+'"]'))):n.position==="before"&&($(l).insertBefore($(s)),$(n.link).insertBefore($('.tabLinks [data-tab ="#'+n.ns+"-"+n.target+'"]'))),Shiny.renderContent(c[0],{html:c.html(),deps:n.value.deps}),$(".tabLinks").children(1).hasClass("segmented")){var d,p=$('.tabLinks [data-tab ="#'+n.id+'"]');d=$(p).replaceWith('")}if($(s).hasClass("swiper-slide")){var f=document.querySelector(".swiper-container").swiper;f.update()}n.select==="true"&&a.tab.show("#"+n.id,!0),$(".tabLinks").children(1).hasClass("segmented")||e()})}),t.forEach(function(r){var o="remove_"+r;Shiny.addCustomMessageHandler(o,function(n){var s=$("#"+n.ns+"-"+n.target);if($(".tabs.ios-edges").css("transform",""),!$(".tabLinks").children(1).hasClass("segmented"))$('.toolbar-inner a[data-tab="#'+n.ns+"-"+n.target+'"]').remove();else{var c=$('.tabLinks button[data-tab="#'+n.ns+"-"+n.target+'"]'),l=$(".tabLinks button").not('[data-tab="#'+n.ns+"-"+n.target+'"]');$(c).next().length===0?$(l).hasClass("tab-link-active")||$(c).prev().addClass("tab-link-active"):$(l).hasClass("tab-link-active")||$(c).next().addClass("tab-link-active"),$(c).remove()}if($("#"+n.ns+"-"+n.target).remove(),$(s).hasClass("swiper-slide")){var d=document.querySelector(".swiper-container").swiper;d.update()}var p=$(s).next().attr("id");a.tab.show("#"+p),$(".tabLinks").children(1).hasClass("segmented")||e()})})});$(function(){let a=we();Shiny.addCustomMessageHandler("tapHold",function(e){var t=new Function("return ("+e.callback+")");$(e.target).on("taphold",function(){t()})})});$(function(){let a=we();Shiny.addCustomMessageHandler("add_tooltip",function(e){if(a.store.state.tooltips[e.targetEl]===void 0){var t=a.tooltip.create(e);t.show(),a.store.state.tooltips[e.targetEl]=t}}),Shiny.addCustomMessageHandler("update_tooltip",function(e){if(a.store.state.tooltips[e.targetEl]!==void 0){var t=a.tooltip.get(e.targetEl);if(e.action==="update")t&&t.setText(e.text);else if(e.action==="toggle")if(t){var r=Object.assign({},t);a.store.state.tooltips[e.targetEl]=r,t.destroy()}else{var o=a.store.state.tooltips[e.targetEl].params;t=a.tooltip.create(o),a.store.state.tooltips[e.targetEl]=t}}})});var gl=new Shiny.InputBinding;$.extend(gl,{find:function(a){},getValue:function(a){},receiveMessage:function(a,e){},subscribe:function(a,e){},unsubscribe:function(a){}});Shiny.inputBindings.register(gl);function ju(a,e){var t=[];if(a.length===0){e(t);return}for(var r=0;r=0&&t.push(vals[r]);e(t)}var bl=new Shiny.InputBinding;$.extend(bl,{initialize:function(a){var e=$(a).attr("id"),t={};[].forEach.call(a.attributes,function(o){if(/^data-/.test(o.name)){var n=o.name.substr(5).replace(/-(.)/g,function(c,l){return l.toUpperCase()});if(["openIn","choices","value","dropdownPlaceholderText","limit"].indexOf(n)==-1){var s=o.value=="true";t[n]=s}else t[n]=o.value}}),t.value=JSON.parse(t.value),t.openIn=="dropdown"?t.inputEl="#"+e:t.openerEl="#"+e;var r=JSON.parse(t.choices);t.source=function(o,n){var s=[];if(o.length===0){n(s);return}for(var c=0;c=0&&s.push(r[c]);n(s)},t.on={change:function(o){$("#"+e).trigger("change")}},app.autocomplete.create(t)},find:function(a){return $(a).find(".autocomplete-input")},getValue:function(a){var e=app.autocomplete.get($(a));return $(e.params.inputEl).val(e.value),e.value},setValue:function(a,e){a.value=e,a.params.value=e,$(a.params.inputEl).val(a.value)},_setChoices:function(a,e){vals=e,a.params.source=ju},receiveMessage:function(a,e){var t=app.autocomplete.get($(a));e.hasOwnProperty("choices")&&this._setChoices(t,e.choices),e.hasOwnProperty("value")&&this.setValue(t,e.value),$(a).trigger("change")},subscribe:function(a,e){$(a).on("change.f7AutoCompleteBinding",function(t){setTimeout(function(){e()},10)})},unsubscribe:function(a){$(a).off(".f7AutoCompleteBinding")}});Shiny.inputBindings.register(bl,"f7.autocomplete");var vl=new Shiny.InputBinding;$.extend(vl,{find:function(a){return $(a).find(".f7-action-button")},getValue:function(a){return $(a).data("val")||0},setValue:function(a,e){$(a).data("val",e)},getType:function(a){return"shiny.action"},subscribe:function(a,e){$(a).on("click.f7ButtonInputBinding",function(t){var r=$(this),o=r.data("val")||0;r.data("val",o+1),e()})},getState:function(a){return{value:this.getValue(a)}},receiveMessage:function(a,e){var t=$(a);if(e.hasOwnProperty("color")&&($(a).removeClass(function(p,f){return(f.match(/(^|\s)color-\S+/g)||[]).join(" ")}),$(a).addClass("color-"+e.color)),e.hasOwnProperty("fill")){var r=$(a).hasClass("button-fill");e.fill?r||$(a).addClass("button-fill"):r&&$(a).removeClass("button-fill")}if(e.hasOwnProperty("outline")){var o=$(a).hasClass("button-outline");e.outline?o||$(a).addClass("button-outline"):o&&$(a).removeClass("button-outline")}if(e.hasOwnProperty("shadow")){var n=$(a).hasClass("button-raised");e.shadow?n||$(a).addClass("button-raised"):n&&$(a).removeClass("button-raised")}if(e.hasOwnProperty("rounded")){var s=$(a).hasClass("button-round");e.rounded?s||$(a).addClass("button-round"):s&&$(a).removeClass("button-round")}if(e.hasOwnProperty("size")){var c=$(a).hasClass("button-large"),l=$(a).hasClass("button-small");!c&!l&&$(a).addClass("button-"+e.size),!c&l&&($(a).removeClass("button-small"),$(a).addClass("button-"+e.size)),c&!l&&($(a).removeClass("button-large"),$(a).addClass("button-"+e.size))}var d=t.text();e.hasOwnProperty("label")&&(d=e.label),t.html(d)},unsubscribe:function(a){$(a).off(".f7ButtonInputBinding")}});Shiny.inputBindings.register(vl,"f7.button");$(document).on("click","a.f7-action-button",function(a){a.preventDefault()});var wl=new Shiny.InputBinding;$.extend(wl,{find:function(a){return $(a).find(".card-expandable")},getValue:function(a){var e=$(a).hasClass("card-opened");return e},receiveMessage:function(a,e){app.card.toggle($(a))},subscribe:function(a,e){$(a).on("card:opened.f7CardBinding card:closed.f7CardBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7CardBinding")}});Shiny.inputBindings.register(wl,"f7.card");var xl=new Shiny.InputBinding;$.extend(xl,{find:function(a){return $(a).find(".collapsible")},getValue:function(a){var e=$($(a)[0]).attr("id"),t=$("#"+e+" li.accordion-item-opened");if(t.length>0)if(t.length===1){var r=$(t[0]).find(".item-title").html();return{state:!0,value:r}}else{var o=[];return $(t).each(function(n){o.push($(t[n]).find(".item-title").html())}),{state:!0,value:o}}else return{state:!1,value:null}},receiveMessage:function(a,e){if(e.hasOwnProperty("selected")){var t=$($(a)[0]).attr("id"),r=$("#"+t+" .accordion-item"),o=e.selected-1,n=$(r[o])[0];app.accordion.toggle(n)}},subscribe:function(a,e){$(a).on("accordion:opened.f7CollapsibleBinding accordion:closed.f7CollapsibleBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7CollapsibleBinding")}});Shiny.inputBindings.register(xl,"f7.collapsible");var kl=new Shiny.InputBinding;$.extend(kl,{initialize:function(a){app.colorPicker.create({inputEl:a,targetEl:$(a).attr("id")+"-value",targetElSetBackgroundColor:!0,modules:colorPickerModules,openIn:"auto",sliderValue:colorPickerSliderValue,sliderValueEditable:colorPickerSliderValueEditable,sliderLabel:colorPickerSliderLabel,hexLabel:colorPickerHexLabel,hexValueEditable:colorPickerHexValueEditable,groupedModules:colorPickerGroupedModules,palette:colorPickerPalettes,value:{hex:colorPickerValue},on:{open:function(e){e.app.params.dark&&e.$el.closest(".modal-in").addClass("theme-dark")}}})},find:function(a){return $(a).find(".color-picker-input")},getValue:function(a){var e=$(a).attr("id");return document.getElementById(e).value},setValue:function(a,e){},receiveMessage:function(a,e){},subscribe:function(a,e){$(a).on("change.f7ColorPickerBinding ",function(t){e()})},unsubscribe:function(a){$(a).off(".f7ColorPickerBinding ")}});Shiny.inputBindings.register(kl,"f7.colorpicker");var yl=new Shiny.InputBinding;$.extend(yl,{find:function(a){return $(a).find(".date-input")},getValue:function(a){return console.log($(a).attr("value")),$(a).attr("value")},setValue:function(a,e){},receiveMessage:function(a,e){},subscribe:function(a,e){$(a).on("keyup.dateInputBinding input.dateInputBinding",function(t){e(!0)}),$(a).on("change.f7DateBinding",function(t){e(!1)})},getRatePolicy:function(){return{policy:"debounce",delay:250}},unsubscribe:function(a){$(a).off(".f7DateBinding")}});Shiny.inputBindings.register(yl,"f7.date");var Cl=new Shiny.InputBinding;$.extend(Cl,{initialize:function(a){var e=$(a)[0],t=$(a).parent().find("script[data-for='"+a.id+"']");if(t=JSON.parse(t.html()),!t.hasOwnProperty("value"))t.value=[new Date];else for(var r=0;r0&&e.password.length>0?t.close():app.dialog.alert("Please enter a valid password and user."):t.open()},subscribe:function(a,e){$(a).on("loginscreen:opened.f7LoginBinding loginscreen:closed.f7LoginBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7LoginBinding")}});Shiny.inputBindings.register($l,"f7.login");var Sl=new Shiny.InputBinding;$.extend(Sl,{find:function(a){return $(a).find(".menu-item-dropdown")},getValue:function(a){return $(a).hasClass("menu-item-dropdown-opened")},receiveMessage:function(a,e){var t=$(a).hasClass("menu-item-dropdown-opened");t||app.menu.open($(a))},subscribe:function(a,e){$(a).on("menu:opened.f7MenuBinding menu:closed.f7MenuBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7MenuBinding")}});Shiny.inputBindings.register(Sl,"f7.menu");var Tl=new Shiny.InputBinding;$.extend(Tl,{initialize:function(a){this.app=we(),this.instance=this.app.messagebar.create({el:"#"+$(a).attr("id")})},setState:function(a){var e=this.instance.getValue(),t=$(a).find("#"+a.id+"-send");return e.length?$(t).removeClass("disabled"):$(t).addClass("disabled"),e},find:function(a){return $(a).find(".messagebar")},getValue:function(a){return this.setState(a)},setValue:function(a,e){this.instance.setValue(e)},setPlaceholder:function(a,e){this.instance.setPlaceholder(e)},receiveMessage:function(a,e){e.hasOwnProperty("value")&&this.setValue(a,e.value),e.hasOwnProperty("placeholder")&&this.setPlaceholder(a,e.placeholder)},subscribe:function(a,e){var t=this;$(a).on("input.f7MessageBarBinding change.f7MessageBarBinding focus.f7MessageBarBinding blur.f7MessageBarBinding",function(r){$(a).find("#"+a.id+"-send").on("click",function(){setTimeout(function(){t.instance.clear().focus()},1e3)}),e(!0)})},getRatePolicy:function(){return{policy:"debounce",delay:250}},unsubscribe:function(a){$(a).off(".f7MessageBarBinding")}});Shiny.inputBindings.register(Tl,"f7.messagebar");var zl=new Shiny.InputBinding;$.extend(zl,{initialize:function(a){this.app=we(),$(".page-content").addClass("messages-content");var e=$(a).attr("id"),t=$(a).find("script[data-for='"+e+"']");t=JSON.parse(t.html()),t.el="#"+e,t.firstMessageRule=function(r,o,n){return r.isTitle?!1:!o||o.type!==r.type||o.name!==r.name},t.lastMessageRule=function(r,o,n){return r.isTitle?!1:!n||n.type!==r.type||n.name!==r.name},t.tailMessageRule=function(r,o,n){return r.isTitle?!1:!n||n.type!==r.type||n.name!==r.name},this.instance=this.app.messages.create(t),this.messages=this.instance.messages},find:function(a){return $(a).find(".messages")},getValue:function(a){var e=this.messages.slice(1);return e.length>0?{...e}:null},setValue:function(a,e){var t=this,r=e.value;if(e.showTyping){var o=r.pop().name;this.instance.showTyping({header:o+" is typing"}),setTimeout(function(){t.instance.addMessages(r),t.instance.hideTyping()},1e3)}else this.instance.addMessages(r)},receiveMessage:async function(a,e){this.setValue(a,e),$(a).trigger("change")},subscribe:function(a,e){$(a).on("change.f7MessagesBinding",function(){e()})},unsubscribe:function(a){$(a).off(".f7MessagesBinding")}});Shiny.inputBindings.register(zl,"f7.messages");var Al=new Shiny.InputBinding;$.extend(Al,{initialize:function(a){var e={};e.el="#"+$(a).attr("id"),e.on={opened:function(){$(a).trigger("shown")}},app.panel.create(e)},find:function(a){return $(a).find(".panel")},getValue:function(a){var e=app.panel.get($(a));return e.opened},receiveMessage:function(a,e){var t=app.panel.get($(a));t.toggle(t.side)},subscribe:function(a,e){$(a).on("panel:open.f7PanelBinding panel:close.f7PanelBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7PanelBinding")}});Shiny.inputBindings.register(Al,"f7.panel");var Ml=new Shiny.InputBinding;$.extend(Ml,{find:function(a){return $(a).find(".panel-menu")},initialize:function(a){var e=$(a).find("a").first().data("tab"),t=$(a).find("a.tab-link-active").data("tab");t!==void 0?app.tab.show(t):app.tab.show(e)},getValue:function(a){var e=$(a).find("a.tab-link-active").data("tab");return e!==void 0?e.split("#")[1]:null},receiveMessage:function(a,e){e.hasOwnProperty("selected")&&app.tab.show("#"+e.ns+"-"+e.selected)},subscribe:function(a,e){$(a).find("a").on("click.f7PanelMenuBinding",function(t){$($(this).data("tab")).trigger("shown").trigger("shown"),e(!1)}),app.on("tabShow.f7PanelMenuBinding",function(t){e(!1)})},unsubscribe:function(a){$(a).off(".f7PanelMenuBinding")}});Shiny.inputBindings.register(Ml,"f7.tabsMenu");var Pl=new Shiny.InputBinding;$.extend(Pl,{initialize:function(a){var e=$(a)[0],t={};[].forEach.call(a.attributes,function(o){if(/^data-/.test(o.name)){var n=o.name.substr(5).replace(/-(.)/g,function(c,l){return l.toUpperCase()});if(["openIn","toolbarCloseText","choices","value"].indexOf(n)==-1){var s=o.value=="true";t[n]=s}else t[n]=o.value}}),t.inputEl=e,t.value=JSON.parse(t.value),t.cols=[{textAlign:"center",values:JSON.parse(t.choices)}],t.on={open:function(o){o.app.params.dark&&o.$el.closest(".modal-in").addClass("theme-dark")}};var r=app.picker.create(t);e.f7Picker=r},find:function(a){return $(a).find(".picker-input")},getValue:function(a){var e=app.picker.get($(a));return e.value},setValue:function(a,e){var t=app.picker.get($(a));t.value=e,t.displayValue=e,t.open(),setTimeout(function(){t.close()},10)},receiveMessage:function(a,e){var t=app.picker.get($(a));e.hasOwnProperty("value")&&this.setValue(a,e.value),e.hasOwnProperty("choices")&&(t.cols[0].values=e.choices),e.hasOwnProperty("rotateEffect")&&(t.params.rotateEffect=e.rotateEffect),e.hasOwnProperty("openIn")&&(t.params.openIn=e.openIn),e.hasOwnProperty("scrollToInput")&&(t.params.scrollToInput=e.scrollToInput),e.hasOwnProperty("closeByOutsideClick")&&(t.params.closeByOutsideClick=e.closeByOutsideClick),e.hasOwnProperty("toolbar")&&(t.params.toolbar=e.toolbar),e.hasOwnProperty("toolbarCloseText")&&(t.params.toolbarCloseText=e.toolbarCloseText),e.hasOwnProperty("sheetSwipeToClose")&&(t.params.sheetSwipeToClose=e.sheetSwipeToClose)},subscribe:function(a,e){$(a).on("change.f7PickerBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7PickerBinding")}});Shiny.inputBindings.register(Pl,"f7.picker");var Sr=Shiny.$escape;function Xu(a,e){if(!(typeof a>"u")){if(e.length!==1)throw new Error("labelNode must be of length 1");var t=$.isArray(a)&&a.length===0;t?e.addClass("shiny-label-null"):(e.text(a),e.removeClass("shiny-label-null"))}}var Bl=new Shiny.InputBinding;$.extend(Bl,{find:function(a){return $(a).find(".shiny-input-radiogroup")},getValue:function(a){var e=$('input:radio[name="'+Sr(a.id)+'"]:checked');return e.length===0?null:e.val()},setValue:function(a,e){$.isArray(e)&&e.length===0?$('input:radio[name="'+Sr(a.id)+'"]').prop("checked",!1):$('input:radio[name="'+Sr(a.id)+'"][value="'+Sr(e)+'"]').prop("checked",!0)},getState:function(a){for(var e=$('input:radio[name="'+Sr(a.id)+'"]'),t=new Array(e.length),r=0;r"+r+""};e.hasOwnProperty("choices")&&($(a).find("select").empty(),$.each(e.choices,function(r){var o=e.choices[r];$(a).find("select").append(t(o))})),e.hasOwnProperty("selected")&&this.setValue(a,e.selected)},subscribe:function(a,e){$(a).on("change.f7SmartSelectBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7SmartSelectBinding")}});Shiny.inputBindings.register(Rl,"f7.smartselect");var Ll=new Shiny.InputBinding;$.extend(Ll,{initialize:function(a){this.app=we();var e=$(a).attr("id"),t={};[].forEach.call(a.attributes,function(n){if(/^data-/.test(n.name)){var s=n.name.substr(5).replace(/-(.)/g,function(l,d){return d.toUpperCase()});if(["min","max","step","value","decimalPoint"].indexOf(s)==-1){var c=n.value=="true";t[s]=c}else t[s]=parseFloat(n.value)}}),t.el="#"+e;var r=this.app.stepper.create(t);if(!t.manualInputMode){var o=$(a).find("input");$(o).attr("readonly","")}},find:function(a){return $(a).find(".stepper")},getValue:function(a){return this.app.stepper.getValue(a)},setValue:function(a,e){this.app.stepper.setValue(a,e)},increment:function(){this.app.stepper.increment()},decrement:function(){this.app.stepper.decrement()},receiveMessage:function(a,e){var t=this.app.stepper.get($(a));if(e.hasOwnProperty("min")&&(t.min=e.min,t.params.min=e.min),e.hasOwnProperty("max")&&(t.max=e.max,t.params.max=e.max),e.hasOwnProperty("wraps")&&(t.params.wraps=e.wraps),e.hasOwnProperty("decimalPoint")&&(t.decimalPoint=e.decimalPoint,t.params.decimalPoint=e.decimalPoint),e.hasOwnProperty("manual")){t.params.manualInputMode=e.manual;var r=$(a).find("input");e.manual?typeof $(r).attr("readonly")<"u"&&$(r).removeAttr("readonly"):$(r).attr("readonly","")}e.hasOwnProperty("step")&&(t.step=e.step,t.params.step=e.step),e.hasOwnProperty("autorepeat")&&(t.params.autorepeat=e.autorepeat,t.params.autorepeatDynamic=e.autorepeat),e.hasOwnProperty("rounded")&&(e.rounded?$(a).addClass("stepper-round"):$(a).removeClass("stepper-round")),e.hasOwnProperty("raised")&&(e.raised?$(a).addClass("stepper-raised"):$(a).removeClass("stepper-raised")),e.hasOwnProperty("color")&&($(a).removeClass(function(o,n){return(n.match(/(^|\s)color-\S+/g)||[]).join(" ")}),$(a).addClass("color-"+e.color)),e.hasOwnProperty("size")&&($(a).hasClass("stepper-small")||$(a).hasClass("stepper-large")?$(a).hasClass("stepper-small")&&e.size=="large"?($(a).removeClass("stepper-small"),$(a).addClass("stepper-large")):$(a).hasClass("stepper-large")&&e.size=="small"&&($(a).addClass("stepper-small"),$(a).removeClass("stepper-large")):e.size=="small"?$(a).addClass("stepper-small"):e.size=="large"&&$(a).addClass("stepper-large")),e.hasOwnProperty("value")&&(this.setValue(a,e.value),t.params.value=e.value)},subscribe:function(a,e){var t=this;$(a).on("stepper:change.f7StepperBinding",function(r){var o=t.app.stepper.get(a);o.params.autorepeat?e(!0):e()})},unsubscribe:function(a){$(a).off(".f7StepperBinding")},getRatePolicy:function(){return{policy:"debounce",delay:500}}});Shiny.inputBindings.register(Ll,"f7.stepper");var Fl=new Shiny.InputBinding;$.extend(Fl,{find:function(a){return $(a).find(".tabs")},getValue:function(a){var e;return $(a).hasClass("standalone")?e=$(a).find(".tab-active"):e=$(a).find(".page-content.tab-active"),$(e).data("hidden")?$(".tab-link-highlight").hide():$(".tab-link-highlight").show(),$(e).attr("data-value")!==void 0?$(e).attr("data-value"):null},receiveMessage:function(a,e){e.hasOwnProperty("selected")&&app.tab.show("#"+e.ns+"-"+e.selected)},subscribe:function(a,e){$(a).on("tab:show.f7TabsBinding",function(t){$(a).trigger("shown"),e()})},unsubscribe:function(a){$(a).off(".f7TabsBinding")}});Shiny.inputBindings.register(Fl,"f7.tabs");var Hl=new Shiny.InputBinding;$.extend(Hl,{initialize:function(a){app.toggle.create({el:a})},find:function(a){return $(a).find(".toggle")},getValue:function(a){return app.toggle.get($(a)).checked},setValue:function(a,e){var t=app.toggle.get($(a));t.checked=e},receiveMessage:function(a,e){e.hasOwnProperty("checked")&&this.setValue(a,e.checked),e.hasOwnProperty("color")&&($(a).removeClass(function(t,r){return(r.match(/(^|\s)color-\S+/g)||[]).join(" ")}),$(a).addClass("color-"+e.color))},subscribe:function(a,e){$(a).on("toggle:change.f7ToggleBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7ToggleBinding")}});Shiny.inputBindings.register(Hl,"f7.toggle");var Vl=new Shiny.InputBinding;$.extend(Vl,{decodeHTML:function(a){var e=document.createElement("textarea");return e.innerHTML=a,e.value},initialize:function(a){this.app=we();var e=$(a).attr("id"),t=$(a).find("script[data-for='"+e+"']");t=JSON.parse(t.html()),t.el="#"+e;var r=this;for(var o of t.items)o.media.length>0&&(o.media=''+r.decodeHTML(o.media)+"
");function n(s){var c=s.media.length>0?''+s.media+"
":"",l=''+c+'
"+(s.title===void 0?"":s.title)+'
'+(s.right===void 0?"":s.right)+'
'+(s.subtitle===void 0?"":s.subtitle)+'
'+s.content+"
";return s.url===void 0?""+l+"":''+l+""}t.renderItem=n,t.searchAll=function(s,c){for(var l=[],d=0;d=0||s.trim()==="")&&l.push(d);return l},t.height=t.items[0].media!==void 0?this.app.theme==="ios"?112:this.app.theme==="md"?132:78:this.app.theme==="ios"?63:this.app.theme==="md"?73:46,console.log(t),this.app.virtualList.create(t)},find:function(a){return $(a).find(".virtual-list")},getValue:function(a){var e=this.app.virtualList.get(a);return{length:e.items.length,current_from:e.currentFromIndex+1,current_to:e.currentToIndex+1,reach_end:e.reachEnd}},setValue:function(a,e){var t=this.app.virtualList.get(a);t.resetFilter();var r=function(o){var n;if(o.length===void 0)n=`${o.media}
`,o.media=n;else for(var s=0;s${o[s].media}`,o[s].media=n;return o};switch(e.action){case"appendItem":t.appendItem(r(e.item));break;case"prependItem":t.prependItem(r(e.item));break;case"appendItems":t.appendItems(r(e.items));break;case"prependItems":t.prependItems(r(e.items));break;case"replaceItem":t.replaceItem(e.index,e.item);break;case"replaceAllItems":t.replaceAllItems(e.items);break;case"moveItem":t.moveItem(e.oldIndex,e.newIndex);break;case"insertItemBefore":t.insertItemBefore(e.index,r(e.item));break;case"filterItems":t.filterItems(e.indexes);break;case"deleteItem":t.deleteItem(e.index);break;case"deleteAllItems":t.deleteAllItems(e.indexes);break;case"scrollToItem":t.scrollToItem(e.index);break;default:}$(a).trigger("change")},receiveMessage:function(a,e){this.setValue(a,e)},subscribe:function(a,e){$(a).on("change.f7VirtualListBinding",function(t){e()})},unsubscribe:function(a){$(a).off(".f7VirtualListBinding")}});Shiny.inputBindings.register(Vl,"f7.virtuallist");
diff --git a/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js.map b/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js.map
index 1d293356..c4d437bc 100644
--- a/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js.map
+++ b/inst/shinyMobile-1.0.1/dist/shinyMobile.min.js.map
@@ -1,7 +1,7 @@
{
"version": 3,
"sources": ["../../../node_modules/dom7/dom7.esm.js", "../../../node_modules/ssr-window/ssr-window.esm.js", "../../../node_modules/framework7/shared/dom7.js", "../../../node_modules/framework7/shared/utils.js", "../../../node_modules/framework7/shared/material-color-utils.js", "../../../node_modules/framework7/shared/material-colors.js", "../../../node_modules/framework7/shared/get-support.js", "../../../node_modules/framework7/shared/get-device.js", "../../../node_modules/framework7/shared/events-class.js", "../../../node_modules/framework7/shared/class.js", "../../../node_modules/framework7/shared/constructor-methods.js", "../../../node_modules/framework7/shared/modal-methods.js", "../../../node_modules/framework7/components/app/load-module.js", "../../../node_modules/framework7/shared/$jsx.js", "../../../node_modules/framework7/components/app/app-class.js", "../../../node_modules/framework7/modules/device/device.js", "../../../node_modules/framework7/modules/support/support.js", "../../../node_modules/framework7/modules/utils/utils.js", "../../../node_modules/framework7/modules/resize/resize.js", "../../../node_modules/framework7/modules/touch/touch.js", "../../../node_modules/path-to-regexp/src/index.ts", "../../../node_modules/framework7/shared/history.js", "../../../node_modules/framework7/modules/router/swipe-back.js", "../../../node_modules/framework7/modules/router/redirect.js", "../../../node_modules/framework7/modules/router/process-route-queue.js", "../../../node_modules/framework7/modules/router/app-router-check.js", "../../../node_modules/framework7/modules/router/async-component.js", "../../../node_modules/framework7/modules/router/navigate.js", "../../../node_modules/framework7/modules/router/tab.js", "../../../node_modules/framework7/modules/router/modal.js", "../../../node_modules/framework7/modules/router/back.js", "../../../node_modules/framework7/modules/router/clear-previous-history.js", "../../../node_modules/framework7/modules/router/router-class.js", "../../../node_modules/framework7/modules/router/router.js", "../../../node_modules/framework7/components/view/resizable-view.js", "../../../node_modules/framework7/components/view/view-class.js", "../../../node_modules/framework7/modules/clicks/clicks.js", "../../../node_modules/framework7/modules/router/component-loader.js", "../../../node_modules/htm/dist/htm.module.js", "../../../node_modules/framework7/modules/component/$h.js", "../../../node_modules/framework7/modules/component/snabbdom/vnode.js", "../../../node_modules/framework7/modules/component/snabbdom/is.js", "../../../node_modules/framework7/modules/component/snabbdom/h.js", "../../../node_modules/framework7/modules/component/custom-components.js", "../../../node_modules/framework7/modules/component/vdom.js", "../../../node_modules/framework7/modules/component/snabbdom/htmldomapi.js", "../../../node_modules/framework7/modules/component/snabbdom/snabbdom.js", "../../../node_modules/framework7/modules/component/snabbdom/modules/attributes.js", "../../../node_modules/framework7/modules/component/snabbdom/modules/props.js", "../../../node_modules/framework7/modules/component/snabbdom/modules/style.js", "../../../node_modules/framework7/modules/component/eventslisteners.js", "../../../node_modules/framework7/modules/component/patch.js", "../../../node_modules/framework7/modules/component/$jsx.js", "../../../node_modules/framework7/modules/component/component-class.js", "../../../node_modules/framework7/modules/component/parse-component.js", "../../../node_modules/framework7/modules/component/component.js", "../../../node_modules/framework7/modules/history/history.js", "../../../node_modules/framework7/modules/service-worker/service-worker.js", "../../../node_modules/framework7/modules/store/create-store.js", "../../../node_modules/framework7/modules/store/store.js", "../../../node_modules/framework7/components/statusbar/statusbar.js", "../../../node_modules/framework7/components/view/view.js", "../../../node_modules/framework7/components/navbar/navbar.js", "../../../node_modules/framework7/components/toolbar/toolbar.js", "../../../node_modules/framework7/components/subnavbar/subnavbar.js", "../../../node_modules/framework7/components/touch-ripple/touch-ripple-class.js", "../../../node_modules/framework7/components/touch-ripple/touch-ripple.js", "../../../node_modules/framework7/components/modal/modal-class.js", "../../../node_modules/framework7/components/modal/custom-modal-class.js", "../../../node_modules/framework7/components/modal/modal.js", "../../../node_modules/framework7/components/dialog/dialog-class.js", "../../../node_modules/framework7/components/dialog/dialog.js", "../../../node_modules/framework7/components/popup/popup-class.js", "../../../node_modules/framework7/components/popup/popup.js", "../../../node_modules/framework7/components/login-screen/login-screen-class.js", "../../../node_modules/framework7/components/login-screen/login-screen.js", "../../../node_modules/framework7/components/popover/popover-class.js", "../../../node_modules/framework7/components/popover/popover.js", "../../../node_modules/framework7/components/actions/actions-class.js", "../../../node_modules/framework7/components/actions/actions.js", "../../../node_modules/framework7/components/sheet/sheet-class.js", "../../../node_modules/framework7/components/sheet/sheet.js", "../../../node_modules/framework7/components/toast/toast-class.js", "../../../node_modules/framework7/components/toast/toast.js", "../../../node_modules/framework7/components/preloader/preloader.js", "../../../node_modules/framework7/components/progressbar/progressbar.js", "../../../node_modules/framework7/components/sortable/sortable.js", "../../../node_modules/framework7/components/swipeout/swipeout.js", "../../../node_modules/framework7/components/accordion/accordion.js", "../../../node_modules/framework7/components/contacts-list/contacts-list.js", "../../../node_modules/framework7/components/virtual-list/virtual-list-class.js", "../../../node_modules/framework7/components/virtual-list/virtual-list.js", "../../../node_modules/framework7/components/list-index/list-index-class.js", "../../../node_modules/framework7/components/list-index/list-index.js", "../../../node_modules/framework7/components/timeline/timeline.js", "../../../node_modules/framework7/components/tabs/tabs.js", "../../../node_modules/framework7/components/panel/swipe-panel.js", "../../../node_modules/framework7/components/panel/resizable-panel.js", "../../../node_modules/framework7/components/panel/panel-class.js", "../../../node_modules/framework7/components/panel/panel.js", "../../../node_modules/framework7/components/card/card.js", "../../../node_modules/framework7/components/chip/chip.js", "../../../node_modules/framework7/components/form/form.js", "../../../node_modules/framework7/components/input/input.js", "../../../node_modules/framework7/components/checkbox/checkbox.js", "../../../node_modules/framework7/components/radio/radio.js", "../../../node_modules/framework7/components/toggle/toggle-class.js", "../../../node_modules/framework7/components/toggle/toggle.js", "../../../node_modules/framework7/components/range/range-class.js", "../../../node_modules/framework7/components/range/range.js", "../../../node_modules/framework7/components/stepper/stepper-class.js", "../../../node_modules/framework7/components/stepper/stepper.js", "../../../node_modules/framework7/components/searchbar/remove-diacritics.js", "../../../node_modules/framework7/components/smart-select/smart-select-class.js", "../../../node_modules/framework7/components/smart-select/smart-select.js", "../../../node_modules/framework7/components/grid/grid.js", "../../../node_modules/framework7/components/calendar/calendar-class.js", "../../../node_modules/framework7/components/calendar/calendar.js", "../../../node_modules/framework7/components/picker/picker-column.js", "../../../node_modules/framework7/components/picker/picker-class.js", "../../../node_modules/framework7/components/picker/picker.js", "../../../node_modules/framework7/components/infinite-scroll/infinite-scroll.js", "../../../node_modules/framework7/components/pull-to-refresh/pull-to-refresh-class.js", "../../../node_modules/framework7/components/pull-to-refresh/pull-to-refresh.js", "../../../node_modules/framework7/components/data-table/data-table-class.js", "../../../node_modules/framework7/components/data-table/data-table.js", "../../../node_modules/framework7/components/fab/fab.js", "../../../node_modules/framework7/components/searchbar/searchbar-class.js", "../../../node_modules/framework7/components/searchbar/searchbar.js", "../../../node_modules/framework7/components/messages/messages-class.js", "../../../node_modules/framework7/components/messages/messages.js", "../../../node_modules/framework7/components/messagebar/messagebar-class.js", "../../../node_modules/framework7/components/messagebar/messagebar.js", "../../../node_modules/swiper/shared/ssr-window.esm.mjs", "../../../node_modules/swiper/shared/utils.mjs", "../../../node_modules/swiper/shared/swiper-core.mjs", "../../../node_modules/swiper/modules/virtual.mjs", "../../../node_modules/swiper/modules/keyboard.mjs", "../../../node_modules/swiper/modules/mousewheel.mjs", "../../../node_modules/swiper/shared/create-element-if-not-defined.mjs", "../../../node_modules/swiper/modules/navigation.mjs", "../../../node_modules/swiper/shared/classes-to-selector.mjs", "../../../node_modules/swiper/modules/pagination.mjs", "../../../node_modules/swiper/modules/scrollbar.mjs", "../../../node_modules/swiper/modules/parallax.mjs", "../../../node_modules/swiper/modules/zoom.mjs", "../../../node_modules/swiper/modules/controller.mjs", "../../../node_modules/swiper/modules/a11y.mjs", "../../../node_modules/swiper/modules/history.mjs", "../../../node_modules/swiper/modules/hash-navigation.mjs", "../../../node_modules/swiper/modules/autoplay.mjs", "../../../node_modules/swiper/modules/thumbs.mjs", "../../../node_modules/swiper/modules/free-mode.mjs", "../../../node_modules/swiper/modules/grid.mjs", "../../../node_modules/swiper/modules/manipulation.mjs", "../../../node_modules/swiper/shared/effect-init.mjs", "../../../node_modules/swiper/shared/effect-target.mjs", "../../../node_modules/swiper/shared/effect-virtual-transition-end.mjs", "../../../node_modules/swiper/modules/effect-fade.mjs", "../../../node_modules/swiper/modules/effect-cube.mjs", "../../../node_modules/swiper/shared/create-shadow.mjs", "../../../node_modules/swiper/modules/effect-flip.mjs", "../../../node_modules/swiper/modules/effect-coverflow.mjs", "../../../node_modules/swiper/modules/effect-creative.mjs", "../../../node_modules/swiper/modules/effect-cards.mjs", "../../../node_modules/swiper/swiper-bundle.mjs", "../../../node_modules/swiper/shared/update-swiper.mjs", "../../../node_modules/swiper/shared/get-element-params.mjs", "../../../node_modules/swiper/swiper-element-bundle.mjs", "../../../node_modules/framework7/components/swiper/swiper.js", "../../../node_modules/framework7/components/photo-browser/photo-browser-class.js", "../../../node_modules/framework7/components/photo-browser/photo-browser.js", "../../../node_modules/framework7/components/notification/notification-class.js", "../../../node_modules/framework7/components/notification/notification.js", "../../../node_modules/framework7/components/autocomplete/autocomplete-class.js", "../../../node_modules/framework7/components/autocomplete/autocomplete.js", "../../../node_modules/framework7/components/tooltip/tooltip-class.js", "../../../node_modules/framework7/components/tooltip/tooltip.js", "../../../node_modules/framework7/components/gauge/gauge-class.js", "../../../node_modules/framework7/components/gauge/gauge.js", "../../../node_modules/framework7/components/skeleton/skeleton.js", "../../../node_modules/framework7/components/color-picker/modules/alpha-slider.js", "../../../node_modules/framework7/components/color-picker/modules/current-color.js", "../../../node_modules/framework7/components/color-picker/modules/hex.js", "../../../node_modules/framework7/components/color-picker/modules/hsb-sliders.js", "../../../node_modules/framework7/components/color-picker/modules/hue-slider.js", "../../../node_modules/framework7/components/color-picker/modules/brightness-slider.js", "../../../node_modules/framework7/components/color-picker/modules/palette.js", "../../../node_modules/framework7/components/color-picker/modules/initial-current-colors.js", "../../../node_modules/framework7/components/color-picker/modules/rgb-bars.js", "../../../node_modules/framework7/components/color-picker/modules/rgb-sliders.js", "../../../node_modules/framework7/components/color-picker/modules/sb-spectrum.js", "../../../node_modules/framework7/components/color-picker/modules/hs-spectrum.js", "../../../node_modules/framework7/components/color-picker/modules/wheel.js", "../../../node_modules/framework7/components/color-picker/color-picker-class.js", "../../../node_modules/framework7/components/color-picker/color-picker.js", "../../../node_modules/framework7/components/treeview/treeview.js", "../../../node_modules/framework7/components/text-editor/text-editor-class.js", "../../../node_modules/framework7/components/text-editor/text-editor.js", "../../../node_modules/framework7/components/pie-chart/pie-chart-class.js", "../../../node_modules/framework7/components/pie-chart/pie-chart.js", "../../../node_modules/framework7/components/area-chart/area-chart-class.js", "../../../node_modules/framework7/components/area-chart/area-chart.js", "../../../node_modules/framework7/components/breadcrumbs/breadcrumbs.js", "../../../node_modules/framework7/components/typography/typography.js", "../../../node_modules/framework7/framework7-bundle.esm.js", "../../../node_modules/framework7/framework7.esm.js", "../../../srcjs/helpers/helpers-config.js", "../../../srcjs/helpers/helpers-theme.js", "../../../srcjs/helpers/helpers-pwa.js", "../../../srcjs/helpers/helpers-disconnect.js", "../../../srcjs/helpers/helpers-styles.js", "../../../srcjs/init.js", "../../../srcjs/utils/shinyUtils.js", "../../../srcjs/handlers/updateApp.js", "../../../srcjs/handlers/updateEntity.js", "../../../srcjs/handlers/validateInput.js", "../../../srcjs/components/init.js", "../../../srcjs/components/actionSheet.js", "../../../srcjs/components/chips.js", "../../../srcjs/components/dialog.js", "../../../srcjs/components/gauge.js", "../../../srcjs/components/navbar.js", "../../../srcjs/components/popover.js", "../../../srcjs/components/preloader.js", "../../../srcjs/components/progress.js", "../../../srcjs/components/pullToRefresh.js", "../../../srcjs/components/skeleton.js", "../../../srcjs/components/subNavbar.js", "../../../srcjs/components/swipeout.js", "../../../srcjs/components/tabs.js", "../../../srcjs/components/tapHold.js", "../../../srcjs/components/tooltip.js", "../../../srcjs/bindings/actionSheetInputBinding.js", "../../../srcjs/bindings/autoCompleteInputBinding.js", "../../../srcjs/bindings/buttonInputBinding.js", "../../../srcjs/bindings/cardInputBinding.js", "../../../srcjs/bindings/collapsibleInputBinding.js", "../../../srcjs/bindings/colorPickerInputBinding.js", "../../../srcjs/bindings/dateInputBinding.js", "../../../srcjs/bindings/datePickerInputBinding.js", "../../../srcjs/bindings/fabsInputBinding.js", "../../../srcjs/bindings/loginInputBinding.js", "../../../srcjs/bindings/menuInputBinding.js", "../../../srcjs/bindings/messageBarInputBinding.js", "../../../srcjs/bindings/messagesInputBinding.js", "../../../srcjs/bindings/panelInputBinding.js", "../../../srcjs/bindings/panelMenuInputBinding.js", "../../../srcjs/bindings/pickerInputBinding.js", "../../../srcjs/bindings/radioInputBinding.js", "../../../srcjs/bindings/selectInputBinding.js", "../../../srcjs/bindings/sheetInputBinding.js", "../../../srcjs/bindings/sliderInputBinding.js", "../../../srcjs/bindings/smartSelectBinding.js", "../../../srcjs/bindings/stepperInputBinding.js", "../../../srcjs/bindings/tabsInputBinding.js", "../../../srcjs/bindings/toggleInputBinding.js", "../../../srcjs/bindings/virtualListBinding.js"],
- "sourcesContent": ["/**\n * Dom7 4.0.6\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2023, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: February 2, 2023\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionStart(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionstart', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionstart', fireCallBack);\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, transitionStart, trigger, val, value, width };\n", "/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n", "// eslint-disable-next-line\nimport * as methods from 'dom7';\nObject.keys(methods).forEach(methodName => {\n if (methodName === '$') return;\n methods.$.fn[methodName] = methods[methodName];\n});\nexport default methods.$;", "import { getWindow } from 'ssr-window';\nimport { materialColors } from './material-colors.js';\nlet uniqueNum = 0;\nexport function uniqueNumber() {\n uniqueNum += 1;\n return uniqueNum;\n}\nexport function id(mask, map) {\n if (mask === void 0) {\n mask = 'xxxxxxxxxx';\n }\n if (map === void 0) {\n map = '0123456789abcdef';\n }\n const length = map.length;\n return mask.replace(/x/g, () => map[Math.floor(Math.random() * length)]);\n}\nexport const mdPreloaderContent = `\n \n \n \n`.trim();\nexport const iosPreloaderContent = `\n \n ${[0, 1, 2, 3, 4, 5, 6, 7].map(() => '').join('')}\n \n`.trim();\nexport function eventNameToColonCase(eventName) {\n let hasColon;\n return eventName.split('').map((char, index) => {\n if (char.match(/[A-Z]/) && index !== 0 && !hasColon) {\n hasColon = true;\n return `:${char.toLowerCase()}`;\n }\n return char.toLowerCase();\n }).join('');\n}\nexport function deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no setter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nexport function requestAnimationFrame(callback) {\n const window = getWindow();\n return window.requestAnimationFrame(callback);\n}\nexport function cancelAnimationFrame(frameId) {\n const window = getWindow();\n return window.cancelAnimationFrame(frameId);\n}\nexport function nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nexport function nextFrame(callback) {\n return requestAnimationFrame(() => {\n requestAnimationFrame(callback);\n });\n}\nexport function now() {\n return Date.now();\n}\nexport function parseUrlQuery(url) {\n const window = getWindow();\n const query = {};\n let urlToParse = url || window.location.href;\n let i;\n let params;\n let param;\n let length;\n if (typeof urlToParse === 'string' && urlToParse.length) {\n urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\\S*\\?/, '') : '';\n params = urlToParse.split('&').filter(paramsPart => paramsPart !== '');\n length = params.length;\n for (i = 0; i < length; i += 1) {\n param = params[i].replace(/#\\S+/g, '').split('=');\n query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param.slice(1).join('=')) || '';\n }\n }\n return query;\n}\nexport function getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = window.getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nexport function serializeObject(obj, parents) {\n if (parents === void 0) {\n parents = [];\n }\n if (typeof obj === 'string') return obj;\n const resultArray = [];\n const separator = '&';\n let newParents;\n function varName(name) {\n if (parents.length > 0) {\n let parentParts = '';\n for (let j = 0; j < parents.length; j += 1) {\n if (j === 0) parentParts += parents[j];else parentParts += `[${encodeURIComponent(parents[j])}]`;\n }\n return `${parentParts}[${encodeURIComponent(name)}]`;\n }\n return encodeURIComponent(name);\n }\n function varValue(value) {\n return encodeURIComponent(value);\n }\n Object.keys(obj).forEach(prop => {\n let toPush;\n if (Array.isArray(obj[prop])) {\n toPush = [];\n for (let i = 0; i < obj[prop].length; i += 1) {\n if (!Array.isArray(obj[prop][i]) && typeof obj[prop][i] === 'object') {\n newParents = parents.slice();\n newParents.push(prop);\n newParents.push(String(i));\n toPush.push(serializeObject(obj[prop][i], newParents));\n } else {\n toPush.push(`${varName(prop)}[]=${varValue(obj[prop][i])}`);\n }\n }\n if (toPush.length > 0) resultArray.push(toPush.join(separator));\n } else if (obj[prop] === null || obj[prop] === '') {\n resultArray.push(`${varName(prop)}=`);\n } else if (typeof obj[prop] === 'object') {\n // Object, convert to named array\n newParents = parents.slice();\n newParents.push(prop);\n toPush = serializeObject(obj[prop], newParents);\n if (toPush !== '') resultArray.push(toPush);\n } else if (typeof obj[prop] !== 'undefined' && obj[prop] !== '') {\n // Should be string or plain value\n resultArray.push(`${varName(prop)}=${varValue(obj[prop])}`);\n } else if (obj[prop] === '') resultArray.push(varName(prop)); // eslint-disable-line\n });\n\n return resultArray.join(separator);\n}\nexport function isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n}\nexport function merge() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n const to = args[0];\n args.splice(0, 1);\n const from = args;\n for (let i = 0; i < from.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n}\nexport function extend() {\n let deep = true;\n let to;\n let from;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'boolean') {\n deep = args[0];\n to = args[1];\n args.splice(0, 2);\n from = args;\n } else {\n to = args[0];\n args.splice(0, 1);\n from = args;\n }\n for (let i = 0; i < from.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null) {\n const keysArray = Object.keys(Object(nextSource));\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (!deep) {\n to[nextKey] = nextSource[nextKey];\n } else if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n extend(to[nextKey], nextSource[nextKey]);\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nexport function colorHexToRgb(hex) {\n const h = hex.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, (m, r, g, b) => r + r + g + g + b + b);\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(h);\n return result ? result.slice(1).map(n => parseInt(n, 16)) : null;\n}\nexport function colorRgbToHex(r, g, b) {\n const result = [r, g, b].map(n => {\n const hex = n.toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n }).join('');\n return `#${result}`;\n}\nexport function colorRgbToHsl(r, g, b) {\n r /= 255; // eslint-disable-line\n g /= 255; // eslint-disable-line\n b /= 255; // eslint-disable-line\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n let h;\n if (d === 0) h = 0;else if (max === r) h = (g - b) / d % 6;else if (max === g) h = (b - r) / d + 2;else if (max === b) h = (r - g) / d + 4;\n const l = (min + max) / 2;\n const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));\n if (h < 0) h = 360 / 60 + h;\n return [h * 60, s, l];\n}\nexport function colorHslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hp = h / 60;\n const x = c * (1 - Math.abs(hp % 2 - 1));\n let rgb1;\n if (Number.isNaN(h) || typeof h === 'undefined') {\n rgb1 = [0, 0, 0];\n } else if (hp <= 1) rgb1 = [c, x, 0];else if (hp <= 2) rgb1 = [x, c, 0];else if (hp <= 3) rgb1 = [0, c, x];else if (hp <= 4) rgb1 = [0, x, c];else if (hp <= 5) rgb1 = [x, 0, c];else if (hp <= 6) rgb1 = [c, 0, x];\n const m = l - c / 2;\n return rgb1.map(n => Math.max(0, Math.min(255, Math.round(255 * (n + m)))));\n}\nexport function colorHsbToHsl(h, s, b) {\n const HSL = {\n h,\n s: 0,\n l: 0\n };\n const HSB = {\n h,\n s,\n b\n };\n HSL.l = (2 - HSB.s) * HSB.b / 2;\n HSL.s = HSL.l && HSL.l < 1 ? HSB.s * HSB.b / (HSL.l < 0.5 ? HSL.l * 2 : 2 - HSL.l * 2) : HSL.s;\n return [HSL.h, HSL.s, HSL.l];\n}\nexport function colorHslToHsb(h, s, l) {\n const HSB = {\n h,\n s: 0,\n b: 0\n };\n const HSL = {\n h,\n s,\n l\n };\n const t = HSL.s * (HSL.l < 0.5 ? HSL.l : 1 - HSL.l);\n HSB.b = HSL.l + t;\n HSB.s = HSL.l > 0 ? 2 * t / HSB.b : HSB.s;\n return [HSB.h, HSB.s, HSB.b];\n}\nconst getShadeTintColors = rgb => {\n const hsl = colorRgbToHsl(...rgb);\n const hslShade = [hsl[0], hsl[1], Math.max(0, hsl[2] - 0.08)];\n const hslTint = [hsl[0], hsl[1], Math.max(0, hsl[2] + 0.08)];\n const shade = colorRgbToHex(...colorHslToRgb(...hslShade));\n const tint = colorRgbToHex(...colorHslToRgb(...hslTint));\n return {\n shade,\n tint\n };\n};\nexport function colorThemeCSSProperties() {\n let hex;\n let rgb;\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n if (args.length === 1) {\n hex = args[0];\n rgb = colorHexToRgb(hex);\n } else if (args.length === 3) {\n rgb = args;\n hex = colorRgbToHex(...rgb);\n }\n if (!rgb) return {};\n const {\n light,\n dark\n } = materialColors(hex);\n const shadeTintIos = getShadeTintColors(rgb);\n const shadeTintMdLight = getShadeTintColors(colorHexToRgb(light['--f7-md-primary']));\n const shadeTintMdDark = getShadeTintColors(colorHexToRgb(dark['--f7-md-primary']));\n Object.keys(light).forEach(key => {\n if (key.includes('surface-')) {\n light[`${key}-rgb`] = colorHexToRgb(light[key]);\n }\n });\n Object.keys(dark).forEach(key => {\n if (key.includes('surface-')) {\n dark[`${key}-rgb`] = colorHexToRgb(dark[key]);\n }\n });\n return {\n ios: {\n '--f7-theme-color': 'var(--f7-ios-primary)',\n '--f7-theme-color-rgb': 'var(--f7-ios-primary-rgb)',\n '--f7-theme-color-shade': 'var(--f7-ios-primary-shade)',\n '--f7-theme-color-tint': 'var(--f7-ios-primary-tint)'\n },\n md: {\n '--f7-theme-color': 'var(--f7-md-primary)',\n '--f7-theme-color-rgb': 'var(--f7-md-primary-rgb)',\n '--f7-theme-color-shade': 'var(--f7-md-primary-shade)',\n '--f7-theme-color-tint': 'var(--f7-md-primary-tint)'\n },\n light: {\n '--f7-ios-primary': hex,\n '--f7-ios-primary-shade': shadeTintIos.shade,\n '--f7-ios-primary-tint': shadeTintIos.tint,\n '--f7-ios-primary-rgb': rgb.join(', '),\n '--f7-md-primary-shade': shadeTintMdLight.shade,\n '--f7-md-primary-tint': shadeTintMdLight.tint,\n '--f7-md-primary-rgb': colorHexToRgb(light['--f7-md-primary']).join(', '),\n ...light\n },\n dark: {\n '--f7-md-primary-shade': shadeTintMdDark.shade,\n '--f7-md-primary-tint': shadeTintMdDark.tint,\n '--f7-md-primary-rgb': colorHexToRgb(dark['--f7-md-primary']).join(', '),\n ...dark\n }\n };\n}\nexport function bindMethods(instance, obj) {\n Object.keys(obj).forEach(key => {\n if (isObject(obj[key])) {\n Object.keys(obj[key]).forEach(subKey => {\n if (typeof obj[key][subKey] === 'function') {\n obj[key][subKey] = obj[key][subKey].bind(instance);\n }\n });\n }\n instance[key] = obj[key];\n });\n}\nexport function flattenArray() {\n const arr = [];\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n args.forEach(arg => {\n if (Array.isArray(arg)) arr.push(...flattenArray(...arg));else arr.push(arg);\n });\n return arr;\n}\nexport function colorThemeCSSStyles(colors) {\n if (colors === void 0) {\n colors = {};\n }\n const stringifyObject = obj => {\n let res = '';\n Object.keys(obj).forEach(key => {\n res += `${key}:${obj[key]};`;\n });\n return res;\n };\n const colorVars = colorThemeCSSProperties(colors.primary);\n const primary = [`:root{`, stringifyObject(colorVars.light), `--swiper-theme-color:var(--f7-theme-color);`, ...Object.keys(colors).map(colorName => `--f7-color-${colorName}: ${colors[colorName]};`), `}`, `.dark{`, stringifyObject(colorVars.dark), `}`, `.ios, .ios .dark{`, stringifyObject(colorVars.ios), '}', `.md, .md .dark{`, stringifyObject(colorVars.md), '}'].join('');\n const restVars = {};\n Object.keys(colors).forEach(colorName => {\n const colorValue = colors[colorName];\n restVars[colorName] = colorThemeCSSProperties(colorValue);\n });\n\n // rest\n let rest = '';\n Object.keys(colors).forEach(colorName => {\n const {\n light,\n dark,\n ios,\n md\n } = restVars[colorName];\n const whiteColorVars = `\n --f7-ios-primary: #ffffff;\n --f7-ios-primary-shade: #ebebeb;\n --f7-ios-primary-tint: #ffffff;\n --f7-ios-primary-rgb: 255, 255, 255;\n --f7-md-primary-shade: #eee;\n --f7-md-primary-tint: #fff;\n --f7-md-primary-rgb: 255, 255, 255;\n --f7-md-primary: #fff;\n --f7-md-on-primary: #000;\n --f7-md-primary-container: #fff;\n --f7-md-on-primary-container: #000;\n --f7-md-secondary: #fff;\n --f7-md-on-secondary: #000;\n --f7-md-secondary-container: #555;\n --f7-md-on-secondary-container: #fff;\n --f7-md-surface: #fff;\n --f7-md-on-surface: #000;\n --f7-md-surface-variant: #333;\n --f7-md-on-surface-variant: #fff;\n --f7-md-outline: #fff;\n --f7-md-outline-variant: #fff;\n --f7-md-inverse-surface: #000;\n --f7-md-inverse-on-surface: #fff;\n --f7-md-inverse-primary: #000;\n --f7-md-surface-1: #f8f8f8;\n --f7-md-surface-2: #f1f1f1;\n --f7-md-surface-3: #e7e7e7;\n --f7-md-surface-4: #e1e1e1;\n --f7-md-surface-5: #d7d7d7;\n --f7-md-surface-variant-rgb: 51, 51, 51;\n --f7-md-on-surface-variant-rgb: 255, 255, 255;\n --f7-md-surface-1-rgb: 248, 248, 248;\n --f7-md-surface-2-rgb: 241, 241, 241;\n --f7-md-surface-3-rgb: 231, 231, 231;\n --f7-md-surface-4-rgb: 225, 225, 225;\n --f7-md-surface-5-rgb: 215, 215, 215;\n `;\n const blackColorVars = `\n --f7-ios-primary: #000;\n --f7-ios-primary-shade: #000;\n --f7-ios-primary-tint: #232323;\n --f7-ios-primary-rgb: 0, 0, 0;\n --f7-md-primary-shade: #000;\n --f7-md-primary-tint: #232323;\n --f7-md-primary-rgb: 0, 0, 0;\n --f7-md-primary: #000;\n --f7-md-on-primary: #fff;\n --f7-md-primary-container: #000;\n --f7-md-on-primary-container: #fff;\n --f7-md-secondary: #000;\n --f7-md-on-secondary: #fff;\n --f7-md-secondary-container: #aaa;\n --f7-md-on-secondary-container: #000;\n --f7-md-surface: #000;\n --f7-md-on-surface: #fff;\n --f7-md-surface-variant: #ccc;\n --f7-md-on-surface-variant: #000;\n --f7-md-outline: #000;\n --f7-md-outline-variant: #000;\n --f7-md-inverse-surface: #fff;\n --f7-md-inverse-on-surface: #000;\n --f7-md-inverse-primary: #fff;\n --f7-md-surface-1: #070707;\n --f7-md-surface-2: #161616;\n --f7-md-surface-3: #232323;\n --f7-md-surface-4: #303030;\n --f7-md-surface-5: #373737;\n --f7-md-surface-variant-rgb: 204, 204, 204;\n --f7-md-on-surface-variant-rgb: 0, 0, 0;\n --f7-md-surface-1-rgb: 7, 7, 7;\n --f7-md-surface-2-rgb: 22, 22, 22;\n --f7-md-surface-3-rgb: 35, 35, 35;\n --f7-md-surface-4-rgb: 48, 48, 48;\n --f7-md-surface-5-rgb: 55, 55, 55;\n `;\n /* eslint-disable */\n const lightString = colorName === 'white' ? whiteColorVars : colorName === 'black' ? blackColorVars : stringifyObject(light);\n const darkString = colorName === 'white' ? whiteColorVars : colorName === 'black' ? blackColorVars : stringifyObject(dark);\n /* eslint-enable */\n rest += [`.color-${colorName} {`, lightString, `--swiper-theme-color: var(--f7-theme-color);`, `}`, `.color-${colorName}.dark, .color-${colorName} .dark, .dark .color-${colorName} {`, darkString, `--swiper-theme-color: var(--f7-theme-color);`, `}`, `.ios .color-${colorName}, .ios.color-${colorName}, .ios .dark .color-${colorName}, .ios .dark.color-${colorName} {`, stringifyObject(ios), `}`, `.md .color-${colorName}, .md.color-${colorName}, .md .dark .color-${colorName}, .md .dark.color-${colorName} {`, stringifyObject(md), `}`,\n // text color\n `.text-color-${colorName} {`, `--f7-theme-color-text-color: ${colors[colorName]};`, `}`,\n // bg color\n `.bg-color-${colorName} {`, `--f7-theme-color-bg-color: ${colors[colorName]};`, `}`,\n // border color\n `.border-color-${colorName} {`, `--f7-theme-color-border-color: ${colors[colorName]};`, `}`,\n // ripple color\n `.ripple-color-${colorName} {`, `--f7-theme-color-ripple-color: rgba(${light['--f7-ios-primary-rgb']}, 0.3);`, `}`].join('');\n });\n return `${primary}${rest}`;\n}", "/* eslint-disable */\nfunction signum(num) {\n return num < 0 ? -1 : 0 === num ? 0 : 1;\n}\nfunction lerp(start, stop, amount) {\n return (1 - amount) * start + amount * stop;\n}\nfunction clampInt(min, max, input) {\n return input < min ? min : input > max ? max : input;\n}\nfunction clampDouble(min, max, input) {\n return input < min ? min : input > max ? max : input;\n}\nfunction sanitizeDegreesDouble(degrees) {\n return (degrees %= 360) < 0 && (degrees += 360), degrees;\n}\nfunction rotationDirection(from, to) {\n return sanitizeDegreesDouble(to - from) <= 180 ? 1 : -1;\n}\nfunction differenceDegrees(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n}\nfunction matrixMultiply(row, matrix) {\n return [row[0] * matrix[0][0] + row[1] * matrix[0][1] + row[2] * matrix[0][2], row[0] * matrix[1][0] + row[1] * matrix[1][1] + row[2] * matrix[1][2], row[0] * matrix[2][0] + row[1] * matrix[2][1] + row[2] * matrix[2][2]];\n}\nconst SRGB_TO_XYZ = [[.41233895, .35762064, .18051042], [.2126, .7152, .0722], [.01932141, .11916382, .95034478]],\n XYZ_TO_SRGB = [[3.2413774792388685, -1.5376652402851851, -.49885366846268053], [-.9691452513005321, 1.8758853451067872, .04156585616912061], [.05562093689691305, -.20395524564742123, 1.0571799111220335]],\n WHITE_POINT_D65 = [95.047, 100, 108.883];\nfunction argbFromRgb(red, green, blue) {\n return (255 << 24 | (255 & red) << 16 | (255 & green) << 8 | 255 & blue) >>> 0;\n}\nfunction argbFromLinrgb(linrgb) {\n return argbFromRgb(delinearized(linrgb[0]), delinearized(linrgb[1]), delinearized(linrgb[2]));\n}\nfunction redFromArgb(argb) {\n return argb >> 16 & 255;\n}\nfunction greenFromArgb(argb) {\n return argb >> 8 & 255;\n}\nfunction blueFromArgb(argb) {\n return 255 & argb;\n}\nfunction argbFromXyz(x, y, z) {\n const matrix = XYZ_TO_SRGB,\n linearR = matrix[0][0] * x + matrix[0][1] * y + matrix[0][2] * z,\n linearG = matrix[1][0] * x + matrix[1][1] * y + matrix[1][2] * z,\n linearB = matrix[2][0] * x + matrix[2][1] * y + matrix[2][2] * z;\n return argbFromRgb(delinearized(linearR), delinearized(linearG), delinearized(linearB));\n}\nfunction xyzFromArgb(argb) {\n return matrixMultiply([linearized(redFromArgb(argb)), linearized(greenFromArgb(argb)), linearized(blueFromArgb(argb))], SRGB_TO_XYZ);\n}\nfunction argbFromLstar(lstar) {\n const component = delinearized(yFromLstar(lstar));\n return argbFromRgb(component, component, component);\n}\nfunction lstarFromArgb(argb) {\n return 116 * labF(xyzFromArgb(argb)[1] / 100) - 16;\n}\nfunction yFromLstar(lstar) {\n return 100 * labInvf((lstar + 16) / 116);\n}\nfunction lstarFromY(y) {\n return 116 * labF(y / 100) - 16;\n}\nfunction linearized(rgbComponent) {\n const normalized = rgbComponent / 255;\n return normalized <= .040449936 ? normalized / 12.92 * 100 : 100 * Math.pow((normalized + .055) / 1.055, 2.4);\n}\nfunction delinearized(rgbComponent) {\n const normalized = rgbComponent / 100;\n let delinearized = 0;\n return delinearized = normalized <= .0031308 ? 12.92 * normalized : 1.055 * Math.pow(normalized, 1 / 2.4) - .055, clampInt(0, 255, Math.round(255 * delinearized));\n}\nfunction whitePointD65() {\n return WHITE_POINT_D65;\n}\nfunction labF(t) {\n return t > 216 / 24389 ? Math.pow(t, 1 / 3) : (903.2962962962963 * t + 16) / 116;\n}\nfunction labInvf(ft) {\n const ft3 = ft * ft * ft;\n return ft3 > 216 / 24389 ? ft3 : (116 * ft - 16) / 903.2962962962963;\n}\nclass ViewingConditions {\n static make(whitePoint, adaptingLuminance, backgroundLstar, surround, discountingIlluminant) {\n if (whitePoint === void 0) {\n whitePoint = whitePointD65();\n }\n if (adaptingLuminance === void 0) {\n adaptingLuminance = 200 / Math.PI * yFromLstar(50) / 100;\n }\n if (backgroundLstar === void 0) {\n backgroundLstar = 50;\n }\n if (surround === void 0) {\n surround = 2;\n }\n if (discountingIlluminant === void 0) {\n discountingIlluminant = !1;\n }\n const xyz = whitePoint,\n rW = .401288 * xyz[0] + .650173 * xyz[1] + -.051461 * xyz[2],\n gW = -.250268 * xyz[0] + 1.204414 * xyz[1] + .045854 * xyz[2],\n bW = -.002079 * xyz[0] + .048952 * xyz[1] + .953127 * xyz[2],\n f = .8 + surround / 10,\n c = f >= .9 ? lerp(.59, .69, 10 * (f - .9)) : lerp(.525, .59, 10 * (f - .8));\n let d = discountingIlluminant ? 1 : f * (1 - 1 / 3.6 * Math.exp((-adaptingLuminance - 42) / 92));\n d = d > 1 ? 1 : d < 0 ? 0 : d;\n const nc = f,\n rgbD = [d * (100 / rW) + 1 - d, d * (100 / gW) + 1 - d, d * (100 / bW) + 1 - d],\n k = 1 / (5 * adaptingLuminance + 1),\n k4 = k * k * k * k,\n k4F = 1 - k4,\n fl = k4 * adaptingLuminance + .1 * k4F * k4F * Math.cbrt(5 * adaptingLuminance),\n n = yFromLstar(backgroundLstar) / whitePoint[1],\n z = 1.48 + Math.sqrt(n),\n nbb = .725 / Math.pow(n, .2),\n ncb = nbb,\n rgbAFactors = [Math.pow(fl * rgbD[0] * rW / 100, .42), Math.pow(fl * rgbD[1] * gW / 100, .42), Math.pow(fl * rgbD[2] * bW / 100, .42)],\n rgbA = [400 * rgbAFactors[0] / (rgbAFactors[0] + 27.13), 400 * rgbAFactors[1] / (rgbAFactors[1] + 27.13), 400 * rgbAFactors[2] / (rgbAFactors[2] + 27.13)];\n return new ViewingConditions(n, (2 * rgbA[0] + rgbA[1] + .05 * rgbA[2]) * nbb, nbb, ncb, c, nc, rgbD, fl, Math.pow(fl, .25), z);\n }\n constructor(n, aw, nbb, ncb, c, nc, rgbD, fl, fLRoot, z) {\n this.n = n, this.aw = aw, this.nbb = nbb, this.ncb = ncb, this.c = c, this.nc = nc, this.rgbD = rgbD, this.fl = fl, this.fLRoot = fLRoot, this.z = z;\n }\n}\nViewingConditions.DEFAULT = ViewingConditions.make();\nclass Cam16 {\n constructor(hue, chroma, j, q, m, s, jstar, astar, bstar) {\n this.hue = hue, this.chroma = chroma, this.j = j, this.q = q, this.m = m, this.s = s, this.jstar = jstar, this.astar = astar, this.bstar = bstar;\n }\n distance(other) {\n const dJ = this.jstar - other.jstar,\n dA = this.astar - other.astar,\n dB = this.bstar - other.bstar,\n dEPrime = Math.sqrt(dJ * dJ + dA * dA + dB * dB);\n return 1.41 * Math.pow(dEPrime, .63);\n }\n static fromInt(argb) {\n return Cam16.fromIntInViewingConditions(argb, ViewingConditions.DEFAULT);\n }\n static fromIntInViewingConditions(argb, viewingConditions) {\n const green = (65280 & argb) >> 8,\n blue = 255 & argb,\n redL = linearized((16711680 & argb) >> 16),\n greenL = linearized(green),\n blueL = linearized(blue),\n x = .41233895 * redL + .35762064 * greenL + .18051042 * blueL,\n y = .2126 * redL + .7152 * greenL + .0722 * blueL,\n z = .01932141 * redL + .11916382 * greenL + .95034478 * blueL,\n rC = .401288 * x + .650173 * y - .051461 * z,\n gC = -.250268 * x + 1.204414 * y + .045854 * z,\n bC = -.002079 * x + .048952 * y + .953127 * z,\n rD = viewingConditions.rgbD[0] * rC,\n gD = viewingConditions.rgbD[1] * gC,\n bD = viewingConditions.rgbD[2] * bC,\n rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100, .42),\n gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100, .42),\n bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100, .42),\n rA = 400 * signum(rD) * rAF / (rAF + 27.13),\n gA = 400 * signum(gD) * gAF / (gAF + 27.13),\n bA = 400 * signum(bD) * bAF / (bAF + 27.13),\n a = (11 * rA + -12 * gA + bA) / 11,\n b = (rA + gA - 2 * bA) / 9,\n u = (20 * rA + 20 * gA + 21 * bA) / 20,\n p2 = (40 * rA + 20 * gA + bA) / 20,\n atanDegrees = 180 * Math.atan2(b, a) / Math.PI,\n hue = atanDegrees < 0 ? atanDegrees + 360 : atanDegrees >= 360 ? atanDegrees - 360 : atanDegrees,\n hueRadians = hue * Math.PI / 180,\n ac = p2 * viewingConditions.nbb,\n j = 100 * Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z),\n q = 4 / viewingConditions.c * Math.sqrt(j / 100) * (viewingConditions.aw + 4) * viewingConditions.fLRoot,\n huePrime = hue < 20.14 ? hue + 360 : hue,\n t = 5e4 / 13 * (.25 * (Math.cos(huePrime * Math.PI / 180 + 2) + 3.8)) * viewingConditions.nc * viewingConditions.ncb * Math.sqrt(a * a + b * b) / (u + .305),\n alpha = Math.pow(t, .9) * Math.pow(1.64 - Math.pow(.29, viewingConditions.n), .73),\n c = alpha * Math.sqrt(j / 100),\n m = c * viewingConditions.fLRoot,\n s = 50 * Math.sqrt(alpha * viewingConditions.c / (viewingConditions.aw + 4)),\n jstar = (1 + 100 * .007) * j / (1 + .007 * j),\n mstar = 1 / .0228 * Math.log(1 + .0228 * m),\n astar = mstar * Math.cos(hueRadians),\n bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, c, j, q, m, s, jstar, astar, bstar);\n }\n static fromJch(j, c, h) {\n return Cam16.fromJchInViewingConditions(j, c, h, ViewingConditions.DEFAULT);\n }\n static fromJchInViewingConditions(j, c, h, viewingConditions) {\n const q = 4 / viewingConditions.c * Math.sqrt(j / 100) * (viewingConditions.aw + 4) * viewingConditions.fLRoot,\n m = c * viewingConditions.fLRoot,\n alpha = c / Math.sqrt(j / 100),\n s = 50 * Math.sqrt(alpha * viewingConditions.c / (viewingConditions.aw + 4)),\n hueRadians = h * Math.PI / 180,\n jstar = (1 + 100 * .007) * j / (1 + .007 * j),\n mstar = 1 / .0228 * Math.log(1 + .0228 * m),\n astar = mstar * Math.cos(hueRadians),\n bstar = mstar * Math.sin(hueRadians);\n return new Cam16(h, c, j, q, m, s, jstar, astar, bstar);\n }\n static fromUcs(jstar, astar, bstar) {\n return Cam16.fromUcsInViewingConditions(jstar, astar, bstar, ViewingConditions.DEFAULT);\n }\n static fromUcsInViewingConditions(jstar, astar, bstar, viewingConditions) {\n const a = astar,\n b = bstar,\n m = Math.sqrt(a * a + b * b),\n c = (Math.exp(.0228 * m) - 1) / .0228 / viewingConditions.fLRoot;\n let h = Math.atan2(b, a) * (180 / Math.PI);\n h < 0 && (h += 360);\n const j = jstar / (1 - .007 * (jstar - 100));\n return Cam16.fromJchInViewingConditions(j, c, h, viewingConditions);\n }\n toInt() {\n return this.viewed(ViewingConditions.DEFAULT);\n }\n viewed(viewingConditions) {\n const alpha = 0 === this.chroma || 0 === this.j ? 0 : this.chroma / Math.sqrt(this.j / 100),\n t = Math.pow(alpha / Math.pow(1.64 - Math.pow(.29, viewingConditions.n), .73), 1 / .9),\n hRad = this.hue * Math.PI / 180,\n eHue = .25 * (Math.cos(hRad + 2) + 3.8),\n ac = viewingConditions.aw * Math.pow(this.j / 100, 1 / viewingConditions.c / viewingConditions.z),\n p1 = eHue * (5e4 / 13) * viewingConditions.nc * viewingConditions.ncb,\n p2 = ac / viewingConditions.nbb,\n hSin = Math.sin(hRad),\n hCos = Math.cos(hRad),\n gamma = 23 * (p2 + .305) * t / (23 * p1 + 11 * t * hCos + 108 * t * hSin),\n a = gamma * hCos,\n b = gamma * hSin,\n rA = (460 * p2 + 451 * a + 288 * b) / 1403,\n gA = (460 * p2 - 891 * a - 261 * b) / 1403,\n bA = (460 * p2 - 220 * a - 6300 * b) / 1403,\n rCBase = Math.max(0, 27.13 * Math.abs(rA) / (400 - Math.abs(rA))),\n rC = signum(rA) * (100 / viewingConditions.fl) * Math.pow(rCBase, 1 / .42),\n gCBase = Math.max(0, 27.13 * Math.abs(gA) / (400 - Math.abs(gA))),\n gC = signum(gA) * (100 / viewingConditions.fl) * Math.pow(gCBase, 1 / .42),\n bCBase = Math.max(0, 27.13 * Math.abs(bA) / (400 - Math.abs(bA))),\n bC = signum(bA) * (100 / viewingConditions.fl) * Math.pow(bCBase, 1 / .42),\n rF = rC / viewingConditions.rgbD[0],\n gF = gC / viewingConditions.rgbD[1],\n bF = bC / viewingConditions.rgbD[2];\n return argbFromXyz(1.86206786 * rF - 1.01125463 * gF + .14918677 * bF, .38752654 * rF + .62144744 * gF - .00897398 * bF, -.0158415 * rF - .03412294 * gF + 1.04996444 * bF);\n }\n static fromXyzInViewingConditions(x, y, z, viewingConditions) {\n const rC = .401288 * x + .650173 * y - .051461 * z,\n gC = -.250268 * x + 1.204414 * y + .045854 * z,\n bC = -.002079 * x + .048952 * y + .953127 * z,\n rD = viewingConditions.rgbD[0] * rC,\n gD = viewingConditions.rgbD[1] * gC,\n bD = viewingConditions.rgbD[2] * bC,\n rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100, .42),\n gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100, .42),\n bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100, .42),\n rA = 400 * signum(rD) * rAF / (rAF + 27.13),\n gA = 400 * signum(gD) * gAF / (gAF + 27.13),\n bA = 400 * signum(bD) * bAF / (bAF + 27.13),\n a = (11 * rA + -12 * gA + bA) / 11,\n b = (rA + gA - 2 * bA) / 9,\n u = (20 * rA + 20 * gA + 21 * bA) / 20,\n p2 = (40 * rA + 20 * gA + bA) / 20,\n atanDegrees = 180 * Math.atan2(b, a) / Math.PI,\n hue = atanDegrees < 0 ? atanDegrees + 360 : atanDegrees >= 360 ? atanDegrees - 360 : atanDegrees,\n hueRadians = hue * Math.PI / 180,\n ac = p2 * viewingConditions.nbb,\n J = 100 * Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z),\n Q = 4 / viewingConditions.c * Math.sqrt(J / 100) * (viewingConditions.aw + 4) * viewingConditions.fLRoot,\n huePrime = hue < 20.14 ? hue + 360 : hue,\n t = 5e4 / 13 * (1 / 4 * (Math.cos(huePrime * Math.PI / 180 + 2) + 3.8)) * viewingConditions.nc * viewingConditions.ncb * Math.sqrt(a * a + b * b) / (u + .305),\n alpha = Math.pow(t, .9) * Math.pow(1.64 - Math.pow(.29, viewingConditions.n), .73),\n C = alpha * Math.sqrt(J / 100),\n M = C * viewingConditions.fLRoot,\n s = 50 * Math.sqrt(alpha * viewingConditions.c / (viewingConditions.aw + 4)),\n jstar = (1 + 100 * .007) * J / (1 + .007 * J),\n mstar = Math.log(1 + .0228 * M) / .0228,\n astar = mstar * Math.cos(hueRadians),\n bstar = mstar * Math.sin(hueRadians);\n return new Cam16(hue, C, J, Q, M, s, jstar, astar, bstar);\n }\n xyzInViewingConditions(viewingConditions) {\n const alpha = 0 === this.chroma || 0 === this.j ? 0 : this.chroma / Math.sqrt(this.j / 100),\n t = Math.pow(alpha / Math.pow(1.64 - Math.pow(.29, viewingConditions.n), .73), 1 / .9),\n hRad = this.hue * Math.PI / 180,\n eHue = .25 * (Math.cos(hRad + 2) + 3.8),\n ac = viewingConditions.aw * Math.pow(this.j / 100, 1 / viewingConditions.c / viewingConditions.z),\n p1 = eHue * (5e4 / 13) * viewingConditions.nc * viewingConditions.ncb,\n p2 = ac / viewingConditions.nbb,\n hSin = Math.sin(hRad),\n hCos = Math.cos(hRad),\n gamma = 23 * (p2 + .305) * t / (23 * p1 + 11 * t * hCos + 108 * t * hSin),\n a = gamma * hCos,\n b = gamma * hSin,\n rA = (460 * p2 + 451 * a + 288 * b) / 1403,\n gA = (460 * p2 - 891 * a - 261 * b) / 1403,\n bA = (460 * p2 - 220 * a - 6300 * b) / 1403,\n rCBase = Math.max(0, 27.13 * Math.abs(rA) / (400 - Math.abs(rA))),\n rC = signum(rA) * (100 / viewingConditions.fl) * Math.pow(rCBase, 1 / .42),\n gCBase = Math.max(0, 27.13 * Math.abs(gA) / (400 - Math.abs(gA))),\n gC = signum(gA) * (100 / viewingConditions.fl) * Math.pow(gCBase, 1 / .42),\n bCBase = Math.max(0, 27.13 * Math.abs(bA) / (400 - Math.abs(bA))),\n bC = signum(bA) * (100 / viewingConditions.fl) * Math.pow(bCBase, 1 / .42),\n rF = rC / viewingConditions.rgbD[0],\n gF = gC / viewingConditions.rgbD[1],\n bF = bC / viewingConditions.rgbD[2];\n return [1.86206786 * rF - 1.01125463 * gF + .14918677 * bF, .38752654 * rF + .62144744 * gF - .00897398 * bF, -.0158415 * rF - .03412294 * gF + 1.04996444 * bF];\n }\n}\nclass HctSolver {\n static sanitizeRadians(angle) {\n return (angle + 8 * Math.PI) % (2 * Math.PI);\n }\n static trueDelinearized(rgbComponent) {\n const normalized = rgbComponent / 100;\n let delinearized = 0;\n return delinearized = normalized <= .0031308 ? 12.92 * normalized : 1.055 * Math.pow(normalized, 1 / 2.4) - .055, 255 * delinearized;\n }\n static chromaticAdaptation(component) {\n const af = Math.pow(Math.abs(component), .42);\n return 400 * signum(component) * af / (af + 27.13);\n }\n static hueOf(linrgb) {\n const scaledDiscount = matrixMultiply(linrgb, HctSolver.SCALED_DISCOUNT_FROM_LINRGB),\n rA = HctSolver.chromaticAdaptation(scaledDiscount[0]),\n gA = HctSolver.chromaticAdaptation(scaledDiscount[1]),\n bA = HctSolver.chromaticAdaptation(scaledDiscount[2]),\n a = (11 * rA + -12 * gA + bA) / 11,\n b = (rA + gA - 2 * bA) / 9;\n return Math.atan2(b, a);\n }\n static areInCyclicOrder(a, b, c) {\n return HctSolver.sanitizeRadians(b - a) < HctSolver.sanitizeRadians(c - a);\n }\n static intercept(source, mid, target) {\n return (mid - source) / (target - source);\n }\n static lerpPoint(source, t, target) {\n return [source[0] + (target[0] - source[0]) * t, source[1] + (target[1] - source[1]) * t, source[2] + (target[2] - source[2]) * t];\n }\n static setCoordinate(source, coordinate, target, axis) {\n const t = HctSolver.intercept(source[axis], coordinate, target[axis]);\n return HctSolver.lerpPoint(source, t, target);\n }\n static isBounded(x) {\n return 0 <= x && x <= 100;\n }\n static nthVertex(y, n) {\n const kR = HctSolver.Y_FROM_LINRGB[0],\n kG = HctSolver.Y_FROM_LINRGB[1],\n kB = HctSolver.Y_FROM_LINRGB[2],\n coordA = n % 4 <= 1 ? 0 : 100,\n coordB = n % 2 == 0 ? 0 : 100;\n if (n < 4) {\n const g = coordA,\n b = coordB,\n r = (y - g * kG - b * kB) / kR;\n return HctSolver.isBounded(r) ? [r, g, b] : [-1, -1, -1];\n }\n if (n < 8) {\n const b = coordA,\n r = coordB,\n g = (y - r * kR - b * kB) / kG;\n return HctSolver.isBounded(g) ? [r, g, b] : [-1, -1, -1];\n }\n {\n const r = coordA,\n g = coordB,\n b = (y - r * kR - g * kG) / kB;\n return HctSolver.isBounded(b) ? [r, g, b] : [-1, -1, -1];\n }\n }\n static bisectToSegment(y, targetHue) {\n let left = [-1, -1, -1],\n right = left,\n leftHue = 0,\n rightHue = 0,\n initialized = !1,\n uncut = !0;\n for (let n = 0; n < 12; n++) {\n const mid = HctSolver.nthVertex(y, n);\n if (mid[0] < 0) continue;\n const midHue = HctSolver.hueOf(mid);\n initialized ? (uncut || HctSolver.areInCyclicOrder(leftHue, midHue, rightHue)) && (uncut = !1, HctSolver.areInCyclicOrder(leftHue, targetHue, midHue) ? (right = mid, rightHue = midHue) : (left = mid, leftHue = midHue)) : (left = mid, right = mid, leftHue = midHue, rightHue = midHue, initialized = !0);\n }\n return [left, right];\n }\n static midpoint(a, b) {\n return [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2, (a[2] + b[2]) / 2];\n }\n static criticalPlaneBelow(x) {\n return Math.floor(x - .5);\n }\n static criticalPlaneAbove(x) {\n return Math.ceil(x - .5);\n }\n static bisectToLimit(y, targetHue) {\n const segment = HctSolver.bisectToSegment(y, targetHue);\n let left = segment[0],\n leftHue = HctSolver.hueOf(left),\n right = segment[1];\n for (let axis = 0; axis < 3; axis++) if (left[axis] !== right[axis]) {\n let lPlane = -1,\n rPlane = 255;\n left[axis] < right[axis] ? (lPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(left[axis])), rPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(right[axis]))) : (lPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(left[axis])), rPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(right[axis])));\n for (let i = 0; i < 8 && !(Math.abs(rPlane - lPlane) <= 1); i++) {\n const mPlane = Math.floor((lPlane + rPlane) / 2),\n midPlaneCoordinate = HctSolver.CRITICAL_PLANES[mPlane],\n mid = HctSolver.setCoordinate(left, midPlaneCoordinate, right, axis),\n midHue = HctSolver.hueOf(mid);\n HctSolver.areInCyclicOrder(leftHue, targetHue, midHue) ? (right = mid, rPlane = mPlane) : (left = mid, leftHue = midHue, lPlane = mPlane);\n }\n }\n return HctSolver.midpoint(left, right);\n }\n static inverseChromaticAdaptation(adapted) {\n const adaptedAbs = Math.abs(adapted),\n base = Math.max(0, 27.13 * adaptedAbs / (400 - adaptedAbs));\n return signum(adapted) * Math.pow(base, 1 / .42);\n }\n static findResultByJ(hueRadians, chroma, y) {\n let j = 11 * Math.sqrt(y);\n const viewingConditions = ViewingConditions.DEFAULT,\n tInnerCoeff = 1 / Math.pow(1.64 - Math.pow(.29, viewingConditions.n), .73),\n p1 = .25 * (Math.cos(hueRadians + 2) + 3.8) * (5e4 / 13) * viewingConditions.nc * viewingConditions.ncb,\n hSin = Math.sin(hueRadians),\n hCos = Math.cos(hueRadians);\n for (let iterationRound = 0; iterationRound < 5; iterationRound++) {\n const jNormalized = j / 100,\n alpha = 0 === chroma || 0 === j ? 0 : chroma / Math.sqrt(jNormalized),\n t = Math.pow(alpha * tInnerCoeff, 1 / .9),\n p2 = viewingConditions.aw * Math.pow(jNormalized, 1 / viewingConditions.c / viewingConditions.z) / viewingConditions.nbb,\n gamma = 23 * (p2 + .305) * t / (23 * p1 + 11 * t * hCos + 108 * t * hSin),\n a = gamma * hCos,\n b = gamma * hSin,\n rA = (460 * p2 + 451 * a + 288 * b) / 1403,\n gA = (460 * p2 - 891 * a - 261 * b) / 1403,\n bA = (460 * p2 - 220 * a - 6300 * b) / 1403,\n linrgb = matrixMultiply([HctSolver.inverseChromaticAdaptation(rA), HctSolver.inverseChromaticAdaptation(gA), HctSolver.inverseChromaticAdaptation(bA)], HctSolver.LINRGB_FROM_SCALED_DISCOUNT);\n if (linrgb[0] < 0 || linrgb[1] < 0 || linrgb[2] < 0) return 0;\n const kR = HctSolver.Y_FROM_LINRGB[0],\n kG = HctSolver.Y_FROM_LINRGB[1],\n kB = HctSolver.Y_FROM_LINRGB[2],\n fnj = kR * linrgb[0] + kG * linrgb[1] + kB * linrgb[2];\n if (fnj <= 0) return 0;\n if (4 === iterationRound || Math.abs(fnj - y) < .002) return linrgb[0] > 100.01 || linrgb[1] > 100.01 || linrgb[2] > 100.01 ? 0 : argbFromLinrgb(linrgb);\n j -= (fnj - y) * j / (2 * fnj);\n }\n return 0;\n }\n static solveToInt(hueDegrees, chroma, lstar) {\n if (chroma < 1e-4 || lstar < 1e-4 || lstar > 99.9999) return argbFromLstar(lstar);\n const hueRadians = (hueDegrees = sanitizeDegreesDouble(hueDegrees)) / 180 * Math.PI,\n y = yFromLstar(lstar),\n exactAnswer = HctSolver.findResultByJ(hueRadians, chroma, y);\n if (0 !== exactAnswer) return exactAnswer;\n return argbFromLinrgb(HctSolver.bisectToLimit(y, hueRadians));\n }\n static solveToCam(hueDegrees, chroma, lstar) {\n return Cam16.fromInt(HctSolver.solveToInt(hueDegrees, chroma, lstar));\n }\n}\nHctSolver.SCALED_DISCOUNT_FROM_LINRGB = [[.001200833568784504, .002389694492170889, .0002795742885861124], [.0005891086651375999, .0029785502573438758, .0003270666104008398], [.00010146692491640572, .0005364214359186694, .0032979401770712076]], HctSolver.LINRGB_FROM_SCALED_DISCOUNT = [[1373.2198709594231, -1100.4251190754821, -7.278681089101213], [-271.815969077903, 559.6580465940733, -32.46047482791194], [1.9622899599665666, -57.173814538844006, 308.7233197812385]], HctSolver.Y_FROM_LINRGB = [.2126, .7152, .0722], HctSolver.CRITICAL_PLANES = [.015176349177441876, .045529047532325624, .07588174588720938, .10623444424209313, .13658714259697685, .16693984095186062, .19729253930674434, .2276452376616281, .2579979360165119, .28835063437139563, .3188300904430532, .350925934958123, .3848314933096426, .42057480301049466, .458183274052838, .4976837250274023, .5391024159806381, .5824650784040898, .6277969426914107, .6751227633498623, .7244668422128921, .775853049866786, .829304845476233, .8848452951698498, .942497089126609, 1.0022825574869039, 1.0642236851973577, 1.1283421258858297, 1.1946592148522128, 1.2631959812511864, 1.3339731595349034, 1.407011200216447, 1.4823302800086415, 1.5599503113873272, 1.6398909516233677, 1.7221716113234105, 1.8068114625156377, 1.8938294463134073, 1.9832442801866852, 2.075074464868551, 2.1693382909216234, 2.2660538449872063, 2.36523901573795, 2.4669114995532007, 2.5710888059345764, 2.6777882626779785, 2.7870270208169257, 2.898822059350997, 3.0131901897720907, 3.1301480604002863, 3.2497121605402226, 3.3718988244681087, 3.4967242352587946, 3.624204428461639, 3.754355295633311, 3.887192587735158, 4.022731918402185, 4.160988767090289, 4.301978482107941, 4.445716283538092, 4.592217266055746, 4.741496401646282, 4.893568542229298, 5.048448422192488, 5.20615066083972, 5.3666897647573375, 5.5300801301023865, 5.696336044816294, 5.865471690767354, 6.037501145825082, 6.212438385869475, 6.390297286737924, 6.571091626112461, 6.7548350853498045, 6.941541251256611, 7.131223617812143, 7.323895587840543, 7.5195704746346665, 7.7182615035334345, 7.919981813454504, 8.124744458384042, 8.332562408825165, 8.543448553206703, 8.757415699253682, 8.974476575321063, 9.194643831691977, 9.417930041841839, 9.644347703669503, 9.873909240696694, 10.106627003236781, 10.342513269534024, 10.58158024687427, 10.8238400726681, 11.069304815507364, 11.317986476196008, 11.569896988756009, 11.825048221409341, 12.083451977536606, 12.345119996613247, 12.610063955123938, 12.878295467455942, 13.149826086772048, 13.42466730586372, 13.702830557985108, 13.984327217668513, 14.269168601521828, 14.55736596900856, 14.848930523210871, 15.143873411576273, 15.44220572664832, 15.743938506781891, 16.04908273684337, 16.35764934889634, 16.66964922287304, 16.985093187232053, 17.30399201960269, 17.62635644741625, 17.95219714852476, 18.281524751807332, 18.614349837764564, 18.95068293910138, 19.290534541298456, 19.633915083172692, 19.98083495742689, 20.331304511189067, 20.685334046541502, 21.042933821039977, 21.404114048223256, 21.76888489811322, 22.137256497705877, 22.50923893145328, 22.884842241736916, 23.264076429332462, 23.6469514538663, 24.033477234264016, 24.42366364919083, 24.817520537484558, 25.21505769858089, 25.61628489293138, 26.021211842414342, 26.429848230738664, 26.842203703840827, 27.258287870275353, 27.678110301598522, 28.10168053274597, 28.529008062403893, 28.96010235337422, 29.39497283293396, 29.83362889318845, 30.276079891419332, 30.722335150426627, 31.172403958865512, 31.62629557157785, 32.08401920991837, 32.54558406207592, 33.010999283389665, 33.4802739966603, 33.953417292456834, 34.430438229418264, 34.911345834551085, 35.39614910352207, 35.88485700094671, 36.37747846067349, 36.87402238606382, 37.37449765026789, 37.87891309649659, 38.38727753828926, 38.89959975977785, 39.41588851594697, 39.93615253289054, 40.460400508064545, 40.98864111053629, 41.520882981230194, 42.05713473317016, 42.597404951718396, 43.141702194811224, 43.6900349931913, 44.24241185063697, 44.798841244188324, 45.35933162437017, 45.92389141541209, 46.49252901546552, 47.065252796817916, 47.64207110610409, 48.22299226451468, 48.808024568002054, 49.3971762874833, 49.9904556690408, 50.587870934119984, 51.189430279724725, 51.79514187861014, 52.40501387947288, 53.0190544071392, 53.637271562750364, 54.259673423945976, 54.88626804504493, 55.517063457223934, 56.15206766869424, 56.79128866487574, 57.43473440856916, 58.08241284012621, 58.734331877617365, 59.39049941699807, 60.05092333227251, 60.715611475655585, 61.38457167773311, 62.057811747619894, 62.7353394731159, 63.417162620860914, 64.10328893648692, 64.79372614476921, 65.48848194977529, 66.18756403501224, 66.89098006357258, 67.59873767827808, 68.31084450182222, 69.02730813691093, 69.74813616640164, 70.47333615344107, 71.20291564160104, 71.93688215501312, 72.67524319850172, 73.41800625771542, 74.16517879925733, 74.9167682708136, 75.67278210128072, 76.43322770089146, 77.1981124613393, 77.96744375590167, 78.74122893956174, 79.51947534912904, 80.30219030335869, 81.08938110306934, 81.88105503125999, 82.67721935322541, 83.4778813166706, 84.28304815182372, 85.09272707154808, 85.90692527145302, 86.72564993000343, 87.54890820862819, 88.3767072518277, 89.2090541872801, 90.04595612594655, 90.88742016217518, 91.73345337380438, 92.58406282226491, 93.43925555268066, 94.29903859396902, 95.16341895893969, 96.03240364439274, 96.9059996312159, 97.78421388448044, 98.6670533535366, 99.55452497210776];\nclass Hct {\n static from(hue, chroma, tone) {\n return new Hct(HctSolver.solveToInt(hue, chroma, tone));\n }\n static fromInt(argb) {\n return new Hct(argb);\n }\n toInt() {\n return this.argb;\n }\n get hue() {\n return this.internalHue;\n }\n set hue(newHue) {\n this.setInternalState(HctSolver.solveToInt(newHue, this.internalChroma, this.internalTone));\n }\n get chroma() {\n return this.internalChroma;\n }\n set chroma(newChroma) {\n this.setInternalState(HctSolver.solveToInt(this.internalHue, newChroma, this.internalTone));\n }\n get tone() {\n return this.internalTone;\n }\n set tone(newTone) {\n this.setInternalState(HctSolver.solveToInt(this.internalHue, this.internalChroma, newTone));\n }\n constructor(argb) {\n this.argb = argb;\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue, this.internalChroma = cam.chroma, this.internalTone = lstarFromArgb(argb), this.argb = argb;\n }\n setInternalState(argb) {\n const cam = Cam16.fromInt(argb);\n this.internalHue = cam.hue, this.internalChroma = cam.chroma, this.internalTone = lstarFromArgb(argb), this.argb = argb;\n }\n inViewingConditions(vc) {\n const viewedInVc = Cam16.fromInt(this.toInt()).xyzInViewingConditions(vc),\n recastInVc = Cam16.fromXyzInViewingConditions(viewedInVc[0], viewedInVc[1], viewedInVc[2], ViewingConditions.make());\n return Hct.from(recastInVc.hue, recastInVc.chroma, lstarFromY(viewedInVc[1]));\n }\n}\nclass Blend {\n static harmonize(designColor, sourceColor) {\n const fromHct = Hct.fromInt(designColor),\n toHct = Hct.fromInt(sourceColor),\n differenceDegrees$1 = differenceDegrees(fromHct.hue, toHct.hue),\n rotationDegrees = Math.min(.5 * differenceDegrees$1, 15),\n outputHue = sanitizeDegreesDouble(fromHct.hue + rotationDegrees * rotationDirection(fromHct.hue, toHct.hue));\n return Hct.from(outputHue, fromHct.chroma, fromHct.tone).toInt();\n }\n static hctHue(from, to, amount) {\n const ucs = Blend.cam16Ucs(from, to, amount),\n ucsCam = Cam16.fromInt(ucs),\n fromCam = Cam16.fromInt(from);\n return Hct.from(ucsCam.hue, fromCam.chroma, lstarFromArgb(from)).toInt();\n }\n static cam16Ucs(from, to, amount) {\n const fromCam = Cam16.fromInt(from),\n toCam = Cam16.fromInt(to),\n fromJ = fromCam.jstar,\n fromA = fromCam.astar,\n fromB = fromCam.bstar,\n jstar = fromJ + (toCam.jstar - fromJ) * amount,\n astar = fromA + (toCam.astar - fromA) * amount,\n bstar = fromB + (toCam.bstar - fromB) * amount;\n return Cam16.fromUcs(jstar, astar, bstar).toInt();\n }\n}\nclass Contrast {\n static ratioOfTones(toneA, toneB) {\n return toneA = clampDouble(0, 100, toneA), toneB = clampDouble(0, 100, toneB), Contrast.ratioOfYs(yFromLstar(toneA), yFromLstar(toneB));\n }\n static ratioOfYs(y1, y2) {\n const lighter = y1 > y2 ? y1 : y2;\n return (lighter + 5) / ((lighter === y2 ? y1 : y2) + 5);\n }\n static lighter(tone, ratio) {\n if (tone < 0 || tone > 100) return -1;\n const darkY = yFromLstar(tone),\n lightY = ratio * (darkY + 5) - 5,\n realContrast = Contrast.ratioOfYs(lightY, darkY),\n delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > .04) return -1;\n const returnValue = lstarFromY(lightY) + .4;\n return returnValue < 0 || returnValue > 100 ? -1 : returnValue;\n }\n static darker(tone, ratio) {\n if (tone < 0 || tone > 100) return -1;\n const lightY = yFromLstar(tone),\n darkY = (lightY + 5) / ratio - 5,\n realContrast = Contrast.ratioOfYs(lightY, darkY),\n delta = Math.abs(realContrast - ratio);\n if (realContrast < ratio && delta > .04) return -1;\n const returnValue = lstarFromY(darkY) - .4;\n return returnValue < 0 || returnValue > 100 ? -1 : returnValue;\n }\n static lighterUnsafe(tone, ratio) {\n const lighterSafe = Contrast.lighter(tone, ratio);\n return lighterSafe < 0 ? 100 : lighterSafe;\n }\n static darkerUnsafe(tone, ratio) {\n const darkerSafe = Contrast.darker(tone, ratio);\n return darkerSafe < 0 ? 0 : darkerSafe;\n }\n}\nclass DislikeAnalyzer {\n static isDisliked(hct) {\n const huePasses = Math.round(hct.hue) >= 90 && Math.round(hct.hue) <= 111,\n chromaPasses = Math.round(hct.chroma) > 16,\n tonePasses = Math.round(hct.tone) < 65;\n return huePasses && chromaPasses && tonePasses;\n }\n static fixIfDisliked(hct) {\n return DislikeAnalyzer.isDisliked(hct) ? Hct.from(hct.hue, hct.chroma, 70) : hct;\n }\n}\nclass DynamicColor {\n static fromPalette(args) {\n return new DynamicColor(args.name ?? \"\", args.palette, args.tone, args.isBackground ?? !1, args.background, args.secondBackground, args.contrastCurve, args.toneDeltaPair);\n }\n constructor(name, palette, tone, isBackground, background, secondBackground, contrastCurve, toneDeltaPair) {\n if (this.name = name, this.palette = palette, this.tone = tone, this.isBackground = isBackground, this.background = background, this.secondBackground = secondBackground, this.contrastCurve = contrastCurve, this.toneDeltaPair = toneDeltaPair, this.hctCache = new Map(), !background && secondBackground) throw new Error(`Color ${name} has secondBackgrounddefined, but background is not defined.`);\n if (!background && contrastCurve) throw new Error(`Color ${name} has contrastCurvedefined, but background is not defined.`);\n if (background && !contrastCurve) throw new Error(`Color ${name} has backgrounddefined, but contrastCurve is not defined.`);\n }\n getArgb(scheme) {\n return this.getHct(scheme).toInt();\n }\n getHct(scheme) {\n const cachedAnswer = this.hctCache.get(scheme);\n if (null != cachedAnswer) return cachedAnswer;\n const tone = this.getTone(scheme),\n answer = this.palette(scheme).getHct(tone);\n return this.hctCache.size > 4 && this.hctCache.clear(), this.hctCache.set(scheme, answer), answer;\n }\n getTone(scheme) {\n const decreasingContrast = scheme.contrastLevel < 0;\n if (this.toneDeltaPair) {\n const toneDeltaPair = this.toneDeltaPair(scheme),\n roleA = toneDeltaPair.roleA,\n roleB = toneDeltaPair.roleB,\n delta = toneDeltaPair.delta,\n polarity = toneDeltaPair.polarity,\n stayTogether = toneDeltaPair.stayTogether,\n bgTone = this.background(scheme).getTone(scheme),\n aIsNearer = \"nearer\" === polarity || \"lighter\" === polarity && !scheme.isDark || \"darker\" === polarity && scheme.isDark,\n nearer = aIsNearer ? roleA : roleB,\n farther = aIsNearer ? roleB : roleA,\n amNearer = this.name === nearer.name,\n expansionDir = scheme.isDark ? 1 : -1,\n nContrast = nearer.contrastCurve.getContrast(scheme.contrastLevel),\n fContrast = farther.contrastCurve.getContrast(scheme.contrastLevel),\n nInitialTone = nearer.tone(scheme);\n let nTone = Contrast.ratioOfTones(bgTone, nInitialTone) >= nContrast ? nInitialTone : DynamicColor.foregroundTone(bgTone, nContrast);\n const fInitialTone = farther.tone(scheme);\n let fTone = Contrast.ratioOfTones(bgTone, fInitialTone) >= fContrast ? fInitialTone : DynamicColor.foregroundTone(bgTone, fContrast);\n return decreasingContrast && (nTone = DynamicColor.foregroundTone(bgTone, nContrast), fTone = DynamicColor.foregroundTone(bgTone, fContrast)), (fTone - nTone) * expansionDir >= delta || (fTone = clampDouble(0, 100, nTone + delta * expansionDir), (fTone - nTone) * expansionDir >= delta || (nTone = clampDouble(0, 100, fTone - delta * expansionDir))), 50 <= nTone && nTone < 60 ? expansionDir > 0 ? (nTone = 60, fTone = Math.max(fTone, nTone + delta * expansionDir)) : (nTone = 49, fTone = Math.min(fTone, nTone + delta * expansionDir)) : 50 <= fTone && fTone < 60 && (stayTogether ? expansionDir > 0 ? (nTone = 60, fTone = Math.max(fTone, nTone + delta * expansionDir)) : (nTone = 49, fTone = Math.min(fTone, nTone + delta * expansionDir)) : fTone = expansionDir > 0 ? 60 : 49), amNearer ? nTone : fTone;\n }\n {\n let answer = this.tone(scheme);\n if (null == this.background) return answer;\n const bgTone = this.background(scheme).getTone(scheme),\n desiredRatio = this.contrastCurve.getContrast(scheme.contrastLevel);\n if (Contrast.ratioOfTones(bgTone, answer) >= desiredRatio || (answer = DynamicColor.foregroundTone(bgTone, desiredRatio)), decreasingContrast && (answer = DynamicColor.foregroundTone(bgTone, desiredRatio)), this.isBackground && 50 <= answer && answer < 60 && (answer = Contrast.ratioOfTones(49, bgTone) >= desiredRatio ? 49 : 60), this.secondBackground) {\n const [bg1, bg2] = [this.background, this.secondBackground],\n [bgTone1, bgTone2] = [bg1(scheme).getTone(scheme), bg2(scheme).getTone(scheme)],\n [upper, lower] = [Math.max(bgTone1, bgTone2), Math.min(bgTone1, bgTone2)];\n if (Contrast.ratioOfTones(upper, answer) >= desiredRatio && Contrast.ratioOfTones(lower, answer) >= desiredRatio) return answer;\n const lightOption = Contrast.lighter(upper, desiredRatio),\n darkOption = Contrast.darker(lower, desiredRatio),\n availables = [];\n -1 !== lightOption && availables.push(lightOption), -1 !== darkOption && availables.push(darkOption);\n return DynamicColor.tonePrefersLightForeground(bgTone1) || DynamicColor.tonePrefersLightForeground(bgTone2) ? lightOption < 0 ? 100 : lightOption : 1 === availables.length ? availables[0] : darkOption < 0 ? 0 : darkOption;\n }\n return answer;\n }\n }\n static foregroundTone(bgTone, ratio) {\n const lighterTone = Contrast.lighterUnsafe(bgTone, ratio),\n darkerTone = Contrast.darkerUnsafe(bgTone, ratio),\n lighterRatio = Contrast.ratioOfTones(lighterTone, bgTone),\n darkerRatio = Contrast.ratioOfTones(darkerTone, bgTone);\n if (DynamicColor.tonePrefersLightForeground(bgTone)) {\n const negligibleDifference = Math.abs(lighterRatio - darkerRatio) < .1 && lighterRatio < ratio && darkerRatio < ratio;\n return lighterRatio >= ratio || lighterRatio >= darkerRatio || negligibleDifference ? lighterTone : darkerTone;\n }\n return darkerRatio >= ratio || darkerRatio >= lighterRatio ? darkerTone : lighterTone;\n }\n static tonePrefersLightForeground(tone) {\n return Math.round(tone) < 60;\n }\n static toneAllowsLightForeground(tone) {\n return Math.round(tone) <= 49;\n }\n static enableLightForeground(tone) {\n return DynamicColor.tonePrefersLightForeground(tone) && !DynamicColor.toneAllowsLightForeground(tone) ? 49 : tone;\n }\n}\nvar Variant;\n!function (Variant) {\n Variant[Variant.MONOCHROME = 0] = \"MONOCHROME\", Variant[Variant.NEUTRAL = 1] = \"NEUTRAL\", Variant[Variant.TONAL_SPOT = 2] = \"TONAL_SPOT\", Variant[Variant.VIBRANT = 3] = \"VIBRANT\", Variant[Variant.EXPRESSIVE = 4] = \"EXPRESSIVE\", Variant[Variant.FIDELITY = 5] = \"FIDELITY\", Variant[Variant.CONTENT = 6] = \"CONTENT\", Variant[Variant.RAINBOW = 7] = \"RAINBOW\", Variant[Variant.FRUIT_SALAD = 8] = \"FRUIT_SALAD\";\n}(Variant || (Variant = {}));\nclass ContrastCurve {\n constructor(low, normal, medium, high) {\n this.low = low, this.normal = normal, this.medium = medium, this.high = high;\n }\n getContrast(contrastLevel) {\n return contrastLevel <= -1 ? this.low : contrastLevel < 0 ? lerp(this.low, this.normal, (contrastLevel - -1) / 1) : contrastLevel < .5 ? lerp(this.normal, this.medium, (contrastLevel - 0) / .5) : contrastLevel < 1 ? lerp(this.medium, this.high, (contrastLevel - .5) / .5) : this.high;\n }\n}\nclass ToneDeltaPair {\n constructor(roleA, roleB, delta, polarity, stayTogether) {\n this.roleA = roleA, this.roleB = roleB, this.delta = delta, this.polarity = polarity, this.stayTogether = stayTogether;\n }\n}\nfunction isFidelity(scheme) {\n return scheme.variant === Variant.FIDELITY || scheme.variant === Variant.CONTENT;\n}\nfunction isMonochrome(scheme) {\n return scheme.variant === Variant.MONOCHROME;\n}\nfunction findDesiredChromaByTone(hue, chroma, tone, byDecreasingTone) {\n let answer = tone,\n closestToChroma = Hct.from(hue, chroma, tone);\n if (closestToChroma.chroma < chroma) {\n let chromaPeak = closestToChroma.chroma;\n for (; closestToChroma.chroma < chroma;) {\n answer += byDecreasingTone ? -1 : 1;\n const potentialSolution = Hct.from(hue, chroma, answer);\n if (chromaPeak > potentialSolution.chroma) break;\n if (Math.abs(potentialSolution.chroma - chroma) < .4) break;\n Math.abs(potentialSolution.chroma - chroma) < Math.abs(closestToChroma.chroma - chroma) && (closestToChroma = potentialSolution), chromaPeak = Math.max(chromaPeak, potentialSolution.chroma);\n }\n }\n return answer;\n}\nfunction viewingConditionsForAlbers(scheme) {\n return ViewingConditions.make(void 0, void 0, scheme.isDark ? 30 : 80, void 0, void 0);\n}\nfunction performAlbers(prealbers, scheme) {\n const albersd = prealbers.inViewingConditions(viewingConditionsForAlbers(scheme));\n return DynamicColor.tonePrefersLightForeground(prealbers.tone) && !DynamicColor.toneAllowsLightForeground(albersd.tone) ? DynamicColor.enableLightForeground(prealbers.tone) : DynamicColor.enableLightForeground(albersd.tone);\n}\nclass MaterialDynamicColors {\n static highestSurface(s) {\n return s.isDark ? MaterialDynamicColors.surfaceBright : MaterialDynamicColors.surfaceDim;\n }\n}\nMaterialDynamicColors.contentAccentToneDelta = 15, MaterialDynamicColors.primaryPaletteKeyColor = DynamicColor.fromPalette({\n name: \"primary_palette_key_color\",\n palette: s => s.primaryPalette,\n tone: s => s.primaryPalette.keyColor.tone\n}), MaterialDynamicColors.secondaryPaletteKeyColor = DynamicColor.fromPalette({\n name: \"secondary_palette_key_color\",\n palette: s => s.secondaryPalette,\n tone: s => s.secondaryPalette.keyColor.tone\n}), MaterialDynamicColors.tertiaryPaletteKeyColor = DynamicColor.fromPalette({\n name: \"tertiary_palette_key_color\",\n palette: s => s.tertiaryPalette,\n tone: s => s.tertiaryPalette.keyColor.tone\n}), MaterialDynamicColors.neutralPaletteKeyColor = DynamicColor.fromPalette({\n name: \"neutral_palette_key_color\",\n palette: s => s.neutralPalette,\n tone: s => s.neutralPalette.keyColor.tone\n}), MaterialDynamicColors.neutralVariantPaletteKeyColor = DynamicColor.fromPalette({\n name: \"neutral_variant_palette_key_color\",\n palette: s => s.neutralVariantPalette,\n tone: s => s.neutralVariantPalette.keyColor.tone\n}), MaterialDynamicColors.background = DynamicColor.fromPalette({\n name: \"background\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 6 : 98,\n isBackground: !0\n}), MaterialDynamicColors.onBackground = DynamicColor.fromPalette({\n name: \"on_background\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 90 : 10,\n background: s => MaterialDynamicColors.background,\n contrastCurve: new ContrastCurve(3, 3, 4.5, 7)\n}), MaterialDynamicColors.surface = DynamicColor.fromPalette({\n name: \"surface\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 6 : 98,\n isBackground: !0\n}), MaterialDynamicColors.surfaceDim = DynamicColor.fromPalette({\n name: \"surface_dim\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 6 : 87,\n isBackground: !0\n}), MaterialDynamicColors.surfaceBright = DynamicColor.fromPalette({\n name: \"surface_bright\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 24 : 98,\n isBackground: !0\n}), MaterialDynamicColors.surfaceContainerLowest = DynamicColor.fromPalette({\n name: \"surface_container_lowest\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 4 : 100,\n isBackground: !0\n}), MaterialDynamicColors.surfaceContainerLow = DynamicColor.fromPalette({\n name: \"surface_container_low\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 10 : 96,\n isBackground: !0\n}), MaterialDynamicColors.surfaceContainer = DynamicColor.fromPalette({\n name: \"surface_container\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 12 : 94,\n isBackground: !0\n}), MaterialDynamicColors.surfaceContainerHigh = DynamicColor.fromPalette({\n name: \"surface_container_high\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 17 : 92,\n isBackground: !0\n}), MaterialDynamicColors.surfaceContainerHighest = DynamicColor.fromPalette({\n name: \"surface_container_highest\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 22 : 90,\n isBackground: !0\n}), MaterialDynamicColors.onSurface = DynamicColor.fromPalette({\n name: \"on_surface\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 90 : 10,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.surfaceVariant = DynamicColor.fromPalette({\n name: \"surface_variant\",\n palette: s => s.neutralVariantPalette,\n tone: s => s.isDark ? 30 : 90,\n isBackground: !0\n}), MaterialDynamicColors.onSurfaceVariant = DynamicColor.fromPalette({\n name: \"on_surface_variant\",\n palette: s => s.neutralVariantPalette,\n tone: s => s.isDark ? 80 : 30,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11)\n}), MaterialDynamicColors.inverseSurface = DynamicColor.fromPalette({\n name: \"inverse_surface\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 90 : 20\n}), MaterialDynamicColors.inverseOnSurface = DynamicColor.fromPalette({\n name: \"inverse_on_surface\",\n palette: s => s.neutralPalette,\n tone: s => s.isDark ? 20 : 95,\n background: s => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.outline = DynamicColor.fromPalette({\n name: \"outline\",\n palette: s => s.neutralVariantPalette,\n tone: s => s.isDark ? 60 : 50,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1.5, 3, 4.5, 7)\n}), MaterialDynamicColors.outlineVariant = DynamicColor.fromPalette({\n name: \"outline_variant\",\n palette: s => s.neutralVariantPalette,\n tone: s => s.isDark ? 30 : 80,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7)\n}), MaterialDynamicColors.shadow = DynamicColor.fromPalette({\n name: \"shadow\",\n palette: s => s.neutralPalette,\n tone: s => 0\n}), MaterialDynamicColors.scrim = DynamicColor.fromPalette({\n name: \"scrim\",\n palette: s => s.neutralPalette,\n tone: s => 0\n}), MaterialDynamicColors.surfaceTint = DynamicColor.fromPalette({\n name: \"surface_tint\",\n palette: s => s.primaryPalette,\n tone: s => s.isDark ? 80 : 40,\n isBackground: !0\n}), MaterialDynamicColors.primary = DynamicColor.fromPalette({\n name: \"primary\",\n palette: s => s.primaryPalette,\n tone: s => isMonochrome(s) ? s.isDark ? 100 : 0 : s.isDark ? 80 : 40,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onPrimary = DynamicColor.fromPalette({\n name: \"on_primary\",\n palette: s => s.primaryPalette,\n tone: s => isMonochrome(s) ? s.isDark ? 10 : 90 : s.isDark ? 20 : 100,\n background: s => MaterialDynamicColors.primary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.primaryContainer = DynamicColor.fromPalette({\n name: \"primary_container\",\n palette: s => s.primaryPalette,\n tone: s => isFidelity(s) ? performAlbers(s.sourceColorHct, s) : isMonochrome(s) ? s.isDark ? 85 : 25 : s.isDark ? 30 : 90,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onPrimaryContainer = DynamicColor.fromPalette({\n name: \"on_primary_container\",\n palette: s => s.primaryPalette,\n tone: s => isFidelity(s) ? DynamicColor.foregroundTone(MaterialDynamicColors.primaryContainer.tone(s), 4.5) : isMonochrome(s) ? s.isDark ? 0 : 100 : s.isDark ? 90 : 10,\n background: s => MaterialDynamicColors.primaryContainer,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.inversePrimary = DynamicColor.fromPalette({\n name: \"inverse_primary\",\n palette: s => s.primaryPalette,\n tone: s => s.isDark ? 40 : 80,\n background: s => MaterialDynamicColors.inverseSurface,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11)\n}), MaterialDynamicColors.secondary = DynamicColor.fromPalette({\n name: \"secondary\",\n palette: s => s.secondaryPalette,\n tone: s => s.isDark ? 80 : 40,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onSecondary = DynamicColor.fromPalette({\n name: \"on_secondary\",\n palette: s => s.secondaryPalette,\n tone: s => isMonochrome(s) ? s.isDark ? 10 : 100 : s.isDark ? 20 : 100,\n background: s => MaterialDynamicColors.secondary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.secondaryContainer = DynamicColor.fromPalette({\n name: \"secondary_container\",\n palette: s => s.secondaryPalette,\n tone: s => {\n const initialTone = s.isDark ? 30 : 90;\n if (isMonochrome(s)) return s.isDark ? 30 : 85;\n if (!isFidelity(s)) return initialTone;\n let answer = findDesiredChromaByTone(s.secondaryPalette.hue, s.secondaryPalette.chroma, initialTone, !s.isDark);\n return answer = performAlbers(s.secondaryPalette.getHct(answer), s), answer;\n },\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onSecondaryContainer = DynamicColor.fromPalette({\n name: \"on_secondary_container\",\n palette: s => s.secondaryPalette,\n tone: s => isFidelity(s) ? DynamicColor.foregroundTone(MaterialDynamicColors.secondaryContainer.tone(s), 4.5) : s.isDark ? 90 : 10,\n background: s => MaterialDynamicColors.secondaryContainer,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.tertiary = DynamicColor.fromPalette({\n name: \"tertiary\",\n palette: s => s.tertiaryPalette,\n tone: s => isMonochrome(s) ? s.isDark ? 90 : 25 : s.isDark ? 80 : 40,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onTertiary = DynamicColor.fromPalette({\n name: \"on_tertiary\",\n palette: s => s.tertiaryPalette,\n tone: s => isMonochrome(s) ? s.isDark ? 10 : 90 : s.isDark ? 20 : 100,\n background: s => MaterialDynamicColors.tertiary,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.tertiaryContainer = DynamicColor.fromPalette({\n name: \"tertiary_container\",\n palette: s => s.tertiaryPalette,\n tone: s => {\n if (isMonochrome(s)) return s.isDark ? 60 : 49;\n if (!isFidelity(s)) return s.isDark ? 30 : 90;\n const albersTone = performAlbers(s.tertiaryPalette.getHct(s.sourceColorHct.tone), s),\n proposedHct = s.tertiaryPalette.getHct(albersTone);\n return DislikeAnalyzer.fixIfDisliked(proposedHct).tone;\n },\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onTertiaryContainer = DynamicColor.fromPalette({\n name: \"on_tertiary_container\",\n palette: s => s.tertiaryPalette,\n tone: s => isMonochrome(s) ? s.isDark ? 0 : 100 : isFidelity(s) ? DynamicColor.foregroundTone(MaterialDynamicColors.tertiaryContainer.tone(s), 4.5) : s.isDark ? 90 : 10,\n background: s => MaterialDynamicColors.tertiaryContainer,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.error = DynamicColor.fromPalette({\n name: \"error\",\n palette: s => s.errorPalette,\n tone: s => s.isDark ? 80 : 40,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onError = DynamicColor.fromPalette({\n name: \"on_error\",\n palette: s => s.errorPalette,\n tone: s => s.isDark ? 20 : 100,\n background: s => MaterialDynamicColors.error,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.errorContainer = DynamicColor.fromPalette({\n name: \"error_container\",\n palette: s => s.errorPalette,\n tone: s => s.isDark ? 30 : 90,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 15, \"nearer\", !1)\n}), MaterialDynamicColors.onErrorContainer = DynamicColor.fromPalette({\n name: \"on_error_container\",\n palette: s => s.errorPalette,\n tone: s => s.isDark ? 90 : 10,\n background: s => MaterialDynamicColors.errorContainer,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.primaryFixed = DynamicColor.fromPalette({\n name: \"primary_fixed\",\n palette: s => s.primaryPalette,\n tone: s => isMonochrome(s) ? 40 : 90,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, \"lighter\", !0)\n}), MaterialDynamicColors.primaryFixedDim = DynamicColor.fromPalette({\n name: \"primary_fixed_dim\",\n palette: s => s.primaryPalette,\n tone: s => isMonochrome(s) ? 30 : 80,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, \"lighter\", !0)\n}), MaterialDynamicColors.onPrimaryFixed = DynamicColor.fromPalette({\n name: \"on_primary_fixed\",\n palette: s => s.primaryPalette,\n tone: s => isMonochrome(s) ? 100 : 10,\n background: s => MaterialDynamicColors.primaryFixedDim,\n secondBackground: s => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.onPrimaryFixedVariant = DynamicColor.fromPalette({\n name: \"on_primary_fixed_variant\",\n palette: s => s.primaryPalette,\n tone: s => isMonochrome(s) ? 90 : 30,\n background: s => MaterialDynamicColors.primaryFixedDim,\n secondBackground: s => MaterialDynamicColors.primaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11)\n}), MaterialDynamicColors.secondaryFixed = DynamicColor.fromPalette({\n name: \"secondary_fixed\",\n palette: s => s.secondaryPalette,\n tone: s => isMonochrome(s) ? 80 : 90,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, \"lighter\", !0)\n}), MaterialDynamicColors.secondaryFixedDim = DynamicColor.fromPalette({\n name: \"secondary_fixed_dim\",\n palette: s => s.secondaryPalette,\n tone: s => isMonochrome(s) ? 70 : 80,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, \"lighter\", !0)\n}), MaterialDynamicColors.onSecondaryFixed = DynamicColor.fromPalette({\n name: \"on_secondary_fixed\",\n palette: s => s.secondaryPalette,\n tone: s => 10,\n background: s => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: s => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.onSecondaryFixedVariant = DynamicColor.fromPalette({\n name: \"on_secondary_fixed_variant\",\n palette: s => s.secondaryPalette,\n tone: s => isMonochrome(s) ? 25 : 30,\n background: s => MaterialDynamicColors.secondaryFixedDim,\n secondBackground: s => MaterialDynamicColors.secondaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11)\n}), MaterialDynamicColors.tertiaryFixed = DynamicColor.fromPalette({\n name: \"tertiary_fixed\",\n palette: s => s.tertiaryPalette,\n tone: s => isMonochrome(s) ? 40 : 90,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, \"lighter\", !0)\n}), MaterialDynamicColors.tertiaryFixedDim = DynamicColor.fromPalette({\n name: \"tertiary_fixed_dim\",\n palette: s => s.tertiaryPalette,\n tone: s => isMonochrome(s) ? 30 : 80,\n isBackground: !0,\n background: s => MaterialDynamicColors.highestSurface(s),\n contrastCurve: new ContrastCurve(1, 1, 3, 7),\n toneDeltaPair: s => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, \"lighter\", !0)\n}), MaterialDynamicColors.onTertiaryFixed = DynamicColor.fromPalette({\n name: \"on_tertiary_fixed\",\n palette: s => s.tertiaryPalette,\n tone: s => isMonochrome(s) ? 100 : 10,\n background: s => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: s => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(4.5, 7, 11, 21)\n}), MaterialDynamicColors.onTertiaryFixedVariant = DynamicColor.fromPalette({\n name: \"on_tertiary_fixed_variant\",\n palette: s => s.tertiaryPalette,\n tone: s => isMonochrome(s) ? 90 : 30,\n background: s => MaterialDynamicColors.tertiaryFixedDim,\n secondBackground: s => MaterialDynamicColors.tertiaryFixed,\n contrastCurve: new ContrastCurve(3, 4.5, 7, 11)\n});\nclass TonalPalette {\n static fromInt(argb) {\n const hct = Hct.fromInt(argb);\n return TonalPalette.fromHct(hct);\n }\n static fromHct(hct) {\n return new TonalPalette(hct.hue, hct.chroma, hct);\n }\n static fromHueAndChroma(hue, chroma) {\n return new TonalPalette(hue, chroma, TonalPalette.createKeyColor(hue, chroma));\n }\n constructor(hue, chroma, keyColor) {\n this.hue = hue, this.chroma = chroma, this.keyColor = keyColor, this.cache = new Map();\n }\n static createKeyColor(hue, chroma) {\n let smallestDeltaHct = Hct.from(hue, chroma, 50),\n smallestDelta = Math.abs(smallestDeltaHct.chroma - chroma);\n for (let delta = 1; delta < 50; delta += 1) {\n if (Math.round(chroma) === Math.round(smallestDeltaHct.chroma)) return smallestDeltaHct;\n const hctAdd = Hct.from(hue, chroma, 50 + delta),\n hctAddDelta = Math.abs(hctAdd.chroma - chroma);\n hctAddDelta < smallestDelta && (smallestDelta = hctAddDelta, smallestDeltaHct = hctAdd);\n const hctSubtract = Hct.from(hue, chroma, 50 - delta),\n hctSubtractDelta = Math.abs(hctSubtract.chroma - chroma);\n hctSubtractDelta < smallestDelta && (smallestDelta = hctSubtractDelta, smallestDeltaHct = hctSubtract);\n }\n return smallestDeltaHct;\n }\n tone(tone) {\n let argb = this.cache.get(tone);\n return void 0 === argb && (argb = Hct.from(this.hue, this.chroma, tone).toInt(), this.cache.set(tone, argb)), argb;\n }\n getHct(tone) {\n return Hct.fromInt(this.tone(tone));\n }\n}\nclass CorePalette {\n static of(argb) {\n return new CorePalette(argb, !1);\n }\n static contentOf(argb) {\n return new CorePalette(argb, !0);\n }\n static fromColors(colors) {\n return CorePalette.createPaletteFromColors(!1, colors);\n }\n static contentFromColors(colors) {\n return CorePalette.createPaletteFromColors(!0, colors);\n }\n static createPaletteFromColors(content, colors) {\n const palette = new CorePalette(colors.primary, content);\n if (colors.secondary) {\n const p = new CorePalette(colors.secondary, content);\n palette.a2 = p.a1;\n }\n if (colors.tertiary) {\n const p = new CorePalette(colors.tertiary, content);\n palette.a3 = p.a1;\n }\n if (colors.error) {\n const p = new CorePalette(colors.error, content);\n palette.error = p.a1;\n }\n if (colors.neutral) {\n const p = new CorePalette(colors.neutral, content);\n palette.n1 = p.n1;\n }\n if (colors.neutralVariant) {\n const p = new CorePalette(colors.neutralVariant, content);\n palette.n2 = p.n2;\n }\n return palette;\n }\n constructor(argb, isContent) {\n const hct = Hct.fromInt(argb),\n hue = hct.hue,\n chroma = hct.chroma;\n isContent ? (this.a1 = TonalPalette.fromHueAndChroma(hue, chroma), this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3), this.a3 = TonalPalette.fromHueAndChroma(hue + 60, chroma / 2), this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 4)), this.n2 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 6, 8))) : (this.a1 = TonalPalette.fromHueAndChroma(hue, Math.max(48, chroma)), this.a2 = TonalPalette.fromHueAndChroma(hue, 16), this.a3 = TonalPalette.fromHueAndChroma(hue + 60, 24), this.n1 = TonalPalette.fromHueAndChroma(hue, 4), this.n2 = TonalPalette.fromHueAndChroma(hue, 8)), this.error = TonalPalette.fromHueAndChroma(25, 84);\n }\n}\nclass Scheme {\n get primary() {\n return this.props.primary;\n }\n get onPrimary() {\n return this.props.onPrimary;\n }\n get primaryContainer() {\n return this.props.primaryContainer;\n }\n get onPrimaryContainer() {\n return this.props.onPrimaryContainer;\n }\n get secondary() {\n return this.props.secondary;\n }\n get onSecondary() {\n return this.props.onSecondary;\n }\n get secondaryContainer() {\n return this.props.secondaryContainer;\n }\n get onSecondaryContainer() {\n return this.props.onSecondaryContainer;\n }\n get tertiary() {\n return this.props.tertiary;\n }\n get onTertiary() {\n return this.props.onTertiary;\n }\n get tertiaryContainer() {\n return this.props.tertiaryContainer;\n }\n get onTertiaryContainer() {\n return this.props.onTertiaryContainer;\n }\n get error() {\n return this.props.error;\n }\n get onError() {\n return this.props.onError;\n }\n get errorContainer() {\n return this.props.errorContainer;\n }\n get onErrorContainer() {\n return this.props.onErrorContainer;\n }\n get background() {\n return this.props.background;\n }\n get onBackground() {\n return this.props.onBackground;\n }\n get surface() {\n return this.props.surface;\n }\n get onSurface() {\n return this.props.onSurface;\n }\n get surfaceVariant() {\n return this.props.surfaceVariant;\n }\n get onSurfaceVariant() {\n return this.props.onSurfaceVariant;\n }\n get outline() {\n return this.props.outline;\n }\n get outlineVariant() {\n return this.props.outlineVariant;\n }\n get shadow() {\n return this.props.shadow;\n }\n get scrim() {\n return this.props.scrim;\n }\n get inverseSurface() {\n return this.props.inverseSurface;\n }\n get inverseOnSurface() {\n return this.props.inverseOnSurface;\n }\n get inversePrimary() {\n return this.props.inversePrimary;\n }\n static light(argb) {\n return Scheme.lightFromCorePalette(CorePalette.of(argb));\n }\n static dark(argb) {\n return Scheme.darkFromCorePalette(CorePalette.of(argb));\n }\n static lightContent(argb) {\n return Scheme.lightFromCorePalette(CorePalette.contentOf(argb));\n }\n static darkContent(argb) {\n return Scheme.darkFromCorePalette(CorePalette.contentOf(argb));\n }\n static lightFromCorePalette(core) {\n return new Scheme({\n primary: core.a1.tone(40),\n onPrimary: core.a1.tone(100),\n primaryContainer: core.a1.tone(90),\n onPrimaryContainer: core.a1.tone(10),\n secondary: core.a2.tone(40),\n onSecondary: core.a2.tone(100),\n secondaryContainer: core.a2.tone(90),\n onSecondaryContainer: core.a2.tone(10),\n tertiary: core.a3.tone(40),\n onTertiary: core.a3.tone(100),\n tertiaryContainer: core.a3.tone(90),\n onTertiaryContainer: core.a3.tone(10),\n error: core.error.tone(40),\n onError: core.error.tone(100),\n errorContainer: core.error.tone(90),\n onErrorContainer: core.error.tone(10),\n background: core.n1.tone(99),\n onBackground: core.n1.tone(10),\n surface: core.n1.tone(99),\n onSurface: core.n1.tone(10),\n surfaceVariant: core.n2.tone(90),\n onSurfaceVariant: core.n2.tone(30),\n outline: core.n2.tone(50),\n outlineVariant: core.n2.tone(80),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(20),\n inverseOnSurface: core.n1.tone(95),\n inversePrimary: core.a1.tone(80)\n });\n }\n static darkFromCorePalette(core) {\n return new Scheme({\n primary: core.a1.tone(80),\n onPrimary: core.a1.tone(20),\n primaryContainer: core.a1.tone(30),\n onPrimaryContainer: core.a1.tone(90),\n secondary: core.a2.tone(80),\n onSecondary: core.a2.tone(20),\n secondaryContainer: core.a2.tone(30),\n onSecondaryContainer: core.a2.tone(90),\n tertiary: core.a3.tone(80),\n onTertiary: core.a3.tone(20),\n tertiaryContainer: core.a3.tone(30),\n onTertiaryContainer: core.a3.tone(90),\n error: core.error.tone(80),\n onError: core.error.tone(20),\n errorContainer: core.error.tone(30),\n onErrorContainer: core.error.tone(80),\n background: core.n1.tone(10),\n onBackground: core.n1.tone(90),\n surface: core.n1.tone(10),\n onSurface: core.n1.tone(90),\n surfaceVariant: core.n2.tone(30),\n onSurfaceVariant: core.n2.tone(80),\n outline: core.n2.tone(60),\n outlineVariant: core.n2.tone(30),\n shadow: core.n1.tone(0),\n scrim: core.n1.tone(0),\n inverseSurface: core.n1.tone(90),\n inverseOnSurface: core.n1.tone(20),\n inversePrimary: core.a1.tone(40)\n });\n }\n constructor(props) {\n this.props = props;\n }\n toJSON() {\n return {\n ...this.props\n };\n }\n}\nfunction hexFromArgb(argb) {\n const r = redFromArgb(argb),\n g = greenFromArgb(argb),\n b = blueFromArgb(argb),\n outParts = [r.toString(16), g.toString(16), b.toString(16)];\n for (const [i, part] of outParts.entries()) 1 === part.length && (outParts[i] = \"0\" + part);\n return \"#\" + outParts.join(\"\");\n}\nfunction argbFromHex(hex) {\n const isThree = 3 === (hex = hex.replace(\"#\", \"\")).length,\n isSix = 6 === hex.length,\n isEight = 8 === hex.length;\n if (!isThree && !isSix && !isEight) throw new Error(\"unexpected hex \" + hex);\n let r = 0,\n g = 0,\n b = 0;\n return isThree ? (r = parseIntHex(hex.slice(0, 1).repeat(2)), g = parseIntHex(hex.slice(1, 2).repeat(2)), b = parseIntHex(hex.slice(2, 3).repeat(2))) : isSix ? (r = parseIntHex(hex.slice(0, 2)), g = parseIntHex(hex.slice(2, 4)), b = parseIntHex(hex.slice(4, 6))) : isEight && (r = parseIntHex(hex.slice(2, 4)), g = parseIntHex(hex.slice(4, 6)), b = parseIntHex(hex.slice(6, 8))), (255 << 24 | (255 & r) << 16 | (255 & g) << 8 | 255 & b) >>> 0;\n}\nfunction parseIntHex(value) {\n return parseInt(value, 16);\n}\nfunction themeFromSourceColor(source, customColors) {\n if (customColors === void 0) {\n customColors = [];\n }\n const palette = CorePalette.of(source);\n return {\n source: source,\n schemes: {\n light: Scheme.light(source),\n dark: Scheme.dark(source)\n },\n palettes: {\n primary: palette.a1,\n secondary: palette.a2,\n tertiary: palette.a3,\n neutral: palette.n1,\n neutralVariant: palette.n2,\n error: palette.error\n },\n customColors: customColors.map(c => customColor(source, c))\n };\n}\nfunction customColor(source, color) {\n let value = color.value;\n const from = value,\n to = source;\n color.blend && (value = Blend.harmonize(from, to));\n const tones = CorePalette.of(value).a1;\n return {\n color: color,\n value: value,\n light: {\n color: tones.tone(40),\n onColor: tones.tone(100),\n colorContainer: tones.tone(90),\n onColorContainer: tones.tone(10)\n },\n dark: {\n color: tones.tone(80),\n onColor: tones.tone(20),\n colorContainer: tones.tone(30),\n onColorContainer: tones.tone(90)\n }\n };\n}\nexport { argbFromHex, hexFromArgb, themeFromSourceColor };", "// eslint-disable-next-line\nimport { argbFromHex, hexFromArgb, themeFromSourceColor } from './material-color-utils.js';\n\n/* eslint-disable */\n// prettier-ignore\nfunction toRGBA(d) {\n const r = Math.round;\n const l = d.length;\n const rgba = {};\n if (d.slice(0, 3).toLowerCase() === 'rgb') {\n d = d.replace(' ', '').split(',');\n rgba[0] = parseInt(d[0].slice(d[3].toLowerCase() === 'a' ? 5 : 4), 10);\n rgba[1] = parseInt(d[1], 10);\n rgba[2] = parseInt(d[2], 10);\n rgba[3] = d[3] ? parseFloat(d[3]) : -1;\n } else {\n if (l < 6) d = parseInt(String(d[1]) + d[1] + d[2] + d[2] + d[3] + d[3] + (l > 4 ? String(d[4]) + d[4] : ''), 16);else d = parseInt(d.slice(1), 16);\n rgba[0] = d >> 16 & 255;\n rgba[1] = d >> 8 & 255;\n rgba[2] = d & 255;\n rgba[3] = l === 9 || l === 5 ? r((d >> 24 & 255) / 255 * 10000) / 10000 : -1;\n }\n return rgba;\n}\n\n// prettier-ignore\nfunction blend(from, to, p) {\n if (p === void 0) {\n p = 0.5;\n }\n const r = Math.round;\n from = from.trim();\n to = to.trim();\n const b = p < 0;\n p = b ? p * -1 : p;\n const f = toRGBA(from);\n const t = toRGBA(to);\n if (to[0] === 'r') {\n return 'rgb' + (to[3] === 'a' ? 'a(' : '(') + r((t[0] - f[0]) * p + f[0]) + ',' + r((t[1] - f[1]) * p + f[1]) + ',' + r((t[2] - f[2]) * p + f[2]) + (f[3] < 0 && t[3] < 0 ? '' : ',' + (f[3] > -1 && t[3] > -1 ? r(((t[3] - f[3]) * p + f[3]) * 10000) / 10000 : t[3] < 0 ? f[3] : t[3])) + ')';\n }\n return '#' + (0x100000000 + (f[3] > -1 && t[3] > -1 ? r(((t[3] - f[3]) * p + f[3]) * 255) : t[3] > -1 ? r(t[3] * 255) : f[3] > -1 ? r(f[3] * 255) : 255) * 0x1000000 + r((t[0] - f[0]) * p + f[0]) * 0x10000 + r((t[1] - f[1]) * p + f[1]) * 0x100 + r((t[2] - f[2]) * p + f[2])).toString(16).slice(f[3] > -1 || t[3] > -1 ? 1 : 3);\n}\n/* eslint-enable */\n\nexport const materialColors = function (hexColor) {\n if (hexColor === void 0) {\n hexColor = '';\n }\n const theme = themeFromSourceColor(argbFromHex(`#${hexColor.replace('#', '')}`));\n [0.05, 0.08, 0.11, 0.12, 0.14].forEach((amount, index) => {\n theme.schemes.light.props[`surface${index + 1}`] = argbFromHex(blend(hexFromArgb(theme.schemes.light.props.surface), hexFromArgb(theme.schemes.light.props.primary), amount));\n theme.schemes.dark.props[`surface${index + 1}`] = argbFromHex(blend(hexFromArgb(theme.schemes.dark.props.surface), hexFromArgb(theme.schemes.dark.props.primary), amount));\n });\n const name = n => {\n return n.split('').map(char => char.toUpperCase() === char && char !== '-' && char !== '7' ? `-${char.toLowerCase()}` : char).join('');\n };\n const shouldSkip = prop => {\n const skip = ['tertiary', 'shadow', 'scrim', 'error', 'background'];\n return skip.filter(v => prop.toLowerCase().includes(v)).length > 0;\n };\n const light = {};\n const dark = {};\n Object.keys(theme.schemes.light.props).forEach(prop => {\n if (shouldSkip(prop)) return;\n light[name(`--f7-md-${prop}`)] = hexFromArgb(theme.schemes.light.props[prop]);\n });\n Object.keys(theme.schemes.dark.props).forEach(prop => {\n if (shouldSkip(prop)) return;\n dark[name(`--f7-md-${prop}`)] = hexFromArgb(theme.schemes.dark.props[prop]);\n });\n return {\n light,\n dark\n };\n};", "import { getWindow, getDocument } from 'ssr-window';\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0,\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n }(),\n intersectionObserver: function checkObserver() {\n return 'IntersectionObserver' in window;\n }()\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nexport { getSupport };", "import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCalculated;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false,\n androidChrome: false,\n desktop: false,\n iphone: false,\n ipod: false,\n ipad: false,\n edge: false,\n ie: false,\n firefox: false,\n macos: false,\n windows: false,\n cordova: !!window.cordova,\n electron: false,\n capacitor: !!window.Capacitor,\n nwjs: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS|iPhone;\\sCPU\\sOS)\\s([\\d_]+)/);\n const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n const edge = ua.indexOf('Edge/') >= 0;\n const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0;\n const windows = platform === 'Win32';\n const electron = ua.toLowerCase().indexOf('electron') >= 0;\n const nwjs = typeof nw !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && typeof process.versions.nw !== 'undefined';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n device.ie = ie;\n device.edge = edge;\n device.firefox = firefox;\n\n // Android\n if (android) {\n device.os = 'android';\n device.osVersion = android[2];\n device.android = true;\n device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n // iOS\n if (iphone && !ipod) {\n device.osVersion = iphone[2].replace(/_/g, '.');\n device.iphone = true;\n }\n if (ipad) {\n device.osVersion = ipad[2].replace(/_/g, '.');\n device.ipad = true;\n }\n if (ipod) {\n device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n device.ipod = true;\n }\n // iOS 8+ changed UA\n if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {\n if (device.osVersion.split('.')[0] === '10') {\n device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];\n }\n }\n\n // Webview\n device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || window.navigator.standalone)) || window.matchMedia && window.matchMedia('(display-mode: standalone)').matches;\n device.webview = device.webView;\n device.standalone = device.webView;\n\n // Desktop\n device.desktop = !(device.ios || device.android) || electron || nwjs;\n if (device.desktop) {\n device.electron = electron;\n device.nwjs = nwjs;\n device.macos = macos;\n device.windows = windows;\n if (device.macos) {\n device.os = 'macos';\n }\n if (device.windows) {\n device.os = 'windows';\n }\n }\n\n // Pixel Ratio\n device.pixelRatio = window.devicePixelRatio || 1;\n\n // Color Scheme\n const DARK = '(prefers-color-scheme: dark)';\n const LIGHT = '(prefers-color-scheme: light)';\n device.prefersColorScheme = function prefersColorTheme() {\n let theme;\n if (window.matchMedia && window.matchMedia(LIGHT).matches) {\n theme = 'light';\n }\n if (window.matchMedia && window.matchMedia(DARK).matches) {\n theme = 'dark';\n }\n return theme;\n };\n\n // Export object\n return device;\n}\nfunction getDevice(overrides, reset) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCalculated || reset) {\n deviceCalculated = calcDevice(overrides);\n }\n return deviceCalculated;\n}\nexport { getDevice };", "class EventsClass {\n constructor(parents) {\n if (parents === void 0) {\n parents = [];\n }\n const self = this;\n self.eventsParents = parents;\n self.eventsListeners = {};\n }\n on(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n }\n once(events, handler, priority) {\n const self = this;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.f7proxy) {\n delete onceHandler.f7proxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.f7proxy = handler;\n return self.on(events, onceHandler, priority);\n }\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.f7proxy && eventHandler.f7proxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n }\n emit() {\n const self = this;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n let eventsParents;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n eventsParents = self.eventsParents;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n eventsParents = args[0].local ? [] : args[0].parents || self.eventsParents;\n }\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n const localEvents = eventsArray.map(eventName => eventName.replace('local::', ''));\n const parentEvents = eventsArray.filter(eventName => eventName.indexOf('local::') < 0);\n localEvents.forEach(event => {\n if (self.eventsListeners && self.eventsListeners[event]) {\n const handlers = [];\n self.eventsListeners[event].forEach(eventHandler => {\n handlers.push(eventHandler);\n });\n handlers.forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n if (eventsParents && eventsParents.length > 0) {\n eventsParents.forEach(eventsParent => {\n eventsParent.emit(parentEvents, ...data);\n });\n }\n return self;\n }\n}\nexport default EventsClass;", "import { extend, now } from './utils.js';\nimport EventsClass from './events-class.js';\nclass Framework7Class extends EventsClass {\n constructor(params, parents) {\n if (params === void 0) {\n params = {};\n }\n if (parents === void 0) {\n parents = [];\n }\n super(parents);\n const self = this;\n self.params = params;\n if (self.params && self.params.on) {\n Object.keys(self.params.on).forEach(eventName => {\n self.on(eventName, self.params.on[eventName]);\n });\n }\n }\n\n // eslint-disable-next-line\n useModuleParams(module, instanceParams) {\n if (module.params) {\n const originalParams = {};\n Object.keys(module.params).forEach(paramKey => {\n if (typeof instanceParams[paramKey] === 'undefined') return;\n originalParams[paramKey] = extend({}, instanceParams[paramKey]);\n });\n extend(instanceParams, module.params);\n Object.keys(originalParams).forEach(paramKey => {\n extend(instanceParams[paramKey], originalParams[paramKey]);\n });\n }\n }\n useModulesParams(instanceParams) {\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach(moduleName => {\n const module = instance.modules[moduleName];\n // Extend params\n if (module.params) {\n extend(instanceParams, module.params);\n }\n });\n }\n useModule(moduleName, moduleParams) {\n if (moduleName === void 0) {\n moduleName = '';\n }\n if (moduleParams === void 0) {\n moduleParams = {};\n }\n const instance = this;\n if (!instance.modules) return;\n const module = typeof moduleName === 'string' ? instance.modules[moduleName] : moduleName;\n if (!module) return;\n\n // Extend instance methods and props\n if (module.instance) {\n Object.keys(module.instance).forEach(modulePropName => {\n const moduleProp = module.instance[modulePropName];\n if (typeof moduleProp === 'function') {\n instance[modulePropName] = moduleProp.bind(instance);\n } else {\n instance[modulePropName] = moduleProp;\n }\n });\n }\n // Add event listeners\n if (module.on && instance.on) {\n Object.keys(module.on).forEach(moduleEventName => {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n }\n // Add vnode hooks\n if (module.vnode) {\n if (!instance.vnodeHooks) instance.vnodeHooks = {};\n Object.keys(module.vnode).forEach(vnodeId => {\n Object.keys(module.vnode[vnodeId]).forEach(hookName => {\n const handler = module.vnode[vnodeId][hookName];\n if (!instance.vnodeHooks[hookName]) instance.vnodeHooks[hookName] = {};\n if (!instance.vnodeHooks[hookName][vnodeId]) instance.vnodeHooks[hookName][vnodeId] = [];\n instance.vnodeHooks[hookName][vnodeId].push(handler.bind(instance));\n });\n });\n }\n // Module create callback\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n }\n useModules(modulesParams) {\n if (modulesParams === void 0) {\n modulesParams = {};\n }\n const instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach(moduleName => {\n const moduleParams = modulesParams[moduleName] || {};\n instance.useModule(moduleName, moduleParams);\n });\n }\n static set components(components) {\n const Class = this;\n if (!Class.use) return;\n Class.use(components);\n }\n static installModule(module) {\n const Class = this;\n if (!Class.prototype.modules) Class.prototype.modules = {};\n const name = module.name || `${Object.keys(Class.prototype.modules).length}_${now()}`;\n Class.prototype.modules[name] = module;\n // Prototype\n if (module.proto) {\n Object.keys(module.proto).forEach(key => {\n Class.prototype[key] = module.proto[key];\n });\n }\n // Class\n if (module.static) {\n Object.keys(module.static).forEach(key => {\n Class[key] = module.static[key];\n });\n }\n // Callback\n if (module.install) {\n for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n params[_key - 1] = arguments[_key];\n }\n module.install.apply(Class, params);\n }\n return Class;\n }\n static use(module) {\n const Class = this;\n if (Array.isArray(module)) {\n module.forEach(m => Class.installModule(m));\n return Class;\n }\n for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n params[_key2 - 1] = arguments[_key2];\n }\n return Class.installModule(module, ...params);\n }\n}\nexport default Framework7Class;", "import $ from './dom7.js';\nexport default function ConstructorMethods(parameters) {\n if (parameters === void 0) {\n parameters = {};\n }\n const {\n defaultSelector,\n constructor: Constructor,\n domProp,\n app,\n addMethods\n } = parameters;\n const methods = {\n create() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (app) return new Constructor(app, ...args);\n return new Constructor(...args);\n },\n get(el) {\n if (el === void 0) {\n el = defaultSelector;\n }\n if (el instanceof Constructor) return el;\n const $el = $(el);\n if ($el.length === 0) return undefined;\n return $el[0][domProp];\n },\n destroy(el) {\n const instance = methods.get(el);\n if (instance && instance.destroy) return instance.destroy();\n return undefined;\n }\n };\n if (addMethods && Array.isArray(addMethods)) {\n addMethods.forEach(methodName => {\n methods[methodName] = function (el) {\n if (el === void 0) {\n el = defaultSelector;\n }\n const instance = methods.get(el);\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n if (instance && instance[methodName]) return instance[methodName](...args);\n return undefined;\n };\n });\n }\n return methods;\n}", "import $ from './dom7.js';\nimport { extend } from './utils.js';\nimport ConstructorMethods from './constructor-methods.js';\nexport default function ModalMethods(parameters) {\n if (parameters === void 0) {\n parameters = {};\n }\n const {\n defaultSelector,\n constructor: Constructor,\n app\n } = parameters;\n const methods = extend(ConstructorMethods({\n defaultSelector,\n constructor: Constructor,\n app,\n domProp: 'f7Modal'\n }), {\n open(el, animate, targetEl) {\n let $el = $(el);\n if ($el.length > 1 && targetEl) {\n // check if same modal in other page\n const $targetPage = $(targetEl).parents('.page');\n if ($targetPage.length) {\n $el.each(modalEl => {\n const $modalEl = $(modalEl);\n if ($modalEl.parents($targetPage)[0] === $targetPage[0]) {\n $el = $modalEl;\n }\n });\n }\n }\n if ($el.length > 1) {\n $el = $el.eq($el.length - 1);\n }\n if (!$el.length) return undefined;\n let instance = $el[0].f7Modal;\n if (!instance) {\n const params = $el.dataset();\n instance = new Constructor(app, {\n el: $el,\n ...params\n });\n }\n return instance.open(animate);\n },\n close(el, animate, targetEl) {\n if (el === void 0) {\n el = defaultSelector;\n }\n let $el = $(el);\n if (!$el.length) return undefined;\n if ($el.length > 1) {\n // check if close link (targetEl) in this modal\n let $parentEl;\n if (targetEl) {\n const $targetEl = $(targetEl);\n if ($targetEl.length) {\n $parentEl = $targetEl.parents($el);\n }\n }\n if ($parentEl && $parentEl.length > 0) {\n $el = $parentEl;\n } else {\n $el = $el.eq($el.length - 1);\n }\n }\n let instance = $el[0].f7Modal;\n if (!instance) {\n const params = $el.dataset();\n instance = new Constructor(app, {\n el: $el,\n ...params\n });\n }\n return instance.close(animate);\n }\n });\n return methods;\n}", "import { getWindow, getDocument } from 'ssr-window';\nimport { id } from '../../shared/utils.js';\nimport $ from '../../shared/dom7.js';\nconst fetchedModules = [];\nfunction loadModule(moduleToLoad) {\n const Framework7 = this;\n const window = getWindow();\n const document = getDocument();\n return new Promise((resolve, reject) => {\n const app = Framework7.instance;\n let modulePath;\n let moduleObj;\n let moduleFunc;\n if (!moduleToLoad) {\n reject(new Error('Framework7: Lazy module must be specified'));\n return;\n }\n function install(module) {\n Framework7.use(module);\n if (app) {\n app.useModuleParams(module, app.params);\n app.useModule(module);\n }\n }\n if (typeof moduleToLoad === 'string') {\n const matchNamePattern = moduleToLoad.match(/([a-z0-9-]*)/i);\n if (moduleToLoad.indexOf('.') < 0 && matchNamePattern && matchNamePattern[0].length === moduleToLoad.length) {\n if (!app || app && !app.params.lazyModulesPath) {\n reject(new Error('Framework7: \"lazyModulesPath\" app parameter must be specified to fetch module by name'));\n return;\n }\n modulePath = `${app.params.lazyModulesPath}/${moduleToLoad}/${moduleToLoad}.lazy.js`;\n } else {\n modulePath = moduleToLoad;\n }\n } else if (typeof moduleToLoad === 'function') {\n moduleFunc = moduleToLoad;\n } else {\n // considering F7-Plugin object\n moduleObj = moduleToLoad;\n }\n if (moduleFunc) {\n const module = moduleFunc(Framework7, false);\n if (!module) {\n reject(new Error(\"Framework7: Can't find Framework7 component in specified component function\"));\n return;\n }\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolve();\n return;\n }\n // Install It\n install(module);\n resolve();\n }\n if (moduleObj) {\n const module = moduleObj;\n if (!module) {\n reject(new Error(\"Framework7: Can't find Framework7 component in specified component\"));\n return;\n }\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolve();\n return;\n }\n // Install It\n install(module);\n resolve();\n }\n if (modulePath) {\n if (fetchedModules.indexOf(modulePath) >= 0) {\n resolve();\n return;\n }\n fetchedModules.push(modulePath);\n const scriptLoad = new Promise((resolveScript, rejectScript) => {\n fetch(modulePath).then(res => res.text()).then(scriptContent => {\n const callbackId = id();\n const callbackLoadName = `f7_component_loader_callback_${callbackId}`;\n const scriptEl = document.createElement('script');\n scriptEl.innerHTML = `window.${callbackLoadName} = function (Framework7, Framework7AutoInstallComponent) {return ${scriptContent.trim()}}`;\n $('head').append(scriptEl);\n const componentLoader = window[callbackLoadName];\n delete window[callbackLoadName];\n $(scriptEl).remove();\n const module = componentLoader(Framework7, false);\n if (!module) {\n rejectScript(new Error(`Framework7: Can't find Framework7 component in ${modulePath} file`));\n return;\n }\n\n // Check if it was added\n if (Framework7.prototype.modules && Framework7.prototype.modules[module.name]) {\n resolveScript();\n return;\n }\n\n // Install It\n install(module);\n resolveScript();\n }).catch(err => {\n rejectScript(err);\n });\n });\n const styleLoad = new Promise(resolveStyle => {\n fetch(modulePath.replace('.lazy.js', app.rtl ? '.rtl.css' : '.css').replace('.js', app.rtl ? '.rtl.css' : '.css')).then(res => res.text()).then(styleContent => {\n const styleEl = document.createElement('style');\n styleEl.innerHTML = styleContent;\n $('head').append(styleEl);\n resolveStyle();\n }).catch(() => {\n resolveStyle();\n });\n });\n Promise.all([scriptLoad, styleLoad]).then(() => {\n resolve();\n }).catch(err => {\n reject(err);\n });\n }\n });\n}\nexport default loadModule;", "/* eslint-disable prefer-rest-params */\nconst $jsx = function (tag, props) {\n const attrs = props || {};\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n const children = args || [];\n const attrsString = Object.keys(attrs).map(attr => {\n if (attr[0] === '_') {\n if (attrs[attr]) return attr.replace('_', '');\n return '';\n }\n return `${attr}=\"${attrs[attr]}\"`;\n }).filter(attr => !!attr).join(' ');\n if (['path', 'img', 'circle', 'polygon', 'line', 'input'].indexOf(tag) >= 0) {\n return `<${tag} ${attrsString} />`.trim();\n }\n const childrenContent = children.filter(c => !!c).map(c => Array.isArray(c) ? c.join('') : c).join('');\n return `<${tag} ${attrsString}>${childrenContent}${tag}>`.trim();\n};\nexport default $jsx;", "/* eslint-disable no-underscore-dangle */\n\nimport { getWindow, getDocument } from 'ssr-window';\nimport { extend, nextFrame } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport Framework7Class from '../../shared/class.js';\nimport EventsClass from '../../shared/events-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nimport $ from '../../shared/dom7.js';\nimport loadModule from './load-module.js';\nimport $jsx from '../../shared/$jsx.js';\nclass Framework7 extends Framework7Class {\n constructor(params) {\n if (params === void 0) {\n params = {};\n }\n super(params);\n // eslint-disable-next-line\n if (Framework7.instance && typeof window !== 'undefined') {\n throw new Error(\"Framework7 is already initialized and can't be initialized more than once\");\n }\n const device = getDevice({\n userAgent: params.userAgent || undefined\n });\n const support = getSupport();\n const passedParams = extend({}, params);\n\n // App Instance\n const app = this;\n app.device = device;\n app.support = support;\n const w = getWindow();\n const d = getDocument();\n Framework7.instance = app;\n\n // Default\n const defaults = {\n el: 'body',\n theme: 'auto',\n routes: [],\n name: 'Framework7',\n lazyModulesPath: null,\n initOnDeviceReady: true,\n init: true,\n darkMode: undefined,\n iosTranslucentBars: true,\n iosTranslucentModals: true,\n component: undefined,\n componentUrl: undefined,\n userAgent: null,\n url: null,\n colors: {\n primary: '#007aff',\n red: '#ff3b30',\n green: '#4cd964',\n blue: '#2196f3',\n pink: '#ff2d55',\n yellow: '#ffcc00',\n orange: '#ff9500',\n purple: '#9c27b0',\n deeppurple: '#673ab7',\n lightblue: '#5ac8fa',\n teal: '#009688',\n lime: '#cddc39',\n deeporange: '#ff6b22',\n white: '#ffffff',\n black: '#000000'\n }\n };\n\n // Extend defaults with modules params\n app.useModulesParams(defaults);\n\n // Extend defaults with passed params\n app.params = extend(defaults, params);\n extend(app, {\n // App Name\n name: app.params.name,\n // Routes\n routes: app.params.routes,\n // Theme\n theme: function getTheme() {\n if (app.params.theme === 'auto') {\n if (device.ios) return 'ios';\n return 'md';\n }\n return app.params.theme;\n }(),\n // Initially passed parameters\n passedParams,\n online: w.navigator.onLine,\n colors: app.params.colors,\n darkMode: app.params.darkMode\n });\n if (params.store) app.params.store = params.store;\n\n // Save Root\n if (app.$el && app.$el[0]) {\n app.$el[0].f7 = app;\n }\n\n // Install Modules\n app.useModules();\n\n // Init Store\n app.initStore();\n\n // Init\n if (app.params.init) {\n if (device.cordova && app.params.initOnDeviceReady) {\n $(d).on('deviceready', () => {\n app.init();\n });\n } else {\n app.init();\n }\n }\n\n // Return app instance\n return app;\n }\n setColorTheme(color) {\n if (!color) return;\n const app = this;\n app.colors.primary = color;\n app.setColors();\n }\n setColors() {\n const app = this;\n const document = getDocument();\n if (!app.colorsStyleEl) {\n app.colorsStyleEl = document.createElement('style');\n document.head.prepend(app.colorsStyleEl);\n }\n app.colorsStyleEl.textContent = app.utils.colorThemeCSSStyles(app.colors);\n }\n mount(rootEl) {\n const app = this;\n const window = getWindow();\n const document = getDocument();\n const $rootEl = $(rootEl || app.params.el).eq(0);\n app.$el = $rootEl;\n if (app.$el && app.$el[0]) {\n app.el = app.$el[0];\n app.el.f7 = app;\n app.rtl = $rootEl.css('direction') === 'rtl';\n }\n\n // Auto Dark Mode\n const DARK = '(prefers-color-scheme: dark)';\n const LIGHT = '(prefers-color-scheme: light)';\n app.mq = {};\n if (window.matchMedia) {\n app.mq.dark = window.matchMedia(DARK);\n app.mq.light = window.matchMedia(LIGHT);\n }\n app.colorSchemeListener = function colorSchemeListener(_ref) {\n let {\n matches,\n media\n } = _ref;\n if (!matches) {\n return;\n }\n const html = document.querySelector('html');\n if (media === DARK) {\n html.classList.add('dark');\n app.darkMode = true;\n app.emit('darkModeChange', true);\n } else if (media === LIGHT) {\n html.classList.remove('dark');\n app.darkMode = false;\n app.emit('darkModeChange', false);\n }\n };\n app.emit('mount');\n }\n initStore() {\n const app = this;\n if (typeof app.params.store !== 'undefined' && app.params.store.__store) {\n app.store = app.params.store;\n } else {\n app.store = app.createStore(app.params.store);\n }\n }\n enableAutoDarkMode() {\n const window = getWindow();\n const document = getDocument();\n if (!window.matchMedia) return;\n const app = this;\n const html = document.querySelector('html');\n if (app.mq.dark && app.mq.light) {\n app.mq.dark.addEventListener('change', app.colorSchemeListener);\n app.mq.light.addEventListener('change', app.colorSchemeListener);\n }\n if (app.mq.dark && app.mq.dark.matches) {\n html.classList.add('dark');\n app.darkMode = true;\n app.emit('darkModeChange', true);\n } else if (app.mq.light && app.mq.light.matches) {\n html.classList.remove('dark');\n app.darkMode = false;\n app.emit('darkModeChange', false);\n }\n }\n disableAutoDarkMode() {\n const window = getWindow();\n if (!window.matchMedia) return;\n const app = this;\n if (app.mq.dark) app.mq.dark.removeEventListener('change', app.colorSchemeListener);\n if (app.mq.light) app.mq.light.removeEventListener('change', app.colorSchemeListener);\n }\n setDarkMode(mode) {\n const app = this;\n if (mode === 'auto') {\n app.enableAutoDarkMode();\n } else {\n app.disableAutoDarkMode();\n $('html')[mode ? 'addClass' : 'removeClass']('dark');\n app.darkMode = mode;\n }\n }\n initAppComponent(callback) {\n const app = this;\n app.router.componentLoader(app.params.component, app.params.componentUrl, {\n componentOptions: {\n el: app.$el[0]\n }\n }, el => {\n app.$el = $(el);\n app.$el[0].f7 = app;\n app.$elComponent = el.f7Component;\n app.el = app.$el[0];\n if (callback) callback();\n }, () => {});\n }\n init(rootEl) {\n const app = this;\n app.setColors();\n app.mount(rootEl);\n const init = () => {\n if (app.initialized) return;\n app.$el.addClass('framework7-initializing');\n\n // RTL attr\n if (app.rtl) {\n $('html').attr('dir', 'rtl');\n }\n\n // Auto Dark Mode\n if (typeof app.params.darkMode === 'undefined') {\n app.darkMode = $('html').hasClass('dark');\n } else {\n app.setDarkMode(app.params.darkMode);\n }\n\n // Watch for online/offline state\n const window = getWindow();\n window.addEventListener('offline', () => {\n app.online = false;\n app.emit('offline');\n app.emit('connection', false);\n });\n window.addEventListener('online', () => {\n app.online = true;\n app.emit('online');\n app.emit('connection', true);\n });\n\n // Root class\n app.$el.addClass('framework7-root');\n\n // Theme class\n $('html').removeClass('ios md').addClass(app.theme);\n\n // iOS Translucent\n if (app.params.iosTranslucentBars && app.theme === 'ios') {\n $('html').addClass('ios-translucent-bars');\n }\n if (app.params.iosTranslucentModals && app.theme === 'ios') {\n $('html').addClass('ios-translucent-modals');\n }\n\n // Init class\n nextFrame(() => {\n app.$el.removeClass('framework7-initializing');\n });\n // Emit, init other modules\n app.initialized = true;\n app.emit('init');\n };\n if (app.params.component || app.params.componentUrl) {\n app.initAppComponent(() => {\n init();\n });\n } else {\n init();\n }\n return app;\n }\n\n // eslint-disable-next-line\n loadModule() {\n return Framework7.loadModule(...arguments);\n }\n\n // eslint-disable-next-line\n loadModules() {\n return Framework7.loadModules(...arguments);\n }\n getVnodeHooks(hook, id) {\n const app = this;\n if (!app.vnodeHooks || !app.vnodeHooks[hook]) return [];\n return app.vnodeHooks[hook][id] || [];\n }\n\n // eslint-disable-next-line\n get $() {\n return $;\n }\n static get Dom7() {\n return $;\n }\n static get $() {\n return $;\n }\n static get device() {\n return getDevice();\n }\n static get support() {\n return getSupport();\n }\n static get Class() {\n return Framework7Class;\n }\n static get Events() {\n return EventsClass;\n }\n}\nFramework7.$jsx = $jsx;\nFramework7.ModalMethods = ModalMethods;\nFramework7.ConstructorMethods = ConstructorMethods;\nFramework7.loadModule = loadModule;\nFramework7.loadModules = function loadModules(modules) {\n return Promise.all(modules.map(module => Framework7.loadModule(module)));\n};\nexport default Framework7;", "import { getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\nexport default {\n name: 'device',\n static: {\n getDevice\n },\n on: {\n init() {\n const document = getDocument();\n const device = getDevice();\n const classNames = [];\n const html = document.querySelector('html');\n const metaStatusbar = document.querySelector('meta[name=\"apple-mobile-web-app-status-bar-style\"]');\n if (!html) return;\n if (device.standalone && device.ios && metaStatusbar && metaStatusbar.content === 'black-translucent') {\n classNames.push('device-full-viewport');\n }\n\n // Pixel Ratio\n classNames.push(`device-pixel-ratio-${Math.floor(device.pixelRatio)}`);\n // OS classes\n if (device.os && !device.desktop) {\n classNames.push(`device-${device.os}`);\n } else if (device.desktop) {\n classNames.push('device-desktop');\n if (device.os) {\n classNames.push(`device-${device.os}`);\n }\n }\n if (device.cordova) {\n classNames.push('device-cordova');\n }\n if (device.capacitor) {\n classNames.push('device-capacitor');\n }\n\n // Add html classes\n classNames.forEach(className => {\n html.classList.add(className);\n });\n }\n }\n};", "import { getSupport } from '../../shared/get-support.js';\nexport default {\n name: 'support',\n static: {\n getSupport\n }\n};", "import * as utils from '../../shared/utils.js';\nexport default {\n name: 'utils',\n proto: {\n utils\n },\n static: {\n utils\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\nexport default {\n name: 'resize',\n create() {\n const app = this;\n app.getSize = () => {\n if (!app.el) return {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n };\n const offset = app.$el.offset();\n const [width, height, left, top] = [app.el.offsetWidth, app.el.offsetHeight, offset.left, offset.top];\n app.width = width;\n app.height = height;\n app.left = left;\n app.top = top;\n return {\n width,\n height,\n left,\n top\n };\n };\n },\n on: {\n init() {\n const app = this;\n const window = getWindow();\n\n // Get Size\n app.getSize();\n\n // Emit resize\n window.addEventListener('resize', () => {\n app.emit('resize');\n }, false);\n\n // Emit orientationchange\n window.addEventListener('orientationchange', () => {\n app.emit('orientationchange');\n });\n },\n orientationchange() {\n const document = getDocument();\n const device = getDevice();\n // Fix iPad weird body scroll\n if (device.ipad) {\n document.body.scrollLeft = 0;\n setTimeout(() => {\n document.body.scrollLeft = 0;\n }, 0);\n }\n },\n resize() {\n const app = this;\n app.getSize();\n }\n }\n};", "/* eslint-disable no-nested-ternary */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { extend } from '../../shared/utils.js';\nfunction initTouch() {\n const app = this;\n const device = getDevice();\n const support = getSupport();\n const window = getWindow();\n const document = getDocument();\n const params = app.params.touch;\n const useRipple = params[`${app.theme}TouchRipple`];\n if (device.ios && device.webView) {\n // Strange hack required for iOS 8 webview to work on inputs\n window.addEventListener('touchstart', () => {});\n }\n let touchStartX;\n let touchStartY;\n let targetElement;\n let isMoved;\n let tapHoldFired;\n let tapHoldTimeout;\n let preventClick;\n let activableElement;\n let activeTimeout;\n let rippleWave;\n let rippleTarget;\n let rippleTimeout;\n function findActivableElement(el) {\n const target = $(el);\n const parents = target.parents(params.activeStateElements);\n if (target.closest('.no-active-state').length) {\n return null;\n }\n let activable;\n if (target.is(params.activeStateElements)) {\n activable = target;\n }\n if (parents.length > 0) {\n activable = activable ? activable.add(parents) : parents;\n }\n if (activable && activable.length > 1) {\n const newActivable = [];\n let preventPropagation;\n for (let i = 0; i < activable.length; i += 1) {\n if (!preventPropagation) {\n newActivable.push(activable[i]);\n if (activable.eq(i).hasClass('prevent-active-state-propagation') || activable.eq(i).hasClass('no-active-state-propagation')) {\n preventPropagation = true;\n }\n }\n }\n activable = $(newActivable);\n }\n return activable || target;\n }\n function isInsideScrollableView(el) {\n const pageContent = el.parents('.page-content');\n return pageContent.length > 0;\n }\n function addActive() {\n if (!activableElement) return;\n activableElement.addClass('active-state');\n }\n function removeActive() {\n if (!activableElement) return;\n activableElement.removeClass('active-state');\n activableElement = null;\n }\n\n // Ripple handlers\n function findRippleElement(el) {\n const rippleElements = params.touchRippleElements;\n const $el = $(el);\n if ($el.is(rippleElements)) {\n if ($el.hasClass('no-ripple')) {\n return false;\n }\n return $el;\n }\n if ($el.parents(rippleElements).length > 0) {\n const rippleParent = $el.parents(rippleElements).eq(0);\n if (rippleParent.hasClass('no-ripple')) {\n return false;\n }\n return rippleParent;\n }\n return false;\n }\n function createRipple($el, x, y) {\n if (!$el) return;\n rippleWave = app.touchRipple.create(app, $el, x, y);\n }\n function removeRipple() {\n if (!rippleWave) return;\n rippleWave.remove();\n rippleWave = undefined;\n rippleTarget = undefined;\n }\n function rippleTouchStart(el) {\n rippleTarget = findRippleElement(el);\n if (!rippleTarget || rippleTarget.length === 0) {\n rippleTarget = undefined;\n return;\n }\n const inScrollable = isInsideScrollableView(rippleTarget);\n if (!inScrollable) {\n removeRipple();\n createRipple(rippleTarget, touchStartX, touchStartY);\n } else {\n clearTimeout(rippleTimeout);\n rippleTimeout = setTimeout(() => {\n removeRipple();\n createRipple(rippleTarget, touchStartX, touchStartY);\n }, 80);\n }\n }\n function rippleTouchMove() {\n clearTimeout(rippleTimeout);\n removeRipple();\n }\n function rippleTouchEnd() {\n if (!rippleWave && rippleTarget && !isMoved) {\n clearTimeout(rippleTimeout);\n createRipple(rippleTarget, touchStartX, touchStartY);\n setTimeout(removeRipple, 0);\n } else {\n removeRipple();\n }\n }\n\n // Mouse Handlers\n function handleMouseDown(e) {\n const $activableEl = findActivableElement(e.target);\n if ($activableEl) {\n $activableEl.addClass('active-state');\n if ('which' in e && e.which === 3) {\n setTimeout(() => {\n $('.active-state').removeClass('active-state');\n }, 0);\n }\n }\n if (useRipple) {\n touchStartX = e.pageX;\n touchStartY = e.pageY;\n rippleTouchStart(e.target, e.pageX, e.pageY);\n }\n }\n function handleMouseMove() {\n if (!params.activeStateOnMouseMove) {\n $('.active-state').removeClass('active-state');\n }\n if (useRipple) {\n rippleTouchMove();\n }\n }\n function handleMouseUp() {\n $('.active-state').removeClass('active-state');\n if (useRipple) {\n rippleTouchEnd();\n }\n }\n function handleTouchCancel() {\n targetElement = null;\n\n // Remove Active State\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n if (params.activeState) {\n removeActive();\n }\n\n // Remove Ripple\n if (useRipple) {\n rippleTouchEnd();\n }\n }\n let isScrolling;\n let isSegmentedStrong = false;\n let segmentedStrongEl = null;\n const touchMoveActivableIos = '.dialog-button, .actions-button';\n let isTouchMoveActivable = false;\n let touchmoveActivableEl = null;\n function handleTouchStart(e) {\n if (!e.isTrusted) return true;\n isMoved = false;\n tapHoldFired = false;\n preventClick = false;\n isScrolling = undefined;\n if (e.targetTouches.length > 1) {\n if (activableElement) removeActive();\n return true;\n }\n if (e.touches.length > 1 && activableElement) {\n removeActive();\n }\n if (params.tapHold) {\n if (tapHoldTimeout) clearTimeout(tapHoldTimeout);\n tapHoldTimeout = setTimeout(() => {\n if (e && e.touches && e.touches.length > 1) return;\n tapHoldFired = true;\n e.preventDefault();\n preventClick = true;\n $(e.target).trigger('taphold', e);\n app.emit('taphold', e);\n }, params.tapHoldDelay);\n }\n targetElement = e.target;\n touchStartX = e.targetTouches[0].pageX;\n touchStartY = e.targetTouches[0].pageY;\n isSegmentedStrong = e.target.closest('.segmented-strong .button-active, .segmented-strong .tab-link-active');\n isTouchMoveActivable = app.theme === 'ios' && e.target.closest(touchMoveActivableIos);\n if (isSegmentedStrong) {\n segmentedStrongEl = isSegmentedStrong.closest('.segmented-strong');\n }\n if (params.activeState) {\n activableElement = findActivableElement(targetElement);\n if (activableElement && !isInsideScrollableView(activableElement)) {\n addActive();\n } else if (activableElement) {\n activeTimeout = setTimeout(addActive, 80);\n }\n }\n if (useRipple) {\n rippleTouchStart(targetElement, touchStartX, touchStartY);\n }\n return true;\n }\n function handleTouchMove(e) {\n if (!e.isTrusted) return;\n let touch;\n let distance;\n let shouldRemoveActive = true;\n if (e.type === 'touchmove') {\n touch = e.targetTouches[0];\n distance = params.touchClicksDistanceThreshold;\n }\n const touchCurrentX = e.targetTouches[0].pageX;\n const touchCurrentY = e.targetTouches[0].pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX));\n }\n if (isTouchMoveActivable || !isScrolling && isSegmentedStrong && segmentedStrongEl) {\n if (e.cancelable) e.preventDefault();\n }\n if (!isScrolling && isSegmentedStrong && segmentedStrongEl) {\n const elementFromPoint = document.elementFromPoint(e.targetTouches[0].clientX, e.targetTouches[0].clientY);\n const buttonEl = elementFromPoint.closest('.segmented-strong .button:not(.button-active):not(.tab-link-active)');\n if (buttonEl && segmentedStrongEl.contains(buttonEl)) {\n $(buttonEl).trigger('click', 'f7Segmented');\n targetElement = buttonEl;\n }\n }\n if (distance && touch) {\n const pageX = touch.pageX;\n const pageY = touch.pageY;\n if (Math.abs(pageX - touchStartX) > distance || Math.abs(pageY - touchStartY) > distance) {\n isMoved = true;\n }\n } else {\n isMoved = true;\n }\n if (isMoved) {\n preventClick = true;\n // Keep active state on touchMove (for dialog and actions buttons)\n if (isTouchMoveActivable) {\n const elementFromPoint = document.elementFromPoint(e.targetTouches[0].clientX, e.targetTouches[0].clientY);\n touchmoveActivableEl = elementFromPoint.closest(touchMoveActivableIos);\n if (touchmoveActivableEl && activableElement && activableElement[0] === touchmoveActivableEl) {\n shouldRemoveActive = false;\n } else if (touchmoveActivableEl) {\n setTimeout(() => {\n activableElement = findActivableElement(touchmoveActivableEl);\n addActive();\n });\n }\n }\n if (params.tapHold) {\n clearTimeout(tapHoldTimeout);\n }\n if (params.activeState && shouldRemoveActive) {\n clearTimeout(activeTimeout);\n removeActive();\n }\n if (useRipple) {\n rippleTouchMove();\n }\n }\n }\n function handleTouchEnd(e) {\n if (!e.isTrusted) return true;\n isScrolling = undefined;\n isSegmentedStrong = false;\n segmentedStrongEl = null;\n isTouchMoveActivable = false;\n clearTimeout(activeTimeout);\n clearTimeout(tapHoldTimeout);\n if (touchmoveActivableEl) {\n $(touchmoveActivableEl).trigger('click', 'f7TouchMoveActivable');\n touchmoveActivableEl = null;\n }\n if (document.activeElement === e.target) {\n if (params.activeState) removeActive();\n if (useRipple) {\n rippleTouchEnd();\n }\n return true;\n }\n if (params.activeState) {\n addActive();\n setTimeout(removeActive, 0);\n }\n if (useRipple) {\n rippleTouchEnd();\n }\n if (params.tapHoldPreventClicks && tapHoldFired || preventClick) {\n if (e.cancelable) e.preventDefault();\n preventClick = true;\n return false;\n }\n return true;\n }\n function handleClick(e) {\n const isOverswipe = e && e.detail && e.detail === 'f7Overswipe';\n const isSegmented = e && e.detail && e.detail === 'f7Segmented';\n // eslint-disable-next-line\n const isTouchMoveActivable = e && e.detail && e.detail === 'f7TouchMoveActivable';\n let localPreventClick = preventClick;\n if (targetElement && e.target !== targetElement) {\n if (isOverswipe || isSegmented || isTouchMoveActivable) {\n localPreventClick = false;\n } else {\n localPreventClick = true;\n }\n } else if (isTouchMoveActivable) {\n localPreventClick = false;\n }\n if (params.tapHold && params.tapHoldPreventClicks && tapHoldFired) {\n localPreventClick = true;\n }\n if (localPreventClick) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n }\n if (params.tapHold) {\n tapHoldTimeout = setTimeout(() => {\n tapHoldFired = false;\n }, device.ios || device.androidChrome ? 100 : 400);\n }\n preventClick = false;\n targetElement = null;\n return !localPreventClick;\n }\n function emitAppTouchEvent(name, e) {\n app.emit({\n events: name,\n data: [e]\n });\n }\n function appClick(e) {\n emitAppTouchEvent('click', e);\n }\n function appTouchStartActive(e) {\n emitAppTouchEvent('touchstart touchstart:active', e);\n }\n function appTouchMoveActive(e) {\n emitAppTouchEvent('touchmove touchmove:active', e);\n }\n function appTouchEndActive(e) {\n emitAppTouchEvent('touchend touchend:active', e);\n }\n function appTouchStartPassive(e) {\n emitAppTouchEvent('touchstart:passive', e);\n }\n function appTouchMovePassive(e) {\n emitAppTouchEvent('touchmove:passive', e);\n }\n function appTouchEndPassive(e) {\n emitAppTouchEvent('touchend:passive', e);\n }\n const passiveListener = support.passiveListener ? {\n passive: true\n } : false;\n const passiveListenerCapture = support.passiveListener ? {\n passive: true,\n capture: true\n } : true;\n const activeListener = support.passiveListener ? {\n passive: false\n } : false;\n const activeListenerCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n document.addEventListener('click', appClick, true);\n if (support.passiveListener) {\n document.addEventListener(app.touchEvents.start, appTouchStartActive, activeListenerCapture);\n document.addEventListener(app.touchEvents.move, appTouchMoveActive, activeListener);\n document.addEventListener(app.touchEvents.end, appTouchEndActive, activeListener);\n document.addEventListener(app.touchEvents.start, appTouchStartPassive, passiveListenerCapture);\n document.addEventListener(app.touchEvents.move, appTouchMovePassive, passiveListener);\n document.addEventListener(app.touchEvents.end, appTouchEndPassive, passiveListener);\n } else {\n document.addEventListener(app.touchEvents.start, e => {\n appTouchStartActive(e);\n appTouchStartPassive(e);\n }, true);\n document.addEventListener(app.touchEvents.move, e => {\n appTouchMoveActive(e);\n appTouchMovePassive(e);\n }, false);\n document.addEventListener(app.touchEvents.end, e => {\n appTouchEndActive(e);\n appTouchEndPassive(e);\n }, false);\n }\n if (support.touch) {\n app.on('click', handleClick);\n app.on('touchstart', handleTouchStart);\n app.on('touchmove', handleTouchMove);\n app.on('touchend', handleTouchEnd);\n document.addEventListener('touchcancel', handleTouchCancel, {\n passive: true\n });\n } else if (params.activeState) {\n app.on('touchstart', handleMouseDown);\n app.on('touchmove', handleMouseMove);\n app.on('touchend', handleMouseUp);\n document.addEventListener('pointercancel', handleMouseUp, {\n passive: true\n });\n }\n document.addEventListener('contextmenu', e => {\n if (params.disableContextMenu && (device.ios || device.android || device.cordova || window.Capacitor && window.Capacitor.isNative)) {\n e.preventDefault();\n }\n if (useRipple) {\n if (activableElement) removeActive();\n rippleTouchEnd();\n }\n });\n}\nexport default {\n name: 'touch',\n params: {\n touch: {\n // Clicks\n touchClicksDistanceThreshold: 5,\n // ContextMenu\n disableContextMenu: false,\n // Tap Hold\n tapHold: false,\n tapHoldDelay: 750,\n tapHoldPreventClicks: true,\n // Active State\n activeState: true,\n activeStateElements: 'a, button, label, span, .actions-button, .stepper-button, .stepper-button-plus, .stepper-button-minus, .card-expandable, .link, .item-link, .accordion-item-toggle',\n activeStateOnMouseMove: false,\n mdTouchRipple: true,\n iosTouchRipple: false,\n touchRippleElements: '.ripple, .link, .item-link, .list label.item-content, .list-button, .links-list a, .button, button, .input-clear-button, .dialog-button, .tab-link, .item-radio, .item-checkbox, .actions-button, .searchbar-disable-button, .fab a, .checkbox, .radio, .data-table .sortable-cell:not(.input-cell), .notification-close-button, .stepper-button, .stepper-button-minus, .stepper-button-plus, .list.accordion-list .accordion-item-toggle',\n touchRippleInsetElements: '.ripple-inset, .icon-only, .searchbar-disable-button, .input-clear-button, .notification-close-button, .md .navbar .link.back'\n }\n },\n create() {\n const app = this;\n const support = getSupport();\n extend(app, {\n touchEvents: {\n start: support.touch ? 'touchstart' : support.pointerEvents ? 'pointerdown' : 'mousedown',\n move: support.touch ? 'touchmove' : support.pointerEvents ? 'pointermove' : 'mousemove',\n end: support.touch ? 'touchend' : support.pointerEvents ? 'pointerup' : 'mouseup'\n }\n });\n },\n on: {\n init: initTouch\n }\n};", "/**\n * Tokenizer results.\n */\ninterface LexToken {\n type:\n | \"OPEN\"\n | \"CLOSE\"\n | \"PATTERN\"\n | \"NAME\"\n | \"CHAR\"\n | \"ESCAPED_CHAR\"\n | \"MODIFIER\"\n | \"END\";\n index: number;\n value: string;\n}\n\n/**\n * Tokenize input string.\n */\nfunction lexer(str: string): LexToken[] {\n const tokens: LexToken[] = [];\n let i = 0;\n\n while (i < str.length) {\n const char = str[i];\n\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n\n if (char === \":\") {\n let name = \"\";\n let j = i + 1;\n\n while (j < str.length) {\n const code = str.charCodeAt(j);\n\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95\n ) {\n name += str[j++];\n continue;\n }\n\n break;\n }\n\n if (!name) throw new TypeError(`Missing parameter name at ${i}`);\n\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n\n if (char === \"(\") {\n let count = 1;\n let pattern = \"\";\n let j = i + 1;\n\n if (str[j] === \"?\") {\n throw new TypeError(`Pattern cannot start with \"?\" at ${j}`);\n }\n\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n } else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(`Capturing groups are not allowed at ${j}`);\n }\n }\n\n pattern += str[j++];\n }\n\n if (count) throw new TypeError(`Unbalanced pattern at ${i}`);\n if (!pattern) throw new TypeError(`Missing pattern at ${i}`);\n\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n\n tokens.push({ type: \"END\", index: i, value: \"\" });\n\n return tokens;\n}\n\nexport interface ParseOptions {\n /**\n * Set the default delimiter for repeat parameters. (default: `'/'`)\n */\n delimiter?: string;\n /**\n * List of characters to automatically consider prefixes when parsing.\n */\n prefixes?: string;\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): Token[] {\n const tokens = lexer(str);\n const { prefixes = \"./\" } = options;\n const defaultPattern = `[^${escapeString(options.delimiter || \"/#?\")}]+?`;\n const result: Token[] = [];\n let key = 0;\n let i = 0;\n let path = \"\";\n\n const tryConsume = (type: LexToken[\"type\"]): string | undefined => {\n if (i < tokens.length && tokens[i].type === type) return tokens[i++].value;\n };\n\n const mustConsume = (type: LexToken[\"type\"]): string => {\n const value = tryConsume(type);\n if (value !== undefined) return value;\n const { type: nextType, index } = tokens[i];\n throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}`);\n };\n\n const consumeText = (): string => {\n let result = \"\";\n let value: string | undefined;\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n\n while (i < tokens.length) {\n const char = tryConsume(\"CHAR\");\n const name = tryConsume(\"NAME\");\n const pattern = tryConsume(\"PATTERN\");\n\n if (name || pattern) {\n let prefix = char || \"\";\n\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n result.push({\n name: name || key++,\n prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n const value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n\n if (path) {\n result.push(path);\n path = \"\";\n }\n\n const open = tryConsume(\"OPEN\");\n if (open) {\n const prefix = consumeText();\n const name = tryConsume(\"NAME\") || \"\";\n const pattern = tryConsume(\"PATTERN\") || \"\";\n const suffix = consumeText();\n\n mustConsume(\"CLOSE\");\n\n result.push({\n name: name || (pattern ? key++ : \"\"),\n pattern: name && !pattern ? defaultPattern : pattern,\n prefix,\n suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\",\n });\n continue;\n }\n\n mustConsume(\"END\");\n }\n\n return result;\n}\n\nexport interface TokensToFunctionOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * Function for encoding input strings for output.\n */\n encode?: (value: string, token: Key) => string;\n /**\n * When `false` the function can produce an invalid (unmatched) path. (default: `true`)\n */\n validate?: boolean;\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile(\n str: string,\n options?: ParseOptions & TokensToFunctionOptions\n) {\n return tokensToFunction
(parse(str, options), options);\n}\n\nexport type PathFunction
= (data?: P) => string;\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nexport function tokensToFunction
(\n tokens: Token[],\n options: TokensToFunctionOptions = {}\n): PathFunction
{\n const reFlags = flags(options);\n const { encode = (x: string) => x, validate = true } = options;\n\n // Compile all the tokens into regexps.\n const matches = tokens.map((token) => {\n if (typeof token === \"object\") {\n return new RegExp(`^(?:${token.pattern})$`, reFlags);\n }\n });\n\n return (data: Record | null | undefined) => {\n let path = \"\";\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n\n const value = data ? data[token.name] : undefined;\n const optional = token.modifier === \"?\" || token.modifier === \"*\";\n const repeat = token.modifier === \"*\" || token.modifier === \"+\";\n\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\n `Expected \"${token.name}\" to not repeat, but got an array`\n );\n }\n\n if (value.length === 0) {\n if (optional) continue;\n\n throw new TypeError(`Expected \"${token.name}\" to not be empty`);\n }\n\n for (let j = 0; j < value.length; j++) {\n const segment = encode(value[j], token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected all \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n }\n\n continue;\n }\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n const segment = encode(String(value), token);\n\n if (validate && !(matches[i] as RegExp).test(segment)) {\n throw new TypeError(\n `Expected \"${token.name}\" to match \"${token.pattern}\", but got \"${segment}\"`\n );\n }\n\n path += token.prefix + segment + token.suffix;\n continue;\n }\n\n if (optional) continue;\n\n const typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(`Expected \"${token.name}\" to be ${typeOfMessage}`);\n }\n\n return path;\n };\n}\n\nexport interface RegexpToFunctionOptions {\n /**\n * Function for decoding strings for params.\n */\n decode?: (value: string, token: Key) => string;\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult {\n path: string;\n index: number;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match
= false | MatchResult
;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction
= (\n path: string\n) => Match
;\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nexport function match
(\n str: Path,\n options?: ParseOptions & TokensToRegexpOptions & RegexpToFunctionOptions\n) {\n const keys: Key[] = [];\n const re = pathToRegexp(str, keys, options);\n return regexpToFunction
(re, keys, options);\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nexport function regexpToFunction
(\n re: RegExp,\n keys: Key[],\n options: RegexpToFunctionOptions = {}\n): MatchFunction
{\n const { decode = (x: string) => x } = options;\n\n return function (pathname: string) {\n const m = re.exec(pathname);\n if (!m) return false;\n\n const { 0: path, index } = m;\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map((value) => {\n return decode(value, key);\n });\n } else {\n params[key.name] = decode(m[i], key);\n }\n }\n\n return { path, index, params };\n };\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str: string) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options?: { sensitive?: boolean }) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n\n/**\n * Metadata about a key.\n */\nexport interface Key {\n name: string | number;\n prefix: string;\n suffix: string;\n pattern: string;\n modifier: string;\n}\n\n/**\n * A token is a string (nothing special) or key metadata (capture group).\n */\nexport type Token = string | Key;\n\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path: RegExp, keys?: Key[]): RegExp {\n if (!keys) return path;\n\n const groupsRegex = /\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n let index = 0;\n let execResult = groupsRegex.exec(path.source);\n while (execResult) {\n keys.push({\n // Use parenthesized substring match if available, index otherwise\n name: execResult[1] || index++,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\",\n });\n execResult = groupsRegex.exec(path.source);\n }\n\n return path;\n}\n\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(\n paths: Array,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n const parts = paths.map((path) => pathToRegexp(path, keys, options).source);\n return new RegExp(`(?:${parts.join(\"|\")})`, flags(options));\n}\n\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(\n path: string,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n\nexport interface TokensToRegexpOptions {\n /**\n * When `true` the regexp will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * When `true` the regexp won't allow an optional trailing delimiter to match. (default: `false`)\n */\n strict?: boolean;\n /**\n * When `true` the regexp will match to the end of the string. (default: `true`)\n */\n end?: boolean;\n /**\n * When `true` the regexp will match from the beginning of the string. (default: `true`)\n */\n start?: boolean;\n /**\n * Sets the final character for non-ending optimistic matches. (default: `/`)\n */\n delimiter?: string;\n /**\n * List of characters that can also be \"end\" characters.\n */\n endsWith?: string;\n /**\n * Encode path tokens for use in the `RegExp`.\n */\n encode?: (value: string) => string;\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nexport function tokensToRegexp(\n tokens: Token[],\n keys?: Key[],\n options: TokensToRegexpOptions = {}\n) {\n const {\n strict = false,\n start = true,\n end = true,\n encode = (x: string) => x,\n delimiter = \"/#?\",\n endsWith = \"\",\n } = options;\n const endsWithRe = `[${escapeString(endsWith)}]|$`;\n const delimiterRe = `[${escapeString(delimiter)}]`;\n let route = start ? \"^\" : \"\";\n\n // Iterate over the tokens and create our regexp string.\n for (const token of tokens) {\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n } else {\n const prefix = escapeString(encode(token.prefix));\n const suffix = escapeString(encode(token.suffix));\n\n if (token.pattern) {\n if (keys) keys.push(token);\n\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n const mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += `(?:${prefix}((?:${token.pattern})(?:${suffix}${prefix}(?:${token.pattern}))*)${suffix})${mod}`;\n } else {\n route += `(?:${prefix}(${token.pattern})${suffix})${token.modifier}`;\n }\n } else {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n route += `((?:${token.pattern})${token.modifier})`;\n } else {\n route += `(${token.pattern})${token.modifier}`;\n }\n }\n } else {\n route += `(?:${prefix}${suffix})${token.modifier}`;\n }\n }\n }\n\n if (end) {\n if (!strict) route += `${delimiterRe}?`;\n\n route += !options.endsWith ? \"$\" : `(?=${endsWithRe})`;\n } else {\n const endToken = tokens[tokens.length - 1];\n const isEndDelimited =\n typeof endToken === \"string\"\n ? delimiterRe.indexOf(endToken[endToken.length - 1]) > -1\n : endToken === undefined;\n\n if (!strict) {\n route += `(?:${delimiterRe}(?=${endsWithRe}))?`;\n }\n\n if (!isEndDelimited) {\n route += `(?=${delimiterRe}|${endsWithRe})`;\n }\n }\n\n return new RegExp(route, flags(options));\n}\n\n/**\n * Supported `path-to-regexp` input types.\n */\nexport type Path = string | RegExp | Array;\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nexport function pathToRegexp(\n path: Path,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n) {\n if (path instanceof RegExp) return regexpToRegexp(path, keys);\n if (Array.isArray(path)) return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\n", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from './dom7.js';\nimport { extend } from './utils.js';\nconst History = {\n queue: [],\n clearQueue() {\n if (History.queue.length === 0) return;\n const currentQueue = History.queue.shift();\n currentQueue();\n },\n routerQueue: [],\n clearRouterQueue() {\n if (History.routerQueue.length === 0) return;\n const currentQueue = History.routerQueue.pop();\n const {\n router,\n stateUrl,\n action\n } = currentQueue;\n let animate = router.params.animate;\n if (router.params.browserHistoryAnimate === false) animate = false;\n if (action === 'back') {\n router.back({\n animate,\n browserHistory: false\n });\n }\n if (action === 'load') {\n router.navigate(stateUrl, {\n animate,\n browserHistory: false\n });\n }\n },\n handle(e) {\n if (History.blockPopstate) return;\n const app = this;\n // const mainView = app.views.main;\n let state = e.state;\n History.previousState = History.state;\n History.state = state;\n History.allowChange = true;\n History.clearQueue();\n state = History.state;\n if (!state) state = {};\n app.views.forEach(view => {\n const router = view.router;\n let viewState = state[view.id];\n if (!viewState && view.params.browserHistory) {\n viewState = {\n url: view.router.history[0]\n };\n }\n if (!viewState) return;\n const stateUrl = viewState.url || undefined;\n let animate = router.params.animate;\n if (router.params.browserHistoryAnimate === false) animate = false;\n if (stateUrl !== router.url) {\n if (router.history.indexOf(stateUrl) >= 0) {\n // Go Back\n if (router.allowPageChange) {\n router.back({\n animate,\n browserHistory: false\n });\n } else {\n History.routerQueue.push({\n action: 'back',\n router\n });\n }\n } else if (router.allowPageChange) {\n // Load page\n router.navigate(stateUrl, {\n animate,\n browserHistory: false\n });\n } else {\n History.routerQueue.unshift({\n action: 'load',\n stateUrl,\n router\n });\n }\n }\n });\n },\n initViewState(viewId, viewState) {\n const window = getWindow();\n const newState = extend({}, History.state || {}, {\n [viewId]: viewState\n });\n History.state = newState;\n window.history.replaceState(newState, '');\n },\n push(viewId, viewState, url) {\n const window = getWindow();\n const document = getDocument();\n /* eslint-disable no-param-reassign */\n if (url.substr(-3) === '#!/') {\n url = url.replace('#!/', '');\n if (url === '') {\n url = document.location.href;\n if (url.includes('#!/')) {\n url = document.location.href.split('#!/')[0];\n }\n }\n }\n /* eslint-enable no-param-reassign */\n if (!History.allowChange) {\n History.queue.push(() => {\n History.push(viewId, viewState, url);\n });\n return;\n }\n History.previousState = History.state;\n const newState = extend({}, History.previousState || {}, {\n [viewId]: viewState\n });\n History.state = newState;\n window.history.pushState(newState, '', url);\n },\n replace(viewId, viewState, url) {\n const window = getWindow();\n if (url.substr(-3) === '#!/') {\n // eslint-disable-next-line\n url = url.replace('#!/', '');\n }\n if (!History.allowChange) {\n History.queue.push(() => {\n History.replace(viewId, viewState, url);\n });\n return;\n }\n History.previousState = History.state;\n const newState = extend({}, History.previousState || {}, {\n [viewId]: viewState\n });\n History.state = newState;\n window.history.replaceState(newState, '', url);\n },\n go(index) {\n const window = getWindow();\n History.allowChange = false;\n window.history.go(index);\n },\n back() {\n const window = getWindow();\n History.allowChange = false;\n window.history.back();\n },\n allowChange: true,\n previousState: {},\n state: {},\n blockPopstate: true,\n init(app) {\n const window = getWindow();\n const document = getDocument();\n History.state = window.history.state;\n $(window).on('load', () => {\n setTimeout(() => {\n History.blockPopstate = false;\n }, 0);\n });\n if (document.readyState && document.readyState === 'complete') {\n History.blockPopstate = false;\n }\n $(window).on('popstate', History.handle.bind(app));\n }\n};\nexport default History;", "import $ from '../../shared/dom7.js';\nimport History from '../../shared/history.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { now } from '../../shared/utils.js';\nfunction SwipeBack(r) {\n const router = r;\n const {\n $el,\n $navbarsEl,\n app,\n params\n } = router;\n const support = getSupport();\n const device = getDevice();\n let isTouched = false;\n let isMoved = false;\n const touchesStart = {};\n let isScrolling;\n let $currentPageEl = [];\n let $previousPageEl = [];\n let viewContainerWidth;\n let touchesDiff;\n let allowViewTouchMove = true;\n let touchStartTime;\n let $currentNavbarEl = [];\n let $previousNavbarEl = [];\n let dynamicNavbar;\n let $pageShadowEl;\n let $pageOpacityEl;\n let animatableNavEls;\n const paramsSwipeBackAnimateShadow = params[`${app.theme}SwipeBackAnimateShadow`];\n const paramsSwipeBackAnimateOpacity = params[`${app.theme}SwipeBackAnimateOpacity`];\n const paramsSwipeBackActiveArea = params[`${app.theme}SwipeBackActiveArea`];\n const paramsSwipeBackThreshold = params[`${app.theme}SwipeBackThreshold`];\n const transformOrigin = app.rtl ? 'right center' : 'left center';\n const transformOriginTitleLarge = app.rtl ? 'calc(100% - var(--f7-navbar-large-title-padding-left) - var(--f7-safe-area-left)) center' : 'calc(var(--f7-navbar-large-title-padding-left) + var(--f7-safe-area-left)) center';\n function animatableNavElements() {\n const els = [];\n const inverter = app.rtl ? -1 : 1;\n const currentNavIsTransparent = $currentNavbarEl.hasClass('navbar-transparent') && !$currentNavbarEl.hasClass('navbar-large') && !$currentNavbarEl.hasClass('navbar-transparent-visible');\n const currentNavIsLarge = $currentNavbarEl.hasClass('navbar-large');\n const currentNavIsCollapsed = $currentNavbarEl.hasClass('navbar-large-collapsed');\n const currentNavIsLargeTransparent = $currentNavbarEl.hasClass('navbar-large-transparent') || $currentNavbarEl.hasClass('navbar-large') && $currentNavbarEl.hasClass('navbar-transparent');\n const previousNavIsTransparent = $previousNavbarEl.hasClass('navbar-transparent') && !$previousNavbarEl.hasClass('navbar-large') && !$previousNavbarEl.hasClass('navbar-transparent-visible');\n const previousNavIsLarge = $previousNavbarEl.hasClass('navbar-large');\n const previousNavIsCollapsed = $previousNavbarEl.hasClass('navbar-large-collapsed');\n const previousNavIsLargeTransparent = $previousNavbarEl.hasClass('navbar-large-transparent') || $previousNavbarEl.hasClass('navbar-large') && $previousNavbarEl.hasClass('navbar-transparent');\n const fromLarge = currentNavIsLarge && !currentNavIsCollapsed;\n const toLarge = previousNavIsLarge && !previousNavIsCollapsed;\n const $currentNavElements = $currentNavbarEl.find('.left, .title, .right, .subnavbar, .fading, .title-large, .navbar-bg');\n const $previousNavElements = $previousNavbarEl.find('.left, .title, .right, .subnavbar, .fading, .title-large, .navbar-bg');\n let activeNavBackIconText;\n let previousNavBackIconText;\n if (params.iosAnimateNavbarBackIcon) {\n if ($currentNavbarEl.hasClass('sliding') || $currentNavbarEl.find('.navbar-inner.sliding').length) {\n activeNavBackIconText = $currentNavbarEl.find('.left').find('.back .icon + span').eq(0);\n } else {\n activeNavBackIconText = $currentNavbarEl.find('.left.sliding').find('.back .icon + span').eq(0);\n }\n if ($previousNavbarEl.hasClass('sliding') || $previousNavbarEl.find('.navbar-inner.sliding').length) {\n previousNavBackIconText = $previousNavbarEl.find('.left').find('.back .icon + span').eq(0);\n } else {\n previousNavBackIconText = $previousNavbarEl.find('.left.sliding').find('.back .icon + span').eq(0);\n }\n if (activeNavBackIconText.length) {\n $previousNavElements.each(el => {\n if (!$(el).hasClass('title')) return;\n el.f7NavbarLeftOffset += activeNavBackIconText.prev('.icon')[0].offsetWidth;\n });\n }\n }\n $currentNavElements.each(navEl => {\n const $navEl = $(navEl);\n const isSubnavbar = $navEl.hasClass('subnavbar');\n const isLeft = $navEl.hasClass('left');\n const isTitle = $navEl.hasClass('title');\n const isBg = $navEl.hasClass('navbar-bg');\n if ((isTitle || isBg) && currentNavIsTransparent) return;\n if (!fromLarge && $navEl.hasClass('.title-large')) return;\n const el = {\n el: navEl\n };\n if (fromLarge) {\n if (isTitle) return;\n if ($navEl.hasClass('title-large')) {\n if (els.indexOf(el) < 0) els.push(el);\n el.overflow = 'visible';\n $navEl.find('.title-large-text').each(subNavEl => {\n els.push({\n el: subNavEl,\n transform: progress => `translateX(${progress * 100 * inverter}%)`\n });\n });\n return;\n }\n }\n if (toLarge) {\n if (!fromLarge) {\n if ($navEl.hasClass('title-large')) {\n if (els.indexOf(el) < 0) els.push(el);\n el.opacity = 0;\n }\n }\n if (isLeft) {\n if (els.indexOf(el) < 0) els.push(el);\n el.opacity = progress => 1 - progress ** 0.33;\n $navEl.find('.back span').each(subNavEl => {\n els.push({\n el: subNavEl,\n 'transform-origin': transformOrigin,\n transform: progress => `translateX(calc(${progress} * (var(--f7-navbarTitleLargeOffset) - var(--f7-navbarLeftTextOffset)))) translateY(calc(${progress} * (var(--f7-navbar-large-title-height) - var(--f7-navbar-large-title-padding-vertical) / 2))) scale(${1 + 1 * progress})`\n });\n });\n return;\n }\n }\n if (isBg) {\n if (els.indexOf(el) < 0) els.push(el);\n if (!fromLarge && !toLarge) {\n if (currentNavIsCollapsed) {\n if (currentNavIsLargeTransparent) {\n el.className = 'ios-swipeback-navbar-bg-large';\n }\n el.transform = progress => `translateX(${100 * progress * inverter}%) translateY(calc(-1 * var(--f7-navbar-large-title-height)))`;\n } else {\n el.transform = progress => `translateX(${100 * progress * inverter}%)`;\n }\n }\n if (!fromLarge && toLarge) {\n el.className = 'ios-swipeback-navbar-bg-large';\n el.transform = progress => `translateX(${100 * progress * inverter}%) translateY(calc(-1 * ${1 - progress} * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && toLarge) {\n el.transform = progress => `translateX(${100 * progress * inverter}%)`;\n }\n if (fromLarge && !toLarge) {\n el.transform = progress => `translateX(${100 * progress * inverter}%) translateY(calc(-${progress} * var(--f7-navbar-large-title-height)))`;\n }\n return;\n }\n if ($navEl.hasClass('title-large')) return;\n const isSliding = $navEl.hasClass('sliding') || $navEl.parents('.navbar-inner.sliding').length;\n if (els.indexOf(el) < 0) els.push(el);\n if (!isSubnavbar || isSubnavbar && !isSliding) {\n el.opacity = progress => 1 - progress ** 0.33;\n }\n if (isSliding) {\n let transformTarget = el;\n if (isLeft && activeNavBackIconText.length && params.iosAnimateNavbarBackIcon) {\n const textEl = {\n el: activeNavBackIconText[0]\n };\n transformTarget = textEl;\n els.push(textEl);\n }\n transformTarget.transform = progress => {\n let activeNavTranslate = progress * transformTarget.el.f7NavbarRightOffset;\n if (device.pixelRatio === 1) activeNavTranslate = Math.round(activeNavTranslate);\n if (isSubnavbar && currentNavIsLarge) {\n return `translate3d(${activeNavTranslate}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`;\n }\n return `translate3d(${activeNavTranslate}px,0,0)`;\n };\n }\n });\n $previousNavElements.each(navEl => {\n const $navEl = $(navEl);\n const isSubnavbar = $navEl.hasClass('subnavbar');\n const isLeft = $navEl.hasClass('left');\n const isTitle = $navEl.hasClass('title');\n const isBg = $navEl.hasClass('navbar-bg');\n if ((isTitle || isBg) && previousNavIsTransparent) return;\n const el = {\n el: navEl\n };\n if (toLarge) {\n if (isTitle) return;\n if (els.indexOf(el) < 0) els.push(el);\n if ($navEl.hasClass('title-large')) {\n el.opacity = 1;\n el.overflow = 'visible';\n $navEl.find('.title-large-text').each(subNavEl => {\n els.push({\n el: subNavEl,\n 'transform-origin': transformOriginTitleLarge,\n opacity: progress => progress ** 3,\n transform: progress => `translateX(calc(${1 - progress} * (var(--f7-navbarLeftTextOffset) - var(--f7-navbarTitleLargeOffset)))) translateY(calc(${progress - 1} * var(--f7-navbar-large-title-height) + ${1 - progress} * var(--f7-navbar-large-title-padding-vertical))) scale(${0.5 + progress * 0.5})`\n });\n });\n return;\n }\n }\n if (isBg) {\n if (els.indexOf(el) < 0) els.push(el);\n if (!fromLarge && !toLarge) {\n if (previousNavIsCollapsed) {\n if (previousNavIsLargeTransparent) {\n el.className = 'ios-swipeback-navbar-bg-large';\n }\n el.transform = progress => `translateX(${(-100 + 100 * progress) * inverter}%) translateY(calc(-1 * var(--f7-navbar-large-title-height)))`;\n } else {\n el.transform = progress => `translateX(${(-100 + 100 * progress) * inverter}%)`;\n }\n }\n if (!fromLarge && toLarge) {\n el.transform = progress => `translateX(${(-100 + 100 * progress) * inverter}%) translateY(calc(-1 * ${1 - progress} * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && !toLarge) {\n el.className = 'ios-swipeback-navbar-bg-large';\n el.transform = progress => `translateX(${(-100 + 100 * progress) * inverter}%) translateY(calc(-${progress} * var(--f7-navbar-large-title-height)))`;\n }\n if (fromLarge && toLarge) {\n el.transform = progress => `translateX(${(-100 + 100 * progress) * inverter}%)`;\n }\n return;\n }\n if ($navEl.hasClass('title-large')) return;\n const isSliding = $navEl.hasClass('sliding') || $previousNavbarEl.children('.navbar-inner.sliding').length;\n if (els.indexOf(el) < 0) els.push(el);\n if (!isSubnavbar || isSubnavbar && !isSliding) {\n el.opacity = progress => progress ** 3;\n }\n if (isSliding) {\n let transformTarget = el;\n if (isLeft && previousNavBackIconText.length && params.iosAnimateNavbarBackIcon) {\n const textEl = {\n el: previousNavBackIconText[0]\n };\n transformTarget = textEl;\n els.push(textEl);\n }\n transformTarget.transform = progress => {\n let previousNavTranslate = transformTarget.el.f7NavbarLeftOffset * (1 - progress);\n if (device.pixelRatio === 1) previousNavTranslate = Math.round(previousNavTranslate);\n if (isSubnavbar && previousNavIsLarge) {\n return `translate3d(${previousNavTranslate}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`;\n }\n return `translate3d(${previousNavTranslate}px,0,0)`;\n };\n }\n });\n return els;\n }\n function setAnimatableNavElements(_temp) {\n let {\n progress,\n reset,\n transition,\n reflow\n } = _temp === void 0 ? {} : _temp;\n const styles = ['overflow', 'transform', 'transform-origin', 'opacity'];\n if (transition === true || transition === false) {\n for (let i = 0; i < animatableNavEls.length; i += 1) {\n const el = animatableNavEls[i];\n if (el && el.el) {\n if (transition === true) el.el.classList.add('navbar-page-transitioning');\n if (transition === false) el.el.classList.remove('navbar-page-transitioning');\n }\n }\n }\n if (reflow && animatableNavEls.length && animatableNavEls[0] && animatableNavEls[0].el) {\n // eslint-disable-next-line\n animatableNavEls[0].el._clientLeft = animatableNavEls[0].el.clientLeft;\n }\n for (let i = 0; i < animatableNavEls.length; i += 1) {\n const el = animatableNavEls[i];\n if (el && el.el) {\n if (el.className && !el.classNameSet && !reset) {\n el.el.classList.add(el.className);\n el.classNameSet = true;\n }\n if (el.className && reset) {\n el.el.classList.remove(el.className);\n }\n for (let j = 0; j < styles.length; j += 1) {\n const styleProp = styles[j];\n if (el[styleProp]) {\n if (reset) {\n el.el.style[styleProp] = '';\n } else if (typeof el[styleProp] === 'function') {\n el.el.style[styleProp] = el[styleProp](progress);\n } else {\n el.el.style[styleProp] = el[styleProp];\n }\n }\n }\n }\n }\n }\n function handleTouchStart(e) {\n if (!e.isTrusted) return;\n const swipeBackEnabled = params[`${app.theme}SwipeBack`];\n if (!allowViewTouchMove || !swipeBackEnabled || isTouched || app.swipeout && app.swipeout.el || !router.allowPageChange) return;\n if ($(e.target).closest('.range-slider, .calendar-months').length > 0) return;\n if ($(e.target).closest('.page-master, .page-master-detail').length > 0 && params.masterDetailBreakpoint > 0 && app.width >= params.masterDetailBreakpoint) return;\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = now();\n dynamicNavbar = router.dynamicNavbar;\n }\n function handleTouchMove(e) {\n if (!e.isTrusted) return;\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x)) || pageX < touchesStart.x && !app.rtl || pageX > touchesStart.x && app.rtl;\n }\n if (isScrolling || e.f7PreventSwipeBack || app.preventSwipeBack) {\n isTouched = false;\n return;\n }\n if (!isMoved) {\n // Calc values during first move fired\n let cancel = false;\n const target = $(e.target);\n const swipeout = target.closest('.swipeout');\n if (swipeout.length > 0) {\n if (!app.rtl && swipeout.find('.swipeout-actions-left').length > 0) cancel = true;\n if (app.rtl && swipeout.find('.swipeout-actions-right').length > 0) cancel = true;\n }\n $currentPageEl = target.closest('.page');\n if ($currentPageEl.hasClass('no-swipeback') || target.closest('.no-swipeback, .card-opened').length > 0) cancel = true;\n $previousPageEl = $el.find('.page-previous');\n if ($previousPageEl.length > 1) {\n $previousPageEl = $previousPageEl.eq($previousPageEl.length - 1);\n }\n let notFromBorder = touchesStart.x - $el.offset().left > paramsSwipeBackActiveArea;\n viewContainerWidth = $el.width();\n if (app.rtl) {\n notFromBorder = touchesStart.x < $el.offset().left - $el[0].scrollLeft + (viewContainerWidth - paramsSwipeBackActiveArea);\n } else {\n notFromBorder = touchesStart.x - $el.offset().left > paramsSwipeBackActiveArea;\n }\n if (notFromBorder) cancel = true;\n if ($previousPageEl.length === 0 || $currentPageEl.length === 0) cancel = true;\n if (cancel) {\n isTouched = false;\n return;\n }\n if (paramsSwipeBackAnimateShadow) {\n $pageShadowEl = $currentPageEl.find('.page-shadow-effect');\n if ($pageShadowEl.length === 0) {\n $pageShadowEl = $('');\n $currentPageEl.append($pageShadowEl);\n }\n }\n if (paramsSwipeBackAnimateOpacity) {\n $pageOpacityEl = $previousPageEl.find('.page-opacity-effect');\n if ($pageOpacityEl.length === 0) {\n $pageOpacityEl = $('');\n $previousPageEl.append($pageOpacityEl);\n }\n }\n if (dynamicNavbar) {\n $currentNavbarEl = $navbarsEl.find('.navbar-current');\n $previousNavbarEl = $navbarsEl.find('.navbar-previous');\n if ($previousNavbarEl.length > 1) {\n $previousNavbarEl = $previousNavbarEl.eq($previousNavbarEl.length - 1);\n }\n animatableNavEls = animatableNavElements($previousNavbarEl, $currentNavbarEl);\n }\n\n // Close/Hide Any Picker\n if ($('.sheet.modal-in').length > 0 && app.sheet) {\n app.sheet.close($('.sheet.modal-in'));\n }\n }\n e.f7PreventSwipePanel = true;\n isMoved = true;\n app.preventSwipePanelBySwipeBack = true;\n e.preventDefault();\n\n // RTL inverter\n const inverter = app.rtl ? -1 : 1;\n\n // Touches diff\n touchesDiff = (pageX - touchesStart.x - paramsSwipeBackThreshold) * inverter;\n if (touchesDiff < 0) touchesDiff = 0;\n const percentage = Math.min(Math.max(touchesDiff / viewContainerWidth, 0), 1);\n\n // Swipe Back Callback\n const callbackData = {\n percentage,\n progress: percentage,\n currentPageEl: $currentPageEl[0],\n previousPageEl: $previousPageEl[0],\n currentNavbarEl: $currentNavbarEl[0],\n previousNavbarEl: $previousNavbarEl[0]\n };\n $el.trigger('swipeback:move', callbackData);\n router.emit('swipebackMove', callbackData);\n\n // Transform pages\n let currentPageTranslate = touchesDiff * inverter;\n let previousPageTranslate = (touchesDiff / 5 - viewContainerWidth / 5) * inverter;\n if (!app.rtl) {\n currentPageTranslate = Math.min(currentPageTranslate, viewContainerWidth);\n previousPageTranslate = Math.min(previousPageTranslate, 0);\n } else {\n currentPageTranslate = Math.max(currentPageTranslate, -viewContainerWidth);\n previousPageTranslate = Math.max(previousPageTranslate, 0);\n }\n if (device.pixelRatio === 1) {\n currentPageTranslate = Math.round(currentPageTranslate);\n previousPageTranslate = Math.round(previousPageTranslate);\n }\n router.swipeBackActive = true;\n $([$currentPageEl[0], $previousPageEl[0]]).addClass('page-swipeback-active');\n $currentPageEl.transform(`translate3d(${currentPageTranslate}px,0,0)`);\n if (paramsSwipeBackAnimateShadow) $pageShadowEl[0].style.opacity = 1 - 1 * percentage;\n if (app.theme === 'ios') {\n $previousPageEl.transform(`translate3d(${previousPageTranslate}px,0,0)`);\n }\n if (paramsSwipeBackAnimateOpacity) $pageOpacityEl[0].style.opacity = 1 - 1 * percentage;\n\n // Dynamic Navbars Animation\n if (!dynamicNavbar) return;\n setAnimatableNavElements({\n progress: percentage\n });\n }\n function handleTouchEnd(e) {\n if (!e.isTrusted) return;\n app.preventSwipePanelBySwipeBack = false;\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n router.swipeBackActive = false;\n const $pages = $([$currentPageEl[0], $previousPageEl[0]]);\n $pages.removeClass('page-swipeback-active');\n if (touchesDiff === 0) {\n $pages.transform('');\n if ($pageShadowEl && $pageShadowEl.length > 0) $pageShadowEl.remove();\n if ($pageOpacityEl && $pageOpacityEl.length > 0) $pageOpacityEl.remove();\n if (dynamicNavbar) {\n setAnimatableNavElements({\n reset: true\n });\n }\n return;\n }\n const timeDiff = now() - touchStartTime;\n let pageChanged = false;\n // Swipe back to previous page\n if (timeDiff < 300 && touchesDiff > 10 || timeDiff >= 300 && touchesDiff > viewContainerWidth / 2) {\n $currentPageEl.removeClass('page-current').addClass(`page-next${app.theme !== 'ios' ? ' page-next-on-right' : ''}`);\n $previousPageEl.removeClass('page-previous').addClass('page-current').removeAttr('aria-hidden');\n if ($pageShadowEl) $pageShadowEl[0].style.opacity = '';\n if ($pageOpacityEl) $pageOpacityEl[0].style.opacity = '';\n if (dynamicNavbar) {\n router.setNavbarPosition($currentNavbarEl, 'next');\n router.setNavbarPosition($previousNavbarEl, 'current', false);\n }\n pageChanged = true;\n }\n // Reset custom styles\n // Add transitioning class for transition-duration\n $pages.addClass('page-transitioning page-transitioning-swipeback');\n if (device.ios) {\n // eslint-disable-next-line\n $currentPageEl[0]._clientLeft = $currentPageEl[0].clientLeft;\n }\n $pages.transform('');\n if (dynamicNavbar) {\n setAnimatableNavElements({\n progress: pageChanged ? 1 : 0,\n transition: true,\n reflow: !!device.ios\n });\n }\n allowViewTouchMove = false;\n router.allowPageChange = false;\n\n // Swipe Back Callback\n const callbackData = {\n currentPageEl: $currentPageEl[0],\n previousPageEl: $previousPageEl[0],\n currentNavbarEl: $currentNavbarEl[0],\n previousNavbarEl: $previousNavbarEl[0]\n };\n if (pageChanged) {\n // Update Route\n router.currentRoute = $previousPageEl[0].f7Page.route;\n router.currentPage = $previousPageEl[0];\n\n // Page before animation callback\n router.pageCallback('beforeOut', $currentPageEl, $currentNavbarEl, 'current', 'next', {\n route: $currentPageEl[0].f7Page.route,\n swipeBack: true\n });\n router.pageCallback('beforeIn', $previousPageEl, $previousNavbarEl, 'previous', 'current', {\n route: $previousPageEl[0].f7Page.route,\n swipeBack: true\n }, $currentPageEl[0]);\n $el.trigger('swipeback:beforechange', callbackData);\n router.emit('swipebackBeforeChange', callbackData);\n } else {\n $el.trigger('swipeback:beforereset', callbackData);\n router.emit('swipebackBeforeReset', callbackData);\n }\n $currentPageEl.transitionEnd(() => {\n $pages.removeClass('page-transitioning page-transitioning-swipeback');\n if (dynamicNavbar) {\n setAnimatableNavElements({\n reset: true,\n transition: false\n });\n }\n allowViewTouchMove = true;\n router.allowPageChange = true;\n if (pageChanged) {\n // Update History\n if (router.history.length === 1) {\n router.history.unshift(router.url);\n }\n router.history.pop();\n router.saveHistory();\n\n // Update push state\n if (params.browserHistory) {\n History.back();\n }\n\n // Page after animation callback\n router.pageCallback('afterOut', $currentPageEl, $currentNavbarEl, 'current', 'next', {\n route: $currentPageEl[0].f7Page.route,\n swipeBack: true\n });\n router.pageCallback('afterIn', $previousPageEl, $previousNavbarEl, 'previous', 'current', {\n route: $previousPageEl[0].f7Page.route,\n swipeBack: true\n });\n\n // Remove Old Page\n\n router.pageCallback('beforeRemove', $currentPageEl, $currentNavbarEl, 'next', {\n swipeBack: true\n });\n router.removePage($currentPageEl);\n if (dynamicNavbar) {\n router.removeNavbar($currentNavbarEl);\n }\n $el.trigger('swipeback:afterchange', callbackData);\n router.emit('swipebackAfterChange', callbackData);\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (params.preloadPreviousPage) {\n router.back(router.history[router.history.length - 2], {\n preload: true\n });\n }\n } else {\n $el.trigger('swipeback:afterreset', callbackData);\n router.emit('swipebackAfterReset', callbackData);\n }\n if ($pageShadowEl && $pageShadowEl.length > 0) $pageShadowEl.remove();\n if ($pageOpacityEl && $pageOpacityEl.length > 0) $pageOpacityEl.remove();\n });\n }\n function attachEvents() {\n const passiveListener = app.touchEvents.start === 'touchstart' && support.passiveListener ? {\n passive: true,\n capture: false\n } : false;\n $el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n }\n function detachEvents() {\n const passiveListener = app.touchEvents.start === 'touchstart' && support.passiveListener ? {\n passive: true,\n capture: false\n } : false;\n $el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n }\n attachEvents();\n router.on('routerDestroy', detachEvents);\n}\nexport default SwipeBack;", "import { extend } from '../../shared/utils.js';\nexport default function redirect(direction, route, options) {\n const router = this;\n const r = route.route.redirect;\n const method = direction === 'forward' ? 'navigate' : 'back';\n if (options.initial && router.params.browserHistory) {\n options.replaceState = true; // eslint-disable-line\n options.history = true; // eslint-disable-line\n }\n\n function redirectResolve(redirectUrl, redirectOptions) {\n if (redirectOptions === void 0) {\n redirectOptions = {};\n }\n router.allowPageChange = true;\n router[method](redirectUrl, extend({}, options, redirectOptions));\n }\n function redirectReject() {\n router.allowPageChange = true;\n }\n if (typeof r === 'function') {\n router.allowPageChange = false;\n const redirectUrl = r.call(router, {\n router,\n to: route,\n resolve: redirectResolve,\n reject: redirectReject,\n direction,\n app: router.app\n });\n if (redirectUrl && typeof redirectUrl === 'string') {\n router.allowPageChange = true;\n return router[method](redirectUrl, options);\n }\n return router;\n }\n return router[method](r, options);\n}", "function processQueue(router, routerQueue, routeQueue, to, from, resolve, reject, direction) {\n const queue = [];\n if (Array.isArray(routeQueue)) {\n queue.push(...routeQueue);\n } else if (routeQueue && typeof routeQueue === 'function') {\n queue.push(routeQueue);\n }\n if (routerQueue) {\n if (Array.isArray(routerQueue)) {\n queue.push(...routerQueue);\n } else {\n queue.push(routerQueue);\n }\n }\n function next() {\n if (queue.length === 0) {\n resolve();\n return;\n }\n const queueItem = queue.shift();\n queueItem.call(router, {\n router,\n to,\n from,\n resolve() {\n next();\n },\n reject() {\n reject();\n },\n direction,\n app: router.app\n });\n }\n next();\n}\nexport default function processRouteQueue(to, from, resolve, reject, direction) {\n const router = this;\n function enterNextRoute() {\n if (to && to.route && (router.params.routesBeforeEnter || to.route.beforeEnter)) {\n router.allowPageChange = false;\n processQueue(router, router.params.routesBeforeEnter, to.route.beforeEnter, to, from, () => {\n router.allowPageChange = true;\n resolve();\n }, () => {\n reject();\n }, direction);\n } else {\n resolve();\n }\n }\n function leaveCurrentRoute() {\n if (from && from.route && (router.params.routesBeforeLeave || from.route.beforeLeave)) {\n router.allowPageChange = false;\n processQueue(router, router.params.routesBeforeLeave, from.route.beforeLeave, to, from, () => {\n router.allowPageChange = true;\n enterNextRoute();\n }, () => {\n reject();\n }, direction);\n } else {\n enterNextRoute();\n }\n }\n leaveCurrentRoute();\n}", "export default function appRouterCheck(router, method) {\n if (!router.view) {\n throw new Error(`Framework7: it is not allowed to use router methods on global app router. Use router methods only on related View, e.g. app.views.main.router.${method}(...)`);\n }\n}", "export default function asyncComponent(router, component, resolve, reject) {\n function resolvePromise(componentPromise) {\n componentPromise.then(c => {\n // eslint-disable-next-line\n resolve({\n component: c.default || c._default || c\n });\n }).catch(err => {\n reject();\n throw new Error(err, {\n cause: err\n });\n });\n }\n if (component instanceof Promise) {\n resolvePromise(component);\n return;\n }\n const asyncComponentResult = component.call(router);\n if (asyncComponentResult instanceof Promise) {\n resolvePromise(asyncComponentResult);\n } else {\n resolve({\n component: asyncComponentResult\n });\n }\n}", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, parseUrlQuery } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport redirect from './redirect.js';\nimport processRouteQueue from './process-route-queue.js';\nimport appRouterCheck from './app-router-check.js';\nimport asyncComponent from './async-component.js';\nfunction refreshPage(props) {\n if (props === void 0) {\n props = {};\n }\n const router = this;\n appRouterCheck(router, 'refreshPage');\n return router.navigate(router.currentRoute.url, {\n ignoreCache: true,\n reloadCurrent: true,\n props\n });\n}\nfunction forward(router, el, forwardOptions) {\n if (forwardOptions === void 0) {\n forwardOptions = {};\n }\n const document = getDocument();\n const $el = $(el);\n const app = router.app;\n const view = router.view;\n const options = extend(false, {\n animate: router.params.animate,\n browserHistory: true,\n replaceState: false,\n history: true,\n reloadCurrent: router.params.reloadPages,\n reloadPrevious: false,\n reloadAll: false,\n clearPreviousHistory: false,\n reloadDetail: router.params.reloadDetail,\n on: {}\n }, forwardOptions);\n const masterDetailEnabled = router.params.masterDetailBreakpoint > 0;\n const isMaster = masterDetailEnabled && options.route && options.route.route && (options.route.route.master === true || typeof options.route.route.master === 'function' && options.route.route.master(app, router));\n let masterPageEl;\n let otherDetailPageEl;\n let detailsInBetweenRemoved = 0;\n let currentRouteIsModal = router.currentRoute.modal;\n let modalType;\n if (!currentRouteIsModal) {\n 'popup popover sheet loginScreen actions customModal panel'.split(' ').forEach(modalLoadProp => {\n if (router.currentRoute && router.currentRoute.route && router.currentRoute.route[modalLoadProp]) {\n currentRouteIsModal = true;\n modalType = modalLoadProp;\n }\n });\n }\n if (currentRouteIsModal) {\n const modalToClose = router.currentRoute.modal || router.currentRoute.route.modalInstance || app[modalType].get();\n const previousUrl = router.history[router.history.length - 2];\n let previousRoute = router.findMatchingRoute(previousUrl);\n if (!previousRoute && previousUrl) {\n previousRoute = {\n url: previousUrl,\n path: previousUrl.split('?')[0],\n query: parseUrlQuery(previousUrl),\n route: {\n path: previousUrl.split('?')[0],\n url: previousUrl\n }\n };\n }\n router.modalRemove(modalToClose);\n }\n const dynamicNavbar = router.dynamicNavbar;\n const $viewEl = router.$el;\n const $newPage = $el;\n const reload = options.reloadPrevious || options.reloadCurrent || options.reloadAll;\n let $oldPage;\n let $navbarsEl;\n let $newNavbarEl;\n let $oldNavbarEl;\n router.allowPageChange = false;\n if ($newPage.length === 0) {\n router.allowPageChange = true;\n return router;\n }\n if ($newPage.length) {\n // Remove theme elements\n router.removeThemeElements($newPage);\n }\n if (dynamicNavbar) {\n $newNavbarEl = $newPage.children('.navbar');\n $navbarsEl = router.$navbarsEl;\n if ($newNavbarEl.length === 0 && $newPage[0] && $newPage[0].f7Page) {\n // Try from pageData\n $newNavbarEl = $newPage[0].f7Page.$navbarEl;\n }\n }\n\n // Save Keep Alive Cache\n if (options.route && options.route.route && options.route.route.keepAlive && !options.route.route.keepAliveData) {\n options.route.route.keepAliveData = {\n pageEl: $el[0]\n };\n }\n\n // Pages In View\n const $pagesInView = $viewEl.children('.page').filter(pageInView => pageInView !== $newPage[0]);\n\n // Navbars In View\n let $navbarsInView;\n if (dynamicNavbar) {\n $navbarsInView = $navbarsEl.children('.navbar').filter(navbarInView => navbarInView !== $newNavbarEl[0]);\n }\n\n // Exit when reload previous and only 1 page in view so nothing ro reload\n if (options.reloadPrevious && $pagesInView.length < 2) {\n router.allowPageChange = true;\n return router;\n }\n\n // Find Detail' master page\n let isDetail;\n let reloadDetail;\n let isDetailRoot;\n if (masterDetailEnabled && !options.reloadAll) {\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if (!masterPageEl && $pagesInView[i].classList.contains('page-master')) {\n masterPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n\n isDetail = !isMaster && masterPageEl;\n if (isDetail) {\n // Find Other Detail\n if (masterPageEl) {\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if ($pagesInView[i].classList.contains('page-master-detail')) {\n otherDetailPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n }\n }\n\n reloadDetail = isDetail && options.reloadDetail && app.width >= router.params.masterDetailBreakpoint && masterPageEl;\n }\n if (isDetail) {\n isDetailRoot = !otherDetailPageEl || reloadDetail || options.reloadAll || options.reloadCurrent;\n }\n\n // New Page\n let newPagePosition = 'next';\n if (options.reloadCurrent || options.reloadAll || reloadDetail) {\n newPagePosition = 'current';\n } else if (options.reloadPrevious) {\n newPagePosition = 'previous';\n }\n $newPage.removeClass('page-previous page-current page-next').addClass(`page-${newPagePosition}${isMaster ? ' page-master' : ''}${isDetail ? ' page-master-detail' : ''}${isDetailRoot ? ' page-master-detail-root' : ''}`).trigger('page:unstack').trigger('page:position', {\n position: newPagePosition\n });\n router.emit('pageUnstack', $newPage[0]);\n router.emit('pagePosition', $newPage[0], newPagePosition);\n if (isMaster || isDetail) {\n $newPage.trigger('page:role', {\n role: isMaster ? 'master' : 'detail',\n root: !!isDetailRoot\n });\n router.emit('pageRole', $newPage[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot\n });\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n $newNavbarEl.removeClass('navbar-previous navbar-current navbar-next').addClass(`navbar-${newPagePosition}${isMaster ? ' navbar-master' : ''}${isDetail ? ' navbar-master-detail' : ''}${isDetailRoot ? ' navbar-master-detail-root' : ''}`);\n $newNavbarEl.trigger('navbar:position', {\n position: newPagePosition\n });\n router.emit('navbarPosition', $newNavbarEl[0], newPagePosition);\n if (isMaster || isDetail) {\n router.emit('navbarRole', $newNavbarEl[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot\n });\n }\n }\n\n // Find Old Page\n if (options.reloadCurrent || reloadDetail) {\n if (reloadDetail) {\n $oldPage = $pagesInView.filter(pageEl => !pageEl.classList.contains('page-master'));\n if (dynamicNavbar) {\n $oldNavbarEl = $($oldPage.map(pageEl => app.navbar.getElByPage(pageEl)));\n }\n if ($oldPage.length > 1 && masterPageEl) {\n detailsInBetweenRemoved = $oldPage.length - 1;\n $(masterPageEl).removeClass('page-master-stacked').trigger('page:masterunstack');\n router.emit('pageMasterUnstack', masterPageEl);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage(masterPageEl)).removeClass('navbar-master-stacked');\n router.emit('navbarMasterUnstack', app.navbar.getElByPage(masterPageEl));\n }\n }\n } else {\n $oldPage = $pagesInView.eq($pagesInView.length - 1);\n if (dynamicNavbar) {\n $oldNavbarEl = $(app.navbar.getElByPage($oldPage));\n }\n }\n } else if (options.reloadPrevious) {\n $oldPage = $pagesInView.eq($pagesInView.length - 2);\n if (dynamicNavbar) {\n // $oldNavbarEl = $navbarsInView.eq($pagesInView.length - 2);\n $oldNavbarEl = $(app.navbar.getElByPage($oldPage));\n }\n } else if (options.reloadAll) {\n $oldPage = $pagesInView.filter(pageEl => pageEl !== $newPage[0]);\n if (dynamicNavbar) {\n $oldNavbarEl = $navbarsInView.filter(navbarEl => navbarEl !== $newNavbarEl[0]);\n }\n } else {\n let removedPageEls = [];\n let removedNavbarEls = [];\n if ($pagesInView.length > 1) {\n let i = 0;\n for (i = 0; i < $pagesInView.length - 1; i += 1) {\n if (masterPageEl && $pagesInView[i] === masterPageEl) {\n $pagesInView.eq(i).addClass('page-master-stacked');\n $pagesInView.eq(i).trigger('page:masterstack');\n router.emit('pageMasterStack', $pagesInView[i]);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage(masterPageEl)).addClass('navbar-master-stacked');\n router.emit('navbarMasterStack', app.navbar.getElByPage(masterPageEl));\n }\n continue; // eslint-disable-line\n }\n\n const oldNavbarEl = app.navbar.getElByPage($pagesInView.eq(i));\n\n // Page remove event\n removedPageEls.push($pagesInView[i]);\n router.pageCallback('beforeRemove', $pagesInView[i], $navbarsInView && $navbarsInView[i], 'previous', undefined, options);\n router.removePage($pagesInView[i]);\n if (dynamicNavbar && oldNavbarEl) {\n removedNavbarEls.push(oldNavbarEl);\n router.removeNavbar(oldNavbarEl);\n }\n }\n }\n $oldPage = $viewEl.children('.page').filter(pageEl => pageEl !== $newPage[0] && removedPageEls.indexOf(pageEl) < 0);\n if (dynamicNavbar) {\n $oldNavbarEl = $navbarsEl.children('.navbar').filter(navbarEl => navbarEl !== $newNavbarEl[0] && removedNavbarEls.indexOf(removedNavbarEls) < 0);\n }\n removedPageEls = [];\n removedNavbarEls = [];\n }\n if (isDetail && !options.reloadAll) {\n if ($oldPage.length > 1 || reloadDetail) {\n $oldPage = $oldPage.filter(pageEl => !pageEl.classList.contains('page-master'));\n }\n if ($oldNavbarEl && ($oldNavbarEl.length > 1 || reloadDetail)) {\n $oldNavbarEl = $oldNavbarEl.filter(navbarEl => !navbarEl.classList.contains('navbar-master'));\n }\n }\n\n // Push State\n if (router.params.browserHistory && (options.browserHistory || options.replaceState) && !options.reloadPrevious) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History[options.reloadCurrent || reloadDetail && otherDetailPageEl || options.reloadAll || options.replaceState ? 'replace' : 'push'](view.id, {\n url: options.route.url\n }, browserHistoryRoot + router.params.browserHistorySeparator + options.route.url);\n }\n if (!options.reloadPrevious) {\n // Current Page & Navbar\n router.currentPageEl = $newPage[0];\n if (dynamicNavbar && $newNavbarEl.length) {\n router.currentNavbarEl = $newNavbarEl[0];\n } else {\n delete router.currentNavbarEl;\n }\n\n // Current Route\n router.currentRoute = options.route;\n }\n\n // Update router history\n const url = options.route.url;\n if (options.history) {\n if (((options.reloadCurrent || reloadDetail && otherDetailPageEl) && router.history.length) > 0 || options.replaceState) {\n if (reloadDetail && detailsInBetweenRemoved > 0) {\n router.history = router.history.slice(0, router.history.length - detailsInBetweenRemoved);\n router.propsHistory = router.propsHistory.slice(0, router.propsHistory.length - detailsInBetweenRemoved);\n }\n router.history[router.history.length - (options.reloadPrevious ? 2 : 1)] = url;\n router.propsHistory[router.propsHistory.length - (options.reloadPrevious ? 2 : 1)] = options.props || {};\n } else if (options.reloadPrevious) {\n router.history[router.history.length - 2] = url;\n router.propsHistory[router.propsHistory.length - 2] = options.props || {};\n } else if (options.reloadAll) {\n router.history = [url];\n router.propsHistory = [options.props || {}];\n } else {\n router.history.push(url);\n router.propsHistory.push(options.props || {});\n }\n }\n router.saveHistory();\n\n // Insert new page and navbar\n const newPageInDom = $newPage.parents(document).length > 0;\n const f7Component = $newPage[0].f7Component;\n if (options.reloadPrevious) {\n if (f7Component && !newPageInDom) {\n f7Component.mount(componentEl => {\n $(componentEl).insertBefore($oldPage);\n });\n } else {\n $newPage.insertBefore($oldPage);\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n if ($oldNavbarEl.length) {\n $newNavbarEl.insertBefore($oldNavbarEl);\n } else {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl);\n }\n }\n } else {\n if ($oldPage.next('.page')[0] !== $newPage[0]) {\n if (f7Component && !newPageInDom) {\n f7Component.mount(componentEl => {\n $viewEl.append(componentEl);\n });\n } else {\n $viewEl.append($newPage[0]);\n }\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl[0]);\n }\n }\n if (!newPageInDom) {\n router.pageCallback('mounted', $newPage, $newNavbarEl, newPagePosition, reload ? newPagePosition : 'current', options, $oldPage);\n } else if (options.route && options.route.route && options.route.route.keepAlive && !$newPage[0].f7PageMounted) {\n $newPage[0].f7PageMounted = true;\n router.pageCallback('mounted', $newPage, $newNavbarEl, newPagePosition, reload ? newPagePosition : 'current', options, $oldPage);\n }\n\n // Remove old page\n if ((options.reloadCurrent || reloadDetail) && $oldPage.length > 0) {\n // Page remove event\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n } else if (options.reloadAll) {\n $oldPage.each((pageEl, index) => {\n const $oldPageEl = $(pageEl);\n const $oldNavbarElEl = $(app.navbar.getElByPage($oldPageEl));\n\n // Page remove event\n if ($oldPageEl.hasClass('page-current')) {\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options);\n }\n router.pageCallback('beforeRemove', $oldPageEl, $oldNavbarEl && $oldNavbarEl.eq(index), 'previous', undefined, options);\n router.removePage($oldPageEl);\n if (dynamicNavbar && $oldNavbarElEl.length) {\n router.removeNavbar($oldNavbarElEl);\n }\n });\n } else if (options.reloadPrevious) {\n // Page remove event\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n\n // Load Tab\n if (options.route.route.tab) {\n router.tabLoad(options.route.route.tab, extend({}, options, {\n history: false,\n browserHistory: false\n }));\n }\n\n // Check master detail\n if (masterDetailEnabled) {\n view.checkMasterDetailBreakpoint();\n }\n\n // Page init and before init events\n router.pageCallback('init', $newPage, $newNavbarEl, newPagePosition, reload ? newPagePosition : 'current', options, $oldPage);\n if (options.reloadCurrent || options.reloadAll || reloadDetail) {\n router.allowPageChange = true;\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, newPagePosition, 'current', options);\n $newPage.removeAttr('aria-hidden');\n if (dynamicNavbar && $newNavbarEl) {\n $newNavbarEl.removeAttr('aria-hidden');\n }\n router.pageCallback('afterIn', $newPage, $newNavbarEl, newPagePosition, 'current', options);\n if (options.reloadCurrent && options.clearPreviousHistory) router.clearPreviousHistory();\n if (reloadDetail) {\n router.setPagePosition($(masterPageEl), 'previous');\n if (masterPageEl.f7Page && masterPageEl.f7Page.navbarEl) {\n router.setNavbarPosition($(masterPageEl.f7Page.navbarEl), 'previous');\n }\n }\n return router;\n }\n if (options.reloadPrevious) {\n router.allowPageChange = true;\n return router;\n }\n\n // Before animation event\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', 'previous', options);\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'next', 'current', options);\n\n // Animation\n function afterAnimation() {\n router.setPagePosition($newPage, 'current', false);\n router.setPagePosition($oldPage, 'previous', !$oldPage.hasClass('page-master'));\n if (dynamicNavbar) {\n router.setNavbarPosition($newNavbarEl, 'current', false);\n router.setNavbarPosition($oldNavbarEl, 'previous', !$oldNavbarEl.hasClass('navbar-master'));\n }\n // After animation event\n router.allowPageChange = true;\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', 'previous', options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'next', 'current', options);\n let keepOldPage = (router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`]) && !isMaster;\n if (!keepOldPage) {\n if ($newPage.hasClass('smart-select-page') || $newPage.hasClass('photo-browser-page') || $newPage.hasClass('autocomplete-page') || $newPage.hasClass('color-picker-page')) {\n keepOldPage = true;\n }\n }\n if (!keepOldPage) {\n if (!($newPage.attr('data-name') && $newPage.attr('data-name') === 'smart-select-page')) {\n // Remove event\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n }\n }\n if (options.clearPreviousHistory) router.clearPreviousHistory();\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (router.params.browserHistory) {\n History.clearRouterQueue();\n }\n }\n function setPositionClasses() {\n router.setPagePosition($oldPage, 'current', false);\n router.setPagePosition($newPage, 'next', false);\n if (dynamicNavbar) {\n router.setNavbarPosition($oldNavbarEl, 'current', false);\n router.setNavbarPosition($newNavbarEl, 'next', false);\n }\n }\n if (options.animate && !(isMaster && app.width >= router.params.masterDetailBreakpoint)) {\n const delay = router.params[`${router.app.theme}PageLoadDelay`];\n let transition = router.params.transition;\n if (options.transition) transition = options.transition;\n if (!transition && router.currentRoute && router.currentRoute.route) {\n transition = router.currentRoute.route.transition;\n }\n if (!transition && router.currentRoute && router.currentRoute.route.options) {\n transition = router.currentRoute.route.options.transition;\n }\n if (transition) {\n $newPage[0].f7PageTransition = transition;\n }\n if (delay) {\n setTimeout(() => {\n setPositionClasses();\n router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'forward', transition, () => {\n afterAnimation();\n });\n }, delay);\n } else {\n setPositionClasses();\n router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'forward', transition, () => {\n afterAnimation();\n });\n }\n } else {\n afterAnimation();\n }\n return router;\n}\nfunction load(router, loadParams, loadOptions, ignorePageChange) {\n if (loadParams === void 0) {\n loadParams = {};\n }\n if (loadOptions === void 0) {\n loadOptions = {};\n }\n if (!router.allowPageChange && !ignorePageChange) return router;\n const params = loadParams;\n const options = loadOptions;\n const {\n url,\n content,\n el,\n pageName,\n component,\n componentUrl\n } = params;\n if (!options.reloadCurrent && options.route && options.route.route && options.route.route.parentPath && router.currentRoute.route && router.currentRoute.route.parentPath === options.route.route.parentPath) {\n // Do something nested\n if (options.route.url === router.url) {\n router.allowPageChange = true;\n return false;\n }\n // Check for same params\n let sameParams = Object.keys(options.route.params).length === Object.keys(router.currentRoute.params).length;\n if (sameParams) {\n // Check for equal params name\n Object.keys(options.route.params).forEach(paramName => {\n if (!(paramName in router.currentRoute.params) || router.currentRoute.params[paramName] !== options.route.params[paramName]) {\n sameParams = false;\n }\n });\n }\n if (sameParams) {\n if (options.route.route.tab) {\n return router.tabLoad(options.route.route.tab, options);\n }\n return false;\n }\n if (!sameParams && options.route.route.tab && router.currentRoute.route.tab && router.currentRoute.parentPath === options.route.parentPath) {\n return router.tabLoad(options.route.route.tab, options);\n }\n }\n if (options.route && options.route.url && router.url === options.route.url && !(options.reloadCurrent || options.reloadPrevious) && !router.params.allowDuplicateUrls) {\n router.allowPageChange = true;\n return false;\n }\n if (!options.route && url) {\n options.route = router.parseRouteUrl(url);\n extend(options.route, {\n route: {\n url,\n path: url\n }\n });\n }\n\n // Component Callbacks\n function resolve(pageEl, newOptions) {\n return forward(router, pageEl, extend(options, newOptions));\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n if (url || componentUrl || component) {\n router.allowPageChange = false;\n }\n\n // Proceed\n if (content) {\n forward(router, router.getPageEl(content), options);\n } else if (el) {\n // Load page from specified HTMLElement or by page name in pages container\n forward(router, router.getPageEl(el), options);\n } else if (pageName) {\n // Load page by page name in pages container\n forward(router, router.$el.children(`.page[data-name=\"${pageName}\"]`).eq(0), options);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.pageComponentLoader({\n routerEl: router.el,\n component,\n componentUrl,\n options,\n resolve,\n reject\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router.xhrRequest(url, options).then(pageContent => {\n forward(router, router.getPageEl(pageContent), options);\n }).catch(() => {\n router.allowPageChange = true;\n });\n }\n return router;\n}\nfunction navigate(navigateParams, navigateOptions) {\n if (navigateOptions === void 0) {\n navigateOptions = {};\n }\n const router = this;\n if (router.swipeBackActive) return router;\n let url;\n let createRoute;\n let name;\n let path;\n let query;\n let params;\n let route;\n if (typeof navigateParams === 'string') {\n url = navigateParams;\n } else {\n url = navigateParams.url;\n createRoute = navigateParams.route;\n name = navigateParams.name;\n path = navigateParams.path;\n query = navigateParams.query;\n params = navigateParams.params;\n }\n if (name || path) {\n url = router.generateUrl({\n path,\n name,\n params,\n query\n });\n if (url) {\n return router.navigate(url, navigateOptions);\n }\n return router;\n }\n const app = router.app;\n appRouterCheck(router, 'navigate');\n if (url === '#' || url === '') {\n return router;\n }\n let navigateUrl = url.replace('./', '');\n if (navigateUrl[0] !== '/' && navigateUrl.indexOf('#') !== 0) {\n const currentPath = router.currentRoute.parentPath || router.currentRoute.path;\n navigateUrl = ((currentPath ? `${currentPath}/` : '/') + navigateUrl).replace('///', '/').replace('//', '/');\n }\n if (createRoute) {\n route = extend(router.parseRouteUrl(navigateUrl), {\n route: extend({}, createRoute)\n });\n } else {\n route = router.findMatchingRoute(navigateUrl);\n }\n if (!route) {\n return router;\n }\n if (route.route && route.route.viewName) {\n const anotherViewName = route.route.viewName;\n const anotherView = app.views[anotherViewName];\n if (!anotherView) {\n throw new Error(`Framework7: There is no View with \"${anotherViewName}\" name that was specified in this route`);\n }\n if (anotherView !== router.view) {\n return anotherView.router.navigate(navigateParams, navigateOptions);\n }\n }\n if (route.route.redirect) {\n return redirect.call(router, 'forward', route, navigateOptions);\n }\n const options = {};\n if (route.route.options) {\n extend(options, route.route.options, navigateOptions);\n } else {\n extend(options, navigateOptions);\n }\n if (options.openIn && (!router.params.ignoreOpenIn || router.params.ignoreOpenIn && router.history.length > 0)) {\n return router.openIn(router, navigateUrl, options);\n }\n options.route = route;\n function resolve() {\n let routerLoaded = false;\n 'popup popover sheet loginScreen actions customModal panel'.split(' ').forEach(modalLoadProp => {\n if (route.route[modalLoadProp] && !routerLoaded) {\n routerLoaded = true;\n router.modalLoad(modalLoadProp, route, options, 'forward');\n }\n });\n if (route.route.keepAlive && route.route.keepAliveData) {\n load(router, {\n el: route.route.keepAliveData.pageEl\n }, options, false);\n routerLoaded = true;\n }\n 'url content component pageName el componentUrl'.split(' ').forEach(pageLoadProp => {\n if (route.route[pageLoadProp] && !routerLoaded) {\n routerLoaded = true;\n load(router, {\n [pageLoadProp]: route.route[pageLoadProp]\n }, options, false);\n }\n });\n if (routerLoaded) return;\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n router.allowPageChange = false;\n let resolvedAsModal = false;\n 'popup popover sheet loginScreen actions customModal panel'.split(' ').forEach(modalLoadProp => {\n if (resolveParams[modalLoadProp]) {\n resolvedAsModal = true;\n const modalRoute = extend({}, route, {\n route: resolveParams\n });\n router.allowPageChange = true;\n router.modalLoad(modalLoadProp, modalRoute, extend(options, resolveOptions), 'forward');\n }\n });\n if (resolvedAsModal) return;\n load(router, resolveParams, extend(options, resolveOptions), true);\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (route.route.async) {\n router.allowPageChange = false;\n route.route.async.call(router, {\n router,\n to: options.route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction: 'forward',\n app\n });\n }\n if (route.route.asyncComponent) {\n asyncComponent(router, route.route.asyncComponent, asyncResolve, asyncReject);\n }\n }\n function reject() {\n router.allowPageChange = true;\n }\n if (router.params.masterDetailBreakpoint > 0 && route.route.masterRoute) {\n // load detail route\n let preloadMaster = true;\n let masterLoaded = false;\n if (router.currentRoute && router.currentRoute.route) {\n if ((router.currentRoute.route.master === true || typeof router.currentRoute.route.master === 'function' && router.currentRoute.route.master(app, router)) && (router.currentRoute.route === route.route.masterRoute || router.currentRoute.route.path === route.route.masterRoute.path)) {\n preloadMaster = false;\n }\n if (router.currentRoute.route.masterRoute && (router.currentRoute.route.masterRoute === route.route.masterRoute || router.currentRoute.route.masterRoute.path === route.route.masterRoute.path)) {\n preloadMaster = false;\n masterLoaded = true;\n }\n }\n if (preloadMaster || masterLoaded && navigateOptions.reloadAll) {\n router.navigate({\n path: route.route.masterRoute.path,\n params: route.params || {}\n }, {\n animate: false,\n reloadAll: navigateOptions.reloadAll,\n reloadCurrent: navigateOptions.reloadCurrent,\n reloadPrevious: navigateOptions.reloadPrevious,\n browserHistory: !navigateOptions.initial,\n history: !navigateOptions.initial,\n once: {\n pageAfterIn() {\n router.navigate(navigateParams, extend({}, navigateOptions, {\n animate: false,\n reloadAll: false,\n reloadCurrent: false,\n reloadPrevious: false,\n history: !navigateOptions.initial,\n browserHistory: !navigateOptions.initial\n }));\n }\n }\n });\n return router;\n }\n }\n processRouteQueue.call(router, route, router.currentRoute, () => {\n if (route.route.modules) {\n app.loadModules(Array.isArray(route.route.modules) ? route.route.modules : [route.route.modules]).then(() => {\n resolve();\n }).catch(() => {\n reject();\n });\n } else {\n resolve();\n }\n }, () => {\n reject();\n }, 'forward');\n\n // Return Router\n return router;\n}\nexport { refreshPage, navigate };", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport asyncComponent from './async-component.js';\nfunction tabLoad(tabRoute, loadOptions) {\n if (loadOptions === void 0) {\n loadOptions = {};\n }\n const router = this;\n const options = extend({\n animate: router.params.animate,\n browserHistory: true,\n history: true,\n parentPageEl: null,\n preload: false,\n on: {}\n }, loadOptions);\n let currentRoute;\n let previousRoute;\n if (options.route) {\n // Set Route\n if (!options.preload && options.route !== router.currentRoute) {\n previousRoute = router.previousRoute;\n router.currentRoute = options.route;\n }\n if (options.preload) {\n currentRoute = options.route;\n previousRoute = router.currentRoute;\n } else {\n currentRoute = router.currentRoute;\n if (!previousRoute) previousRoute = router.previousRoute;\n }\n\n // Update Browser History\n if (router.params.browserHistory && options.browserHistory && !options.reloadPrevious) {\n History[router.params.browserHistoryTabs](router.view.id, {\n url: options.route.url\n }, (router.params.browserHistoryRoot || '') + router.params.browserHistorySeparator + options.route.url);\n }\n\n // Update Router History\n if (options.history) {\n router.history[Math.max(router.history.length - 1, 0)] = options.route.url;\n router.saveHistory();\n }\n }\n\n // Show Tab\n const $parentPageEl = $(options.parentPageEl || router.currentPageEl);\n let tabEl;\n if ($parentPageEl.length && $parentPageEl.find(`#${tabRoute.id}`).length) {\n tabEl = $parentPageEl.find(`#${tabRoute.id}`).eq(0);\n } else if (router.view.selector) {\n tabEl = `${router.view.selector} #${tabRoute.id}`;\n } else {\n tabEl = `#${tabRoute.id}`;\n }\n const tabShowResult = router.app.tab.show({\n tabEl,\n animate: options.animate,\n tabRoute: options.route\n });\n const {\n $newTabEl,\n $oldTabEl,\n animated,\n onTabsChanged\n } = tabShowResult;\n if ($newTabEl && $newTabEl.parents('.page').length > 0 && options.route) {\n const tabParentPageData = $newTabEl.parents('.page')[0].f7Page;\n if (tabParentPageData && options.route) {\n tabParentPageData.route = options.route;\n }\n }\n\n // Tab Content Loaded\n function onTabLoaded(contentEl) {\n // Remove theme elements\n router.removeThemeElements($newTabEl);\n let tabEventTarget = $newTabEl;\n if (typeof contentEl !== 'string') tabEventTarget = $(contentEl);\n tabEventTarget.trigger('tab:init tab:mounted', tabRoute);\n router.emit('tabInit tabMounted', $newTabEl[0], tabRoute);\n if ($oldTabEl && $oldTabEl.length) {\n if (animated) {\n onTabsChanged(() => {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (router.params.unloadTabContent) {\n router.tabRemove($oldTabEl, $newTabEl, tabRoute);\n }\n });\n } else {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n if (router.params.unloadTabContent) {\n router.tabRemove($oldTabEl, $newTabEl, tabRoute);\n }\n }\n }\n }\n if ($newTabEl[0].f7RouterTabLoaded) {\n if (!$oldTabEl || !$oldTabEl.length) return router;\n if (animated) {\n onTabsChanged(() => {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n });\n } else {\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n }\n return router;\n }\n\n // Load Tab Content\n function loadTab(loadTabParams, loadTabOptions) {\n // Load Tab Props\n const {\n url,\n content,\n el,\n component,\n componentUrl\n } = loadTabParams;\n // Component/Template Callbacks\n function resolve(contentEl) {\n router.allowPageChange = true;\n if (!contentEl) return;\n if (typeof contentEl === 'string') {\n $newTabEl.html(contentEl);\n } else {\n $newTabEl.html('');\n if (contentEl.f7Component) {\n contentEl.f7Component.mount(componentEl => {\n $newTabEl.append(componentEl);\n });\n } else {\n $newTabEl.append(contentEl);\n }\n }\n $newTabEl[0].f7RouterTabLoaded = true;\n onTabLoaded(contentEl);\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n if (content) {\n resolve(content);\n } else if (el) {\n resolve(el);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.tabComponentLoader({\n tabEl: $newTabEl[0],\n component,\n componentUrl,\n options: loadTabOptions,\n resolve,\n reject\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router.xhrRequest(url, loadTabOptions).then(tabContent => {\n resolve(tabContent);\n }).catch(() => {\n router.allowPageChange = true;\n });\n }\n }\n let hasContentLoadProp;\n 'url content component el componentUrl'.split(' ').forEach(tabLoadProp => {\n if (tabRoute[tabLoadProp]) {\n hasContentLoadProp = true;\n loadTab({\n [tabLoadProp]: tabRoute[tabLoadProp]\n }, options);\n }\n });\n\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n loadTab(resolveParams, extend(options, resolveOptions));\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (tabRoute.async) {\n tabRoute.async.call(router, {\n router,\n to: currentRoute,\n from: previousRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n app: router.app\n });\n } else if (tabRoute.asyncComponent) {\n asyncComponent(router, tabRoute.asyncComponent, asyncResolve, asyncReject);\n } else if (!hasContentLoadProp) {\n router.allowPageChange = true;\n }\n return router;\n}\nfunction tabRemove($oldTabEl, $newTabEl, tabRoute) {\n const router = this;\n let hasTabComponentChild;\n if ($oldTabEl[0]) {\n $oldTabEl[0].f7RouterTabLoaded = false;\n delete $oldTabEl[0].f7RouterTabLoaded;\n }\n $oldTabEl.children().each(tabChild => {\n if (tabChild.f7Component) {\n hasTabComponentChild = true;\n $(tabChild).trigger('tab:beforeremove', tabRoute);\n tabChild.f7Component.destroy();\n }\n });\n if (!hasTabComponentChild) {\n $oldTabEl.trigger('tab:beforeremove', tabRoute);\n }\n router.emit('tabBeforeRemove', $oldTabEl[0], $newTabEl[0], tabRoute);\n router.removeTabContent($oldTabEl[0], tabRoute);\n}\nexport { tabLoad, tabRemove };", "import { extend, nextTick } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport asyncComponent from './async-component.js';\nfunction modalLoad(modalType, route, loadOptions, direction) {\n if (loadOptions === void 0) {\n loadOptions = {};\n }\n const router = this;\n const app = router.app;\n const isPanel = modalType === 'panel';\n const modalOrPanel = isPanel ? 'panel' : 'modal';\n const options = extend({\n animate: router.params.animate,\n browserHistory: true,\n history: true,\n on: {},\n once: {}\n }, loadOptions);\n const modalParams = extend({}, route.route[modalType]);\n const modalRoute = route.route;\n const routeCallback = (modal, name) => {\n const {\n on,\n once\n } = options;\n let callback;\n if (name === 'open') {\n callback = on.modalOpen || once.modalOpen || on.panelOpen || once.panelOpen;\n }\n if (name === 'close') {\n callback = on.modalClose || once.modalClose || on.panelClose || once.panelClose;\n }\n if (name === 'closed') {\n callback = on.modalClosed || once.modalClosed || on.panelClosed || once.panelClosed;\n }\n if (callback) callback(modal);\n };\n function onModalLoaded() {\n // Create Modal\n const modal = app[modalType].create(modalParams);\n modalRoute.modalInstance = modal;\n const hasEl = modal.el;\n function closeOnSwipeBack() {\n modal.close();\n }\n modal.on(`${modalOrPanel}Open`, () => {\n if (!hasEl) {\n // Remove theme elements\n router.removeThemeElements(modal.el);\n\n // Emit events\n modal.$el.trigger(`${modalType.toLowerCase()}:init ${modalType.toLowerCase()}:mounted`, route, modal);\n router.emit(`${!isPanel ? 'modalInit' : ''} ${modalType}Init ${modalType}Mounted`, modal.el, route, modal);\n }\n router.once('swipeBackMove', closeOnSwipeBack);\n routeCallback(modal, 'open');\n });\n modal.on(`${modalOrPanel}Close`, () => {\n router.off('swipeBackMove', closeOnSwipeBack);\n if (!modal.closeByRouter) {\n router.back();\n }\n routeCallback(modal, 'close');\n });\n modal.on(`${modalOrPanel}Closed`, () => {\n modal.$el.trigger(`${modalType.toLowerCase()}:beforeremove`, route, modal);\n modal.emit(`${!isPanel ? 'modalBeforeRemove ' : ''}${modalType}BeforeRemove`, modal.el, route, modal);\n const modalComponent = modal.el.f7Component;\n routeCallback(modal, 'closed');\n if (modalComponent) {\n modalComponent.destroy();\n }\n nextTick(() => {\n if (modalComponent || modalParams.component || modalParams.asyncComponent || modalParams.async) {\n router.removeModal(modal.el);\n }\n modal.destroy();\n delete modal.route;\n delete modalRoute.modalInstance;\n });\n });\n if (options.route) {\n // Update Browser History\n if (router.params.browserHistory && options.browserHistory) {\n History.push(router.view.id, {\n url: options.route.url,\n modal: modalType\n }, (router.params.browserHistoryRoot || '') + router.params.browserHistorySeparator + options.route.url);\n }\n\n // Set Route\n if (options.route !== router.currentRoute) {\n modal.route = extend(options.route, {\n modal\n });\n router.currentRoute = modal.route;\n }\n\n // Update Router History\n if (options.history && !options.reloadCurrent) {\n router.history.push(options.route.url);\n router.saveHistory();\n }\n }\n if (hasEl) {\n // Remove theme elements\n router.removeThemeElements(modal.el);\n\n // Emit events\n modal.$el.trigger(`${modalType.toLowerCase()}:init ${modalType.toLowerCase()}:mounted`, route, modal);\n router.emit(`${modalOrPanel}Init ${modalType}Init ${modalType}Mounted`, modal.el, route, modal);\n }\n\n // Open\n modal.open(options.animate === false || options.animate === true ? options.animate : undefined);\n }\n\n // Load Modal Content\n function loadModal(loadModalParams, loadModalOptions) {\n // Load Modal Props\n const {\n url,\n content,\n component,\n componentUrl\n } = loadModalParams;\n\n // Component/Template Callbacks\n function resolve(contentEl) {\n if (contentEl) {\n if (typeof contentEl === 'string') {\n modalParams.content = contentEl;\n } else if (contentEl.f7Component) {\n contentEl.f7Component.mount(componentEl => {\n modalParams.el = componentEl;\n app.$el.append(componentEl);\n });\n } else {\n modalParams.el = contentEl;\n }\n onModalLoaded();\n }\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n if (content) {\n resolve(content);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.modalComponentLoader({\n rootEl: app.el,\n component,\n componentUrl,\n options: loadModalOptions,\n resolve,\n reject\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router.xhrRequest(url, loadModalOptions).then(modalContent => {\n modalParams.content = modalContent;\n onModalLoaded();\n }).catch(() => {\n router.allowPageChange = true;\n });\n } else {\n onModalLoaded();\n }\n }\n let foundLoadProp;\n 'url content component el componentUrl template'.split(' ').forEach(modalLoadProp => {\n if (modalParams[modalLoadProp] && !foundLoadProp) {\n foundLoadProp = true;\n loadModal({\n [modalLoadProp]: modalParams[modalLoadProp]\n }, options);\n }\n });\n if (!foundLoadProp && modalType === 'actions') {\n onModalLoaded();\n }\n\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n loadModal(resolveParams, extend(options, resolveOptions));\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (modalParams.async) {\n modalParams.async.call(router, {\n router,\n to: options.route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction,\n app\n });\n }\n if (modalParams.asyncComponent) {\n asyncComponent(router, modalParams.asyncComponent, asyncResolve, asyncReject);\n }\n return router;\n}\nfunction modalRemove(modal) {\n extend(modal, {\n closeByRouter: true\n });\n modal.close();\n}\nexport { modalLoad, modalRemove };", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, parseUrlQuery } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport History from '../../shared/history.js';\nimport redirect from './redirect.js';\nimport processRouteQueue from './process-route-queue.js';\nimport appRouterCheck from './app-router-check.js';\nimport asyncComponent from './async-component.js';\nfunction backward(router, el, backwardOptions) {\n const device = getDevice();\n const document = getDocument();\n const $el = $(el);\n const app = router.app;\n const view = router.view;\n const options = extend(false, {\n animate: router.params.animate,\n browserHistory: true,\n replaceState: false\n }, backwardOptions);\n const masterDetailEnabled = router.params.masterDetailBreakpoint > 0;\n const isMaster = masterDetailEnabled && options.route && options.route.route && (options.route.route.master === true || typeof options.route.route.master === 'function' && options.route.route.master(app, router));\n let masterPageEl;\n let masterPageRemoved;\n const dynamicNavbar = router.dynamicNavbar;\n const $newPage = $el;\n const $oldPage = router.$el.children('.page-current');\n const initialPreload = $oldPage.length === 0 && options.preload;\n const currentIsMaster = masterDetailEnabled && $oldPage.hasClass('page-master');\n if ($newPage.length) {\n // Remove theme elements\n router.removeThemeElements($newPage);\n }\n let $navbarsEl;\n let $newNavbarEl;\n let $oldNavbarEl;\n if (dynamicNavbar) {\n $newNavbarEl = $newPage.children('.navbar');\n $navbarsEl = router.$navbarsEl;\n if ($newNavbarEl.length === 0 && $newPage[0] && $newPage[0].f7Page) {\n // Try from pageData\n $newNavbarEl = $newPage[0].f7Page.$navbarEl;\n }\n $oldNavbarEl = $navbarsEl.find('.navbar-current');\n }\n router.allowPageChange = false;\n if ($newPage.length === 0 || $oldPage.length === 0 && !options.preload) {\n router.allowPageChange = true;\n return router;\n }\n\n // Remove theme elements\n router.removeThemeElements($newPage);\n\n // Save Keep Alive Cache\n if (options.route && options.route.route && options.route.route.keepAlive && !options.route.route.keepAliveData) {\n options.route.route.keepAliveData = {\n pageEl: $el[0]\n };\n }\n\n // Pages In View\n let isDetail;\n let isDetailRoot;\n if (masterDetailEnabled) {\n const $pagesInView = router.$el.children('.page').filter(pageInView => pageInView !== $newPage[0]);\n\n // Find Detail' master page\n for (let i = 0; i < $pagesInView.length; i += 1) {\n if (!masterPageEl && $pagesInView[i].classList.contains('page-master')) {\n masterPageEl = $pagesInView[i];\n continue; // eslint-disable-line\n }\n }\n\n isDetail = !isMaster && masterPageEl && router.history.indexOf(options.route.url) > router.history.indexOf(masterPageEl.f7Page.route.url);\n if (!isDetail && !isMaster && masterPageEl && masterPageEl.f7Page && options.route.route.masterRoute) {\n isDetail = options.route.route.masterRoute.path === masterPageEl.f7Page.route.route.path;\n }\n }\n if (isDetail && masterPageEl && masterPageEl.f7Page) {\n isDetailRoot = router.history.indexOf(options.route.url) - router.history.indexOf(masterPageEl.f7Page.route.url) === 1;\n }\n\n // New Page\n $newPage.addClass(`page-${initialPreload ? 'current' : 'previous'}${isMaster ? ' page-master' : ''}${isDetail ? ' page-master-detail' : ''}${isDetailRoot ? ' page-master-detail-root' : ''}`).removeAttr('aria-hidden').trigger('page:unstack').trigger('page:position', {\n position: initialPreload ? 'current' : 'previous'\n });\n router.emit('pageUnstack', $newPage[0]);\n router.emit('pagePosition', $newPage[0], initialPreload ? 'current' : 'previous');\n if (isMaster || isDetail) {\n $newPage.trigger('page:role', {\n role: isMaster ? 'master' : 'detail',\n root: !!isDetailRoot\n });\n router.emit('pageRole', $newPage[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot\n });\n }\n if (dynamicNavbar && $newNavbarEl.length > 0) {\n $newNavbarEl.addClass(`navbar-${initialPreload ? 'current' : 'previous'}${isMaster ? ' navbar-master' : ''}${isDetail ? ' navbar-master-detail' : ''}${isDetailRoot ? ' navbar-master-detail-root' : ''}`).removeAttr('aria-hidden');\n $newNavbarEl.trigger('navbar:position', {\n position: initialPreload ? 'current' : 'previous'\n });\n router.emit('navbarPosition', $newNavbarEl[0], initialPreload ? 'current' : 'previous');\n if (isMaster || isDetailRoot) {\n router.emit('navbarRole', $newNavbarEl[0], {\n role: isMaster ? 'master' : 'detail',\n detailRoot: !!isDetailRoot\n });\n }\n }\n\n // Remove previous page in case of \"forced\"\n let backIndex;\n if (options.force) {\n if ($oldPage.prev('.page-previous').length >= 0) {\n if (router.history.indexOf(options.route.url) >= 0) {\n backIndex = router.history.length - router.history.indexOf(options.route.url) - 1;\n router.history = router.history.slice(0, router.history.indexOf(options.route.url) + 2);\n router.propsHistory = router.propsHistory.slice(0, router.history.indexOf(options.route.url) + 2);\n view.history = router.history;\n } else if (router.history[[router.history.length - 2]]) {\n router.propsHistory[router.propsHistory.length - 2] = options.props || {};\n } else {\n router.history.unshift(router.url);\n router.propsHistory.unshift(options.props || {});\n }\n const $pageToRemove = $oldPage.prev('.page-previous');\n let $navbarToRemove;\n if (dynamicNavbar) {\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n if ($pageToRemove.length > 0) {\n router.pageCallback('beforeRemove', $pageToRemove, $navbarToRemove, 'previous', undefined, options);\n if ($pageToRemove[0] === masterPageEl) {\n masterPageRemoved = true;\n }\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length) {\n router.removeNavbar($navbarToRemove);\n }\n }\n }\n }\n\n // Insert new page\n const newPageInDom = $newPage.parents(document).length > 0;\n const f7Component = $newPage[0].f7Component;\n function insertPage() {\n if (initialPreload) {\n if (!newPageInDom && f7Component) {\n f7Component.mount(componentEl => {\n router.$el.append(componentEl);\n });\n } else {\n router.$el.append($newPage);\n }\n }\n if ($newPage.next($oldPage).length === 0) {\n if (!newPageInDom && f7Component) {\n f7Component.mount(componentEl => {\n $(componentEl).insertBefore($oldPage);\n });\n } else {\n $newPage.insertBefore($oldPage);\n }\n }\n if (dynamicNavbar && $newNavbarEl.length) {\n if ($newNavbarEl.find('.title-large').length) {\n $newNavbarEl.addClass('navbar-large');\n }\n $newNavbarEl.insertBefore($oldNavbarEl);\n if ($oldNavbarEl.length > 0) {\n $newNavbarEl.insertBefore($oldNavbarEl);\n } else {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n $navbarsEl.append($newNavbarEl);\n }\n }\n if (!newPageInDom) {\n router.pageCallback('mounted', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n } else if (options.route && options.route.route && options.route.route.keepAlive && !$newPage[0].f7PageMounted) {\n $newPage[0].f7PageMounted = true;\n router.pageCallback('mounted', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n }\n }\n if (options.preload) {\n // Insert Page\n insertPage();\n // Tab route\n if (options.route.route.tab) {\n router.tabLoad(options.route.route.tab, extend({}, options, {\n history: false,\n browserHistory: false,\n preload: true\n }));\n }\n if (isMaster) {\n $newPage.removeClass('page-master-stacked').trigger('page:masterunstack');\n router.emit('pageMasterUnstack', $newPage[0]);\n if (dynamicNavbar) {\n $(app.navbar.getElByPage($newPage)).removeClass('navbar-master-stacked');\n router.emit('navbarMasterUnstack', app.navbar.getElByPage($newPage));\n }\n }\n // Page init and before init events\n router.pageCallback('init', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n if (initialPreload) {\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'current', undefined, options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'current', undefined, options);\n }\n const $previousPages = $newPage.prevAll('.page-previous:not(.page-master)');\n if ($previousPages.length > 0) {\n $previousPages.each(pageToRemove => {\n const $pageToRemove = $(pageToRemove);\n let $navbarToRemove;\n if (dynamicNavbar) {\n $navbarToRemove = $(app.navbar.getElByPage($pageToRemove));\n }\n router.pageCallback('beforeRemove', $pageToRemove, $navbarToRemove, 'previous', undefined);\n router.removePage($pageToRemove);\n if (dynamicNavbar && $navbarToRemove.length) {\n router.removeNavbar($navbarToRemove);\n }\n });\n }\n router.allowPageChange = true;\n return router;\n }\n\n // History State\n if (!(device.ie || device.edge || device.firefox && !device.ios)) {\n if (router.params.browserHistory && options.browserHistory) {\n if (options.replaceState) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(view.id, {\n url: options.route.url\n }, browserHistoryRoot + router.params.browserHistorySeparator + options.route.url);\n } else if (backIndex) {\n History.go(-backIndex);\n } else {\n History.back();\n }\n }\n }\n\n // Update History\n if (options.replaceState) {\n router.history[router.history.length - 1] = options.route.url;\n router.propsHistory[router.propsHistory.length - 1] = options.props || {};\n } else {\n if (router.history.length === 1) {\n router.history.unshift(router.url);\n router.propsHistory.unshift(options.props || {});\n }\n router.history.pop();\n router.propsHistory.pop();\n }\n router.saveHistory();\n\n // Current Page & Navbar\n router.currentPageEl = $newPage[0];\n if (dynamicNavbar && $newNavbarEl.length) {\n router.currentNavbarEl = $newNavbarEl[0];\n } else {\n delete router.currentNavbarEl;\n }\n\n // Current Route\n router.currentRoute = options.route;\n\n // History State\n if (device.ie || device.edge || device.firefox && !device.ios) {\n if (router.params.browserHistory && options.browserHistory) {\n if (options.replaceState) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(view.id, {\n url: options.route.url\n }, browserHistoryRoot + router.params.browserHistorySeparator + options.route.url);\n } else if (backIndex) {\n History.go(-backIndex);\n } else {\n History.back();\n }\n }\n }\n\n // Insert Page\n insertPage();\n\n // Load Tab\n if (options.route.route.tab) {\n router.tabLoad(options.route.route.tab, extend({}, options, {\n history: false,\n browserHistory: false\n }));\n }\n\n // Check master detail\n\n if (masterDetailEnabled && (currentIsMaster || masterPageRemoved)) {\n view.checkMasterDetailBreakpoint(false);\n }\n\n // Page init and before init events\n router.pageCallback('init', $newPage, $newNavbarEl, 'previous', 'current', options, $oldPage);\n\n // Before animation callback\n router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', 'next', options);\n router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'previous', 'current', options);\n\n // Animation\n function afterAnimation() {\n // Set classes\n router.setPagePosition($newPage, 'current', false);\n router.setPagePosition($oldPage, 'next', true);\n if (dynamicNavbar) {\n router.setNavbarPosition($newNavbarEl, 'current', false);\n router.setNavbarPosition($oldNavbarEl, 'next', true);\n }\n\n // After animation event\n router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', 'next', options);\n router.pageCallback('afterIn', $newPage, $newNavbarEl, 'previous', 'current', options);\n\n // Remove Old Page\n\n router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'next', undefined, options);\n router.removePage($oldPage);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n router.allowPageChange = true;\n router.emit('routeChanged', router.currentRoute, router.previousRoute, router);\n\n // Preload previous page\n const preloadPreviousPage = router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history[router.history.length - 2] && !isMaster) {\n router.back(router.history[router.history.length - 2], {\n preload: true,\n props: router.propsHistory[router.propsHistory.length - 2] || {}\n });\n }\n if (router.params.browserHistory) {\n History.clearRouterQueue();\n }\n }\n function setPositionClasses() {\n router.setPagePosition($oldPage, 'current');\n router.setPagePosition($newPage, 'previous', false);\n if (dynamicNavbar) {\n router.setNavbarPosition($oldNavbarEl, 'current');\n router.setNavbarPosition($newNavbarEl, 'previous', false);\n }\n }\n if (options.animate && !(currentIsMaster && app.width >= router.params.masterDetailBreakpoint)) {\n let transition = router.params.transition;\n if ($oldPage[0] && $oldPage[0].f7PageTransition) {\n transition = $oldPage[0].f7PageTransition;\n delete $oldPage[0].f7PageTransition;\n }\n if (options.transition) transition = options.transition;\n if (!transition && router.previousRoute && router.previousRoute.route) {\n transition = router.previousRoute.route.transition;\n }\n if (!transition && router.previousRoute && router.previousRoute.route && router.previousRoute.route.options) {\n transition = router.previousRoute.route.options.transition;\n }\n setPositionClasses();\n router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'backward', transition, () => {\n afterAnimation();\n });\n } else {\n afterAnimation();\n }\n return router;\n}\nfunction loadBack(router, backParams, backOptions, ignorePageChange) {\n if (!router.allowPageChange && !ignorePageChange) return router;\n const params = backParams;\n const options = backOptions;\n const {\n url,\n content,\n el,\n pageName,\n component,\n componentUrl\n } = params;\n if (options.route.url && router.url === options.route.url && !(options.reloadCurrent || options.reloadPrevious) && !router.params.allowDuplicateUrls) {\n router.allowPageChange = true;\n return false;\n }\n if (!options.route && url) {\n options.route = router.parseRouteUrl(url);\n }\n\n // Component Callbacks\n function resolve(pageEl, newOptions) {\n return backward(router, pageEl, extend(options, newOptions));\n }\n function reject() {\n router.allowPageChange = true;\n return router;\n }\n if (url || componentUrl || component) {\n router.allowPageChange = false;\n }\n\n // Proceed\n if (content) {\n backward(router, router.getPageEl(content), options);\n } else if (el) {\n // Load page from specified HTMLElement or by page name in pages container\n backward(router, router.getPageEl(el), options);\n } else if (pageName) {\n // Load page by page name in pages container\n backward(router, router.$el.children(`.page[data-name=\"${pageName}\"]`).eq(0), options);\n } else if (component || componentUrl) {\n // Load from component (F7/Vue/React/...)\n try {\n router.pageComponentLoader({\n routerEl: router.el,\n component,\n componentUrl,\n options,\n resolve,\n reject\n });\n } catch (err) {\n router.allowPageChange = true;\n throw err;\n }\n } else if (url) {\n // Load using XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router.xhrRequest(url, options).then(pageContent => {\n backward(router, router.getPageEl(pageContent), options);\n }).catch(() => {\n router.allowPageChange = true;\n });\n }\n return router;\n}\nfunction back() {\n const router = this;\n const device = getDevice();\n if (router.swipeBackActive) return router;\n let navigateUrl;\n let navigateOptions;\n let navigateProps;\n let route;\n if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'object') {\n navigateOptions = (arguments.length <= 0 ? undefined : arguments[0]) || {};\n } else {\n navigateUrl = arguments.length <= 0 ? undefined : arguments[0];\n navigateOptions = (arguments.length <= 1 ? undefined : arguments[1]) || {};\n }\n const {\n name,\n params,\n query\n } = navigateOptions;\n if (name) {\n navigateUrl = router.generateUrl({\n name,\n params,\n query\n });\n if (navigateUrl) {\n return router.back(navigateUrl, extend({}, navigateOptions, {\n name: null,\n params: null,\n query: null\n }));\n }\n return router;\n }\n const app = router.app;\n appRouterCheck(router, 'back');\n let currentRouteIsModal = router.currentRoute.modal;\n let modalType;\n if (!currentRouteIsModal) {\n 'popup popover sheet loginScreen actions customModal panel'.split(' ').forEach(modalLoadProp => {\n if (router.currentRoute.route[modalLoadProp]) {\n currentRouteIsModal = true;\n modalType = modalLoadProp;\n }\n });\n }\n if (currentRouteIsModal && !navigateOptions.preload) {\n const modalToClose = router.currentRoute.modal || router.currentRoute.route.modalInstance || app[modalType].get();\n const previousUrl = router.history[router.history.length - 2];\n let previousRoute;\n // check if previous route is modal too\n if (modalToClose && modalToClose.$el) {\n const prevOpenedModals = modalToClose.$el.prevAll('.modal-in');\n if (prevOpenedModals.length && prevOpenedModals[0].f7Modal) {\n const modalEl = prevOpenedModals[0];\n // check if current router not inside of the modalEl\n if (!router.$el.parents(modalEl).length) {\n previousRoute = modalEl.f7Modal.route;\n }\n }\n }\n if (!previousRoute) {\n previousRoute = router.findMatchingRoute(previousUrl);\n }\n if (!previousRoute && previousUrl) {\n previousRoute = {\n url: previousUrl,\n path: previousUrl.split('?')[0],\n query: parseUrlQuery(previousUrl),\n route: {\n path: previousUrl.split('?')[0],\n url: previousUrl\n }\n };\n }\n if (!navigateUrl || navigateUrl.replace(/[# ]/g, '').trim().length === 0) {\n if (!previousRoute || !modalToClose) {\n return router;\n }\n }\n const forceOtherUrl = navigateOptions.force && previousRoute && navigateUrl;\n if (previousRoute && modalToClose) {\n const isBrokenBrowserHistory = device.ie || device.edge || device.firefox && !device.ios;\n const needHistoryBack = router.params.browserHistory && navigateOptions.browserHistory !== false;\n const currentRouteWithoutBrowserHistory = router.currentRoute && router.currentRoute.route && router.currentRoute.route.options && router.currentRoute.route.options.browserHistory === false;\n if (needHistoryBack && !isBrokenBrowserHistory && !currentRouteWithoutBrowserHistory) {\n History.back();\n }\n router.currentRoute = previousRoute;\n router.history.pop();\n router.propsHistory.pop();\n router.saveHistory();\n if (needHistoryBack && isBrokenBrowserHistory && !currentRouteWithoutBrowserHistory) {\n History.back();\n }\n router.modalRemove(modalToClose);\n if (forceOtherUrl) {\n router.navigate(navigateUrl, {\n reloadCurrent: true\n });\n }\n } else if (modalToClose) {\n router.modalRemove(modalToClose);\n if (navigateUrl) {\n router.navigate(navigateUrl, {\n reloadCurrent: true\n });\n }\n }\n return router;\n }\n let $previousPage = router.$el.children('.page-current').prevAll('.page-previous:not(.page-master)').eq(0);\n let skipMaster;\n if (router.params.masterDetailBreakpoint > 0) {\n const classes = [];\n router.$el.children('.page').each(pageEl => {\n classes.push(pageEl.className);\n });\n const $previousMaster = router.$el.children('.page-current').prevAll('.page-master').eq(0);\n if ($previousMaster.length) {\n const expectedPreviousPageUrl = router.history[router.history.length - 2];\n const expectedPreviousPageRoute = router.findMatchingRoute(expectedPreviousPageUrl);\n if (expectedPreviousPageRoute && $previousMaster[0].f7Page && expectedPreviousPageRoute.route === $previousMaster[0].f7Page.route.route) {\n $previousPage = $previousMaster;\n if (!navigateOptions.preload) {\n skipMaster = app.width >= router.params.masterDetailBreakpoint;\n }\n }\n }\n }\n if (!navigateOptions.force && $previousPage.length && !skipMaster) {\n if (router.params.browserHistory && $previousPage[0].f7Page && router.history[router.history.length - 2] !== $previousPage[0].f7Page.route.url) {\n router.back(router.history[router.history.length - 2], extend(navigateOptions, {\n force: true,\n props: router.propsHistory[router.propsHistory.length - 2] || {}\n }));\n return router;\n }\n const previousPageRoute = $previousPage[0].f7Page.route;\n processRouteQueue.call(router, previousPageRoute, router.currentRoute, () => {\n loadBack(router, {\n el: $previousPage\n }, extend(navigateOptions, {\n route: previousPageRoute\n }));\n }, () => {}, 'backward');\n return router;\n }\n\n // Navigate URL\n if (navigateUrl === '#') {\n navigateUrl = undefined;\n }\n if (navigateUrl && navigateUrl[0] !== '/' && navigateUrl.indexOf('#') !== 0) {\n navigateUrl = ((router.path || '/') + navigateUrl).replace('//', '/');\n }\n if (!navigateUrl && router.history.length > 1) {\n navigateUrl = router.history[router.history.length - 2];\n navigateProps = router.propsHistory[router.propsHistory.length - 2] || {};\n }\n if (skipMaster && !navigateOptions.force && router.history[router.history.length - 3]) {\n return router.back(router.history[router.history.length - 3], extend({}, navigateOptions || {}, {\n force: true,\n animate: false,\n props: router.propsHistory[router.propsHistory.length - 3] || {}\n }));\n }\n if (skipMaster && !navigateOptions.force) {\n return router;\n }\n\n // Find route to load\n route = router.findMatchingRoute(navigateUrl);\n if (!route) {\n if (navigateUrl) {\n route = {\n url: navigateUrl,\n path: navigateUrl.split('?')[0],\n query: parseUrlQuery(navigateUrl),\n route: {\n path: navigateUrl.split('?')[0],\n url: navigateUrl\n }\n };\n }\n }\n if (!route) {\n return router;\n }\n if (route.route.redirect) {\n return redirect.call(router, 'backward', route, navigateOptions);\n }\n const options = {};\n if (route.route.options) {\n extend(options, route.route.options, navigateOptions, {\n props: navigateProps || {}\n });\n } else {\n extend(options, navigateOptions, {\n props: navigateProps || {}\n });\n }\n options.route = route;\n function resolve() {\n let routerLoaded = false;\n if (route.route.keepAlive && route.route.keepAliveData) {\n loadBack(router, {\n el: route.route.keepAliveData.pageEl\n }, options);\n routerLoaded = true;\n }\n 'url content component pageName el componentUrl'.split(' ').forEach(pageLoadProp => {\n if (route.route[pageLoadProp] && !routerLoaded) {\n routerLoaded = true;\n loadBack(router, {\n [pageLoadProp]: route.route[pageLoadProp]\n }, options);\n }\n });\n if (routerLoaded) return;\n // Async\n function asyncResolve(resolveParams, resolveOptions) {\n router.allowPageChange = false;\n loadBack(router, resolveParams, extend(options, resolveOptions), true);\n }\n function asyncReject() {\n router.allowPageChange = true;\n }\n if (route.route.async) {\n router.allowPageChange = false;\n route.route.async.call(router, {\n router,\n to: route,\n from: router.currentRoute,\n resolve: asyncResolve,\n reject: asyncReject,\n direction: 'backward',\n app\n });\n }\n if (route.route.asyncComponent) {\n asyncComponent(router, route.route.asyncComponent, asyncResolve, asyncReject);\n }\n }\n function reject() {\n router.allowPageChange = true;\n }\n if (options.preload) {\n resolve();\n } else {\n processRouteQueue.call(router, route, router.currentRoute, () => {\n if (route.route.modules) {\n app.loadModules(Array.isArray(route.route.modules) ? route.route.modules : [route.route.modules]).then(() => {\n resolve();\n }).catch(() => {\n reject();\n });\n } else {\n resolve();\n }\n }, () => {\n reject();\n }, 'backward');\n }\n\n // Return Router\n return router;\n}\nexport { back };", "import $ from '../../shared/dom7.js';\nimport appRouterCheck from './app-router-check.js';\nfunction clearPreviousPages(router) {\n appRouterCheck(router, 'clearPreviousPages');\n const app = router.app;\n const dynamicNavbar = router.dynamicNavbar;\n const $pagesToRemove = router.$el.children('.page').filter(pageInView => {\n if (router.currentRoute && (router.currentRoute.modal || router.currentRoute.panel)) return true;\n return pageInView !== router.currentPageEl;\n });\n $pagesToRemove.each(pageEl => {\n const $oldPageEl = $(pageEl);\n const $oldNavbarEl = $(app.navbar.getElByPage($oldPageEl));\n // Page remove event\n router.pageCallback('beforeRemove', $oldPageEl, $oldNavbarEl, 'previous', undefined, {});\n router.removePage($oldPageEl);\n if (dynamicNavbar && $oldNavbarEl.length) {\n router.removeNavbar($oldNavbarEl);\n }\n });\n}\nfunction clearPreviousHistory() {\n const router = this;\n appRouterCheck(router, 'clearPreviousHistory');\n const url = router.history[router.history.length - 1];\n clearPreviousPages(router);\n router.history = [url];\n router.view.history = [url];\n router.saveHistory();\n}\nexport { clearPreviousHistory }; // eslint-disable-line", "import { getWindow, getDocument } from 'ssr-window';\nimport { pathToRegexp, compile } from 'path-to-regexp';\nimport $ from '../../shared/dom7.js';\nimport Framework7Class from '../../shared/class.js';\nimport { extend, nextFrame, parseUrlQuery, serializeObject, now, eventNameToColonCase } from '../../shared/utils.js';\nimport History from '../../shared/history.js';\nimport SwipeBack from './swipe-back.js';\nimport { refreshPage, navigate } from './navigate.js';\nimport { tabLoad, tabRemove } from './tab.js';\nimport { modalLoad, modalRemove } from './modal.js';\nimport { back } from './back.js';\nimport { clearPreviousHistory } from './clear-previous-history.js';\nimport appRouterCheck from './app-router-check.js';\nclass Router extends Framework7Class {\n constructor(app, view) {\n super({}, [typeof view === 'undefined' ? app : view]);\n const router = this;\n\n // Is App Router\n router.isAppRouter = typeof view === 'undefined';\n if (router.isAppRouter) {\n // App Router\n extend(false, router, {\n app,\n params: app.params.view,\n routes: app.routes || [],\n cache: app.cache\n });\n } else {\n // View Router\n extend(false, router, {\n app,\n view,\n viewId: view.id,\n id: view.params.routerId,\n params: view.params,\n routes: view.routes,\n history: view.history,\n propsHistory: [],\n scrollHistory: view.scrollHistory,\n cache: app.cache,\n dynamicNavbar: app.theme === 'ios' && view.params.iosDynamicNavbar,\n initialPages: [],\n initialNavbars: []\n });\n }\n\n // Install Modules\n router.useModules();\n\n // AllowPageChage\n router.allowPageChange = true;\n\n // Current Route\n let currentRoute = {};\n let previousRoute = {};\n Object.defineProperty(router, 'currentRoute', {\n enumerable: true,\n configurable: true,\n set(newRoute) {\n if (newRoute === void 0) {\n newRoute = {};\n }\n previousRoute = extend({}, currentRoute);\n currentRoute = newRoute;\n if (!currentRoute) return;\n router.url = currentRoute.url;\n router.emit('routeChange', newRoute, previousRoute, router);\n },\n get() {\n return currentRoute;\n }\n });\n Object.defineProperty(router, 'previousRoute', {\n enumerable: true,\n configurable: true,\n get() {\n return previousRoute;\n },\n set(newRoute) {\n previousRoute = newRoute;\n }\n });\n return router;\n }\n mount() {\n const router = this;\n const view = router.view;\n const document = getDocument();\n extend(false, router, {\n tempDom: document.createElement('div'),\n $el: view.$el,\n el: view.el,\n $navbarsEl: view.$navbarsEl,\n navbarsEl: view.navbarsEl\n });\n router.emit('local::mount routerMount', router);\n }\n animatableNavElements($newNavbarEl, $oldNavbarEl, toLarge, fromLarge, direction) {\n const router = this;\n const dynamicNavbar = router.dynamicNavbar;\n const animateIcon = router.params.iosAnimateNavbarBackIcon;\n let newNavEls;\n let oldNavEls;\n function animatableNavEl($el, $navbarInner) {\n const isSliding = $el.hasClass('sliding') || $navbarInner.hasClass('sliding');\n const isSubnavbar = $el.hasClass('subnavbar');\n const needsOpacityTransition = isSliding ? !isSubnavbar : true;\n const $iconEl = $el.find('.back .icon');\n let isIconLabel;\n if (isSliding && animateIcon && $el.hasClass('left') && $iconEl.length > 0 && $iconEl.next('span').length) {\n $el = $iconEl.next('span'); // eslint-disable-line\n isIconLabel = true;\n }\n return {\n $el,\n isIconLabel,\n leftOffset: $el[0].f7NavbarLeftOffset,\n rightOffset: $el[0].f7NavbarRightOffset,\n isSliding,\n isSubnavbar,\n needsOpacityTransition\n };\n }\n if (dynamicNavbar) {\n newNavEls = [];\n oldNavEls = [];\n $newNavbarEl.children('.navbar-inner').children('.left, .right, .title, .subnavbar').each(navEl => {\n const $navEl = $(navEl);\n if ($navEl.hasClass('left') && fromLarge && direction === 'forward') return;\n if ($navEl.hasClass('title') && toLarge) return;\n newNavEls.push(animatableNavEl($navEl, $newNavbarEl.children('.navbar-inner')));\n });\n if (!($oldNavbarEl.hasClass('navbar-master') && router.params.masterDetailBreakpoint > 0 && router.app.width >= router.params.masterDetailBreakpoint)) {\n $oldNavbarEl.children('.navbar-inner').children('.left, .right, .title, .subnavbar').each(navEl => {\n const $navEl = $(navEl);\n if ($navEl.hasClass('left') && toLarge && !fromLarge && direction === 'forward') return;\n if ($navEl.hasClass('left') && toLarge && direction === 'backward') return;\n if ($navEl.hasClass('title') && fromLarge) {\n return;\n }\n oldNavEls.push(animatableNavEl($navEl, $oldNavbarEl.children('.navbar-inner')));\n });\n }\n [oldNavEls, newNavEls].forEach(navEls => {\n navEls.forEach(navEl => {\n const n = navEl;\n const {\n isSliding,\n $el\n } = navEl;\n const otherEls = navEls === oldNavEls ? newNavEls : oldNavEls;\n if (!(isSliding && $el.hasClass('title') && otherEls)) return;\n otherEls.forEach(otherNavEl => {\n if (otherNavEl.isIconLabel) {\n const iconTextEl = otherNavEl.$el[0];\n n.leftOffset += iconTextEl ? iconTextEl.offsetLeft || 0 : 0;\n }\n });\n });\n });\n }\n return {\n newNavEls,\n oldNavEls\n };\n }\n animate($oldPageEl, $newPageEl, $oldNavbarEl, $newNavbarEl, direction, transition, callback) {\n const router = this;\n if (router.params.animateCustom) {\n router.params.animateCustom.apply(router, [$oldPageEl, $newPageEl, $oldNavbarEl, $newNavbarEl, direction, callback]);\n return;\n }\n const dynamicNavbar = router.dynamicNavbar;\n const ios = router.app.theme === 'ios';\n if (transition) {\n const routerCustomTransitionClass = `router-transition-custom router-transition-${transition}-${direction}`;\n // Animate\n const onCustomTransitionDone = () => {\n router.$el.removeClass(routerCustomTransitionClass);\n if (dynamicNavbar && router.$navbarsEl.length) {\n if ($newNavbarEl) {\n router.$navbarsEl.prepend($newNavbarEl);\n }\n if ($oldNavbarEl) {\n router.$navbarsEl.prepend($oldNavbarEl);\n }\n }\n if (callback) callback();\n };\n (direction === 'forward' ? $newPageEl : $oldPageEl).animationEnd(onCustomTransitionDone);\n if (dynamicNavbar) {\n if ($newNavbarEl && $newPageEl) {\n router.setNavbarPosition($newNavbarEl, '');\n $newNavbarEl.removeClass('navbar-next navbar-previous navbar-current');\n $newPageEl.prepend($newNavbarEl);\n }\n if ($oldNavbarEl && $oldPageEl) {\n router.setNavbarPosition($oldNavbarEl, '');\n $oldNavbarEl.removeClass('navbar-next navbar-previous navbar-current');\n $oldPageEl.prepend($oldNavbarEl);\n }\n }\n router.$el.addClass(routerCustomTransitionClass);\n return;\n }\n\n // Router Animation class\n const routerTransitionClass = `router-transition-${direction} router-transition`;\n let newNavEls;\n let oldNavEls;\n let fromLarge;\n let toLarge;\n let toDifferent;\n let oldIsLarge;\n let newIsLarge;\n if (ios && dynamicNavbar) {\n const betweenMasterAndDetail = router.params.masterDetailBreakpoint > 0 && router.app.width >= router.params.masterDetailBreakpoint && ($oldNavbarEl.hasClass('navbar-master') && $newNavbarEl.hasClass('navbar-master-detail') || $oldNavbarEl.hasClass('navbar-master-detail') && $newNavbarEl.hasClass('navbar-master'));\n if (!betweenMasterAndDetail) {\n oldIsLarge = $oldNavbarEl && $oldNavbarEl.hasClass('navbar-large');\n newIsLarge = $newNavbarEl && $newNavbarEl.hasClass('navbar-large');\n fromLarge = oldIsLarge && !$oldNavbarEl.hasClass('navbar-large-collapsed');\n toLarge = newIsLarge && !$newNavbarEl.hasClass('navbar-large-collapsed');\n toDifferent = fromLarge && !toLarge || toLarge && !fromLarge;\n }\n const navEls = router.animatableNavElements($newNavbarEl, $oldNavbarEl, toLarge, fromLarge, direction);\n newNavEls = navEls.newNavEls;\n oldNavEls = navEls.oldNavEls;\n }\n function animateNavbars(progress) {\n if (!(ios && dynamicNavbar)) return;\n if (progress === 1) {\n if (toLarge) {\n $newNavbarEl.addClass('router-navbar-transition-to-large');\n $oldNavbarEl.addClass('router-navbar-transition-to-large');\n }\n if (fromLarge) {\n $newNavbarEl.addClass('router-navbar-transition-from-large');\n $oldNavbarEl.addClass('router-navbar-transition-from-large');\n }\n }\n newNavEls.forEach(navEl => {\n const $el = navEl.$el;\n const offset = direction === 'forward' ? navEl.rightOffset : navEl.leftOffset;\n if (navEl.isSliding) {\n if (navEl.isSubnavbar && newIsLarge) {\n // prettier-ignore\n $el[0].style.setProperty('transform', `translate3d(${offset * (1 - progress)}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`, 'important');\n } else {\n $el.transform(`translate3d(${offset * (1 - progress)}px,0,0)`);\n }\n }\n });\n oldNavEls.forEach(navEl => {\n const $el = navEl.$el;\n const offset = direction === 'forward' ? navEl.leftOffset : navEl.rightOffset;\n if (navEl.isSliding) {\n if (navEl.isSubnavbar && oldIsLarge) {\n $el.transform(`translate3d(${offset * progress}px, calc(-1 * var(--f7-navbar-large-collapse-progress) * var(--f7-navbar-large-title-height)), 0)`);\n } else {\n $el.transform(`translate3d(${offset * progress}px,0,0)`);\n }\n }\n });\n }\n\n // AnimationEnd Callback\n function onDone() {\n if (router.dynamicNavbar) {\n if ($newNavbarEl) {\n $newNavbarEl.removeClass('router-navbar-transition-to-large router-navbar-transition-from-large');\n $newNavbarEl.addClass('navbar-no-title-large-transition');\n nextFrame(() => {\n $newNavbarEl.removeClass('navbar-no-title-large-transition');\n });\n }\n if ($oldNavbarEl) {\n $oldNavbarEl.removeClass('router-navbar-transition-to-large router-navbar-transition-from-large');\n }\n if ($newNavbarEl.hasClass('sliding') || $newNavbarEl.children('.navbar-inner.sliding').length) {\n $newNavbarEl.find('.title, .left, .right, .left .icon, .subnavbar').transform('');\n } else {\n $newNavbarEl.find('.sliding').transform('');\n }\n if ($oldNavbarEl.hasClass('sliding') || $oldNavbarEl.children('.navbar-inner.sliding').length) {\n $oldNavbarEl.find('.title, .left, .right, .left .icon, .subnavbar').transform('');\n } else {\n $oldNavbarEl.find('.sliding').transform('');\n }\n }\n router.$el.removeClass(routerTransitionClass);\n if (callback) callback();\n }\n\n // eslint-disable-next-line\n (direction === 'forward' ? $newPageEl : ios ? $oldPageEl : $newPageEl).animationEnd(() => {\n onDone();\n });\n\n // Animate\n if (dynamicNavbar) {\n // Prepare Navbars\n animateNavbars(0);\n nextFrame(() => {\n // Add class, start animation\n router.$el.addClass(routerTransitionClass);\n if (toDifferent) {\n // eslint-disable-next-line\n router.el._clientLeft = router.el.clientLeft;\n }\n animateNavbars(1);\n });\n } else {\n // Add class, start animation\n router.$el.addClass(routerTransitionClass);\n }\n }\n removeModal(modalEl) {\n const router = this;\n router.removeEl(modalEl);\n }\n // eslint-disable-next-line\n removeTabContent(tabEl) {\n const $tabEl = $(tabEl);\n $tabEl.html('');\n }\n removeNavbar(el) {\n const router = this;\n router.removeEl(el);\n }\n removePage(el) {\n const $el = $(el);\n const f7Page = $el && $el[0] && $el[0].f7Page;\n const router = this;\n if (f7Page && f7Page.route && f7Page.route.route && f7Page.route.route.keepAlive) {\n $el.remove();\n return;\n }\n router.removeEl(el);\n }\n removeEl(el) {\n if (!el) return;\n const router = this;\n const $el = $(el);\n if ($el.length === 0) return;\n $el.find('.tab').each(tabEl => {\n $(tabEl).children().each(tabChild => {\n if (tabChild.f7Component) {\n $(tabChild).trigger('tab:beforeremove');\n tabChild.f7Component.destroy();\n }\n });\n });\n if ($el[0].f7Component && $el[0].f7Component.destroy) {\n $el[0].f7Component.destroy();\n }\n if (!router.params.removeElements) {\n return;\n }\n if (router.params.removeElementsWithTimeout) {\n setTimeout(() => {\n $el.remove();\n }, router.params.removeElementsTimeout);\n } else {\n $el.remove();\n }\n }\n getPageEl(content) {\n const router = this;\n if (typeof content === 'string') {\n router.tempDom.innerHTML = content;\n } else {\n if ($(content).hasClass('page')) {\n return content;\n }\n router.tempDom.innerHTML = '';\n $(router.tempDom).append(content);\n }\n return router.findElement('.page', router.tempDom);\n }\n findElement(stringSelector, container) {\n const router = this;\n const view = router.view;\n const app = router.app;\n\n // Modals Selector\n const modalsSelector = '.popup, .dialog, .popover, .actions-modal, .sheet-modal, .login-screen, .page';\n const $container = $(container);\n const selector = stringSelector;\n let found = $container.find(selector).filter(el => $(el).parents(modalsSelector).length === 0);\n if (found.length > 1) {\n if (typeof view.selector === 'string') {\n // Search in related view\n found = $container.find(`${view.selector} ${selector}`);\n }\n if (found.length > 1) {\n // Search in main view\n found = $container.find(`.${app.params.viewMainClass} ${selector}`);\n }\n }\n if (found.length === 1) return found;\n found = router.findElement(selector, $container);\n if (found && found.length === 1) return found;\n if (found && found.length > 1) return $(found[0]);\n return undefined;\n }\n flattenRoutes(routes) {\n if (routes === void 0) {\n routes = this.routes;\n }\n const router = this;\n let flattenedRoutes = [];\n routes.forEach(route => {\n let hasTabRoutes = false;\n if ('tabs' in route && route.tabs) {\n const mergedPathsRoutes = route.tabs.map(tabRoute => {\n const tRoute = extend({}, route, {\n path: `${route.path}/${tabRoute.path}`.replace('///', '/').replace('//', '/'),\n parentPath: route.path,\n tab: tabRoute\n });\n delete tRoute.tabs;\n delete tRoute.routes;\n return tRoute;\n });\n hasTabRoutes = true;\n flattenedRoutes = flattenedRoutes.concat(router.flattenRoutes(mergedPathsRoutes));\n }\n if ('detailRoutes' in route) {\n const mergedPathsRoutes = route.detailRoutes.map(detailRoute => {\n const dRoute = extend({}, detailRoute);\n dRoute.masterRoute = route;\n dRoute.masterRoutePath = route.path;\n return dRoute;\n });\n flattenedRoutes = flattenedRoutes.concat(route, router.flattenRoutes(mergedPathsRoutes));\n }\n if ('routes' in route) {\n const mergedPathsRoutes = route.routes.map(childRoute => {\n const cRoute = extend({}, childRoute);\n cRoute.path = `${route.path}/${cRoute.path}`.replace('///', '/').replace('//', '/');\n return cRoute;\n });\n if (hasTabRoutes) {\n flattenedRoutes = flattenedRoutes.concat(router.flattenRoutes(mergedPathsRoutes));\n } else {\n flattenedRoutes = flattenedRoutes.concat(route, router.flattenRoutes(mergedPathsRoutes));\n }\n }\n if (!('routes' in route) && !('tabs' in route && route.tabs) && !('detailRoutes' in route)) {\n flattenedRoutes.push(route);\n }\n });\n return flattenedRoutes;\n }\n\n // eslint-disable-next-line\n parseRouteUrl(url) {\n if (!url) return {};\n const query = parseUrlQuery(url);\n const hash = url.split('#')[1];\n const params = {};\n const path = url.split('#')[0].split('?')[0];\n return {\n query,\n hash,\n params,\n url,\n path\n };\n }\n generateUrl(parameters) {\n if (parameters === void 0) {\n parameters = {};\n }\n if (typeof parameters === 'string') {\n return parameters;\n }\n const {\n name,\n path,\n params,\n query\n } = parameters;\n if (!name && !path) {\n throw new Error('Framework7: \"name\" or \"path\" parameter is required');\n }\n const router = this;\n const route = name ? router.findRouteByKey('name', name) : router.findRouteByKey('path', path);\n if (!route) {\n if (name) {\n throw new Error(`Framework7: route with name \"${name}\" not found`);\n } else {\n throw new Error(`Framework7: route with path \"${path}\" not found`);\n }\n }\n const url = router.constructRouteUrl(route, {\n params,\n query\n });\n if (url === '') {\n return '/';\n }\n if (!url) {\n throw new Error(`Framework7: can't construct URL for route with name \"${name}\"`);\n }\n return url;\n }\n\n // eslint-disable-next-line\n constructRouteUrl(route, _temp) {\n let {\n params,\n query\n } = _temp === void 0 ? {} : _temp;\n const {\n path\n } = route;\n const toUrl = compile(path);\n let url;\n try {\n url = toUrl(params || {});\n } catch (error) {\n throw new Error(`Framework7: error constructing route URL from passed params:\\nRoute: ${path}\\n${error.toString()}`);\n }\n if (query) {\n if (typeof query === 'string') url += `?${query}`;else if (Object.keys(query).length) url += `?${serializeObject(query)}`;\n }\n return url;\n }\n findTabRouteUrl(tabEl) {\n const router = this;\n const $tabEl = $(tabEl);\n const parentPath = router.currentRoute.route.parentPath;\n const tabId = $tabEl.attr('id');\n const flattenedRoutes = router.flattenRoutes(router.routes);\n let foundTabRouteUrl;\n flattenedRoutes.forEach(route => {\n if (route.parentPath === parentPath && route.tab && route.tab.id === tabId) {\n if (router.currentRoute.params && Object.keys(router.currentRoute.params).length > 0) {\n foundTabRouteUrl = router.constructRouteUrl(route, {\n params: router.currentRoute.params,\n query: router.currentRoute.query\n });\n } else {\n foundTabRouteUrl = route.path;\n }\n }\n });\n return foundTabRouteUrl;\n }\n findRouteByKey(key, value) {\n const router = this;\n const routes = router.routes;\n const flattenedRoutes = router.flattenRoutes(routes);\n let matchingRoute;\n flattenedRoutes.forEach(route => {\n if (matchingRoute) return;\n if (route[key] === value) {\n matchingRoute = route;\n }\n });\n return matchingRoute;\n }\n findMatchingRoute(url) {\n if (!url) return undefined;\n const router = this;\n const routes = router.routes;\n const flattenedRoutes = router.flattenRoutes(routes);\n const {\n path,\n query,\n hash,\n params\n } = router.parseRouteUrl(url);\n let matchingRoute;\n flattenedRoutes.forEach(route => {\n if (matchingRoute) return;\n const keys = [];\n const pathsToMatch = [route.path || '/'];\n if (route.alias) {\n if (typeof route.alias === 'string') pathsToMatch.push(route.alias);else if (Array.isArray(route.alias)) {\n route.alias.forEach(aliasPath => {\n pathsToMatch.push(aliasPath);\n });\n }\n }\n let matched;\n pathsToMatch.forEach(pathToMatch => {\n if (matched) return;\n matched = pathToRegexp(pathToMatch, keys).exec(path || '/');\n });\n if (matched) {\n keys.forEach((keyObj, index) => {\n if (typeof keyObj.name === 'number') return;\n const paramValue = matched[index + 1];\n if (typeof paramValue === 'undefined' || paramValue === null) {\n params[keyObj.name] = paramValue;\n } else {\n params[keyObj.name] = decodeURIComponent(paramValue);\n }\n });\n let parentPath;\n if (route.parentPath) {\n parentPath = (path || '/').split('/').slice(0, route.parentPath.split('/').length - 1).join('/');\n }\n matchingRoute = {\n query,\n hash,\n params,\n url,\n path: path || '/',\n parentPath,\n route,\n name: route.name\n };\n }\n });\n return matchingRoute;\n }\n\n // eslint-disable-next-line\n replaceRequestUrlParams(url, options) {\n if (url === void 0) {\n url = '';\n }\n if (options === void 0) {\n options = {};\n }\n let compiledUrl = url;\n if (typeof compiledUrl === 'string' && compiledUrl.indexOf('{{') >= 0 && options && options.route && options.route.params && Object.keys(options.route.params).length) {\n Object.keys(options.route.params).forEach(paramName => {\n const regExp = new RegExp(`{{${paramName}}}`, 'g');\n compiledUrl = compiledUrl.replace(regExp, options.route.params[paramName] || '');\n });\n }\n return compiledUrl;\n }\n removeFromXhrCache(url) {\n const router = this;\n const xhrCache = router.cache.xhr;\n let index = false;\n for (let i = 0; i < xhrCache.length; i += 1) {\n if (xhrCache[i].url === url) index = i;\n }\n if (index !== false) xhrCache.splice(index, 1);\n }\n xhrRequest(requestUrl, options) {\n const router = this;\n const params = router.params;\n const {\n ignoreCache\n } = options;\n let url = requestUrl;\n let hasQuery = url.indexOf('?') >= 0;\n if (params.passRouteQueryToRequest && options && options.route && options.route.query && Object.keys(options.route.query).length) {\n url += `${hasQuery ? '&' : '?'}${serializeObject(options.route.query)}`;\n hasQuery = true;\n }\n if (params.passRouteParamsToRequest && options && options.route && options.route.params && Object.keys(options.route.params).length) {\n url += `${hasQuery ? '&' : '?'}${serializeObject(options.route.params)}`;\n hasQuery = true;\n }\n if (url.indexOf('{{') >= 0) {\n url = router.replaceRequestUrlParams(url, options);\n }\n // should we ignore get params or not\n if (params.xhrCacheIgnoreGetParameters && url.indexOf('?') >= 0) {\n url = url.split('?')[0];\n }\n return new Promise((resolve, reject) => {\n if (params.xhrCache && !ignoreCache && url.indexOf('nocache') < 0 && params.xhrCacheIgnore.indexOf(url) < 0) {\n for (let i = 0; i < router.cache.xhr.length; i += 1) {\n const cachedUrl = router.cache.xhr[i];\n if (cachedUrl.url === url) {\n // Check expiration\n if (now() - cachedUrl.time < params.xhrCacheDuration) {\n // Load from cache\n resolve(cachedUrl.content);\n return;\n }\n }\n }\n }\n router.xhrAbortController = new AbortController();\n let fetchRes;\n fetch(url, {\n signal: router.xhrAbortController.signal,\n method: 'GET'\n }).then(res => {\n fetchRes = res;\n return res.text();\n }).then(responseText => {\n const {\n status\n } = fetchRes;\n router.emit('routerAjaxComplete', fetchRes);\n if (status !== 'error' && status !== 'timeout' && status >= 200 && status < 300 || status === 0) {\n if (params.xhrCache && responseText !== '') {\n router.removeFromXhrCache(url);\n router.cache.xhr.push({\n url,\n time: now(),\n content: responseText\n });\n }\n router.emit('routerAjaxSuccess', fetchRes, options);\n resolve(responseText);\n } else {\n router.emit('routerAjaxError', fetchRes, options);\n reject(fetchRes);\n }\n }).catch(err => {\n reject(err);\n });\n });\n }\n setNavbarPosition($el, position, ariaHidden) {\n const router = this;\n $el.removeClass('navbar-previous navbar-current navbar-next');\n if (position) {\n $el.addClass(`navbar-${position}`);\n }\n if (ariaHidden === false) {\n $el.removeAttr('aria-hidden');\n } else if (ariaHidden === true) {\n $el.attr('aria-hidden', 'true');\n }\n $el.trigger('navbar:position', {\n position\n });\n router.emit('navbarPosition', $el[0], position);\n }\n setPagePosition($el, position, ariaHidden) {\n const router = this;\n $el.removeClass('page-previous page-current page-next');\n $el.addClass(`page-${position}`);\n if (ariaHidden === false) {\n $el.removeAttr('aria-hidden');\n } else if (ariaHidden === true) {\n $el.attr('aria-hidden', 'true');\n }\n $el.trigger('page:position', {\n position\n });\n router.emit('pagePosition', $el[0], position);\n }\n\n // Remove theme elements\n removeThemeElements(el) {\n const router = this;\n const theme = router.app.theme;\n let toRemove;\n if (theme === 'ios') {\n toRemove = '.md-only, .if-md, .if-not-ios, .not-ios';\n } else if (theme === 'md') {\n toRemove = '.ios-only, .if-ios, .if-not-md, .not-md';\n }\n $(el).find(toRemove).remove();\n }\n getPageData(pageEl, navbarEl, from, to, route, pageFromEl) {\n if (route === void 0) {\n route = {};\n }\n const router = this;\n const $pageEl = $(pageEl).eq(0);\n const $navbarEl = $(navbarEl).eq(0);\n const currentPage = $pageEl[0].f7Page || {};\n let direction;\n let pageFrom;\n if (from === 'next' && to === 'current' || from === 'current' && to === 'previous') direction = 'forward';\n if (from === 'current' && to === 'next' || from === 'previous' && to === 'current') direction = 'backward';\n if (currentPage && !currentPage.fromPage) {\n const $pageFromEl = $(pageFromEl);\n if ($pageFromEl.length) {\n pageFrom = $pageFromEl[0].f7Page;\n }\n }\n pageFrom = currentPage.pageFrom || pageFrom;\n if (pageFrom && pageFrom.pageFrom) {\n pageFrom.pageFrom = null;\n }\n const page = {\n app: router.app,\n view: router.view,\n router,\n $el: $pageEl,\n el: $pageEl[0],\n $pageEl,\n pageEl: $pageEl[0],\n $navbarEl,\n navbarEl: $navbarEl[0],\n name: $pageEl.attr('data-name'),\n position: from,\n from,\n to,\n direction,\n route: currentPage.route ? currentPage.route : route,\n pageFrom\n };\n $pageEl[0].f7Page = page;\n return page;\n }\n\n // Callbacks\n pageCallback(callback, pageEl, navbarEl, from, to, options, pageFromEl) {\n if (options === void 0) {\n options = {};\n }\n if (!pageEl) return;\n const router = this;\n const $pageEl = $(pageEl);\n if (!$pageEl.length) return;\n const $navbarEl = $(navbarEl);\n const {\n route\n } = options;\n const restoreScrollTopOnBack = router.params.restoreScrollTopOnBack && !(router.params.masterDetailBreakpoint > 0 && $pageEl.hasClass('page-master') && router.app.width >= router.params.masterDetailBreakpoint);\n const keepAlive = $pageEl[0].f7Page && $pageEl[0].f7Page.route && $pageEl[0].f7Page.route.route && $pageEl[0].f7Page.route.route.keepAlive;\n if (callback === 'beforeRemove' && keepAlive) {\n callback = 'beforeUnmount'; // eslint-disable-line\n }\n\n const camelName = `page${callback[0].toUpperCase() + callback.slice(1, callback.length)}`;\n const colonName = `page:${callback.toLowerCase()}`;\n let page = {};\n if (callback === 'beforeRemove' && $pageEl[0].f7Page) {\n page = extend($pageEl[0].f7Page, {\n from,\n to,\n position: from\n });\n } else {\n page = router.getPageData($pageEl[0], $navbarEl[0], from, to, route, pageFromEl);\n }\n page.swipeBack = !!options.swipeBack;\n const {\n on = {},\n once = {}\n } = options.route ? options.route.route : {};\n if (options.on) {\n extend(on, options.on);\n }\n if (options.once) {\n extend(once, options.once);\n }\n function attachEvents() {\n if ($pageEl[0].f7RouteEventsAttached) return;\n $pageEl[0].f7RouteEventsAttached = true;\n if (on && Object.keys(on).length > 0) {\n $pageEl[0].f7RouteEventsOn = on;\n Object.keys(on).forEach(eventName => {\n on[eventName] = on[eventName].bind(router);\n $pageEl.on(eventNameToColonCase(eventName), on[eventName]);\n });\n }\n if (once && Object.keys(once).length > 0) {\n $pageEl[0].f7RouteEventsOnce = once;\n Object.keys(once).forEach(eventName => {\n once[eventName] = once[eventName].bind(router);\n $pageEl.once(eventNameToColonCase(eventName), once[eventName]);\n });\n }\n }\n function detachEvents() {\n if (!$pageEl[0].f7RouteEventsAttached) return;\n if ($pageEl[0].f7RouteEventsOn) {\n Object.keys($pageEl[0].f7RouteEventsOn).forEach(eventName => {\n $pageEl.off(eventNameToColonCase(eventName), $pageEl[0].f7RouteEventsOn[eventName]);\n });\n }\n if ($pageEl[0].f7RouteEventsOnce) {\n Object.keys($pageEl[0].f7RouteEventsOnce).forEach(eventName => {\n $pageEl.off(eventNameToColonCase(eventName), $pageEl[0].f7RouteEventsOnce[eventName]);\n });\n }\n $pageEl[0].f7RouteEventsAttached = null;\n $pageEl[0].f7RouteEventsOn = null;\n $pageEl[0].f7RouteEventsOnce = null;\n delete $pageEl[0].f7RouteEventsAttached;\n delete $pageEl[0].f7RouteEventsOn;\n delete $pageEl[0].f7RouteEventsOnce;\n }\n if (callback === 'mounted') {\n attachEvents();\n }\n if (callback === 'init') {\n if (restoreScrollTopOnBack && (from === 'previous' || !from) && to === 'current' && router.scrollHistory[page.route.url] && !$pageEl.hasClass('no-restore-scroll')) {\n let $pageContent = $pageEl.find('.page-content');\n if ($pageContent.length > 0) {\n // eslint-disable-next-line\n $pageContent = $pageContent.filter(pageContentEl => {\n return $(pageContentEl).parents('.tab:not(.tab-active)').length === 0 && !$(pageContentEl).is('.tab:not(.tab-active)');\n });\n }\n $pageContent.scrollTop(router.scrollHistory[page.route.url]);\n }\n attachEvents();\n if ($pageEl[0].f7PageInitialized) {\n $pageEl.trigger('page:reinit', page);\n router.emit('pageReinit', page);\n return;\n }\n $pageEl[0].f7PageInitialized = true;\n }\n if (restoreScrollTopOnBack && callback === 'beforeOut' && from === 'current' && to === 'previous') {\n // Save scroll position\n let $pageContent = $pageEl.find('.page-content');\n if ($pageContent.length > 0) {\n // eslint-disable-next-line\n $pageContent = $pageContent.filter(pageContentEl => {\n return $(pageContentEl).parents('.tab:not(.tab-active)').length === 0 && !$(pageContentEl).is('.tab:not(.tab-active)');\n });\n }\n router.scrollHistory[page.route.url] = $pageContent.scrollTop();\n }\n if (restoreScrollTopOnBack && callback === 'beforeOut' && from === 'current' && to === 'next') {\n // Delete scroll position\n delete router.scrollHistory[page.route.url];\n }\n $pageEl.trigger(colonName, page);\n router.emit(camelName, page);\n if (callback === 'beforeRemove' || callback === 'beforeUnmount') {\n detachEvents();\n if (!keepAlive) {\n if ($pageEl[0].f7Page && $pageEl[0].f7Page.navbarEl) {\n delete $pageEl[0].f7Page.navbarEl.f7Page;\n }\n $pageEl[0].f7Page = null;\n }\n }\n }\n saveHistory() {\n const router = this;\n const window = getWindow();\n router.view.history = router.history;\n if (router.params.browserHistory && router.params.browserHistoryStoreHistory && window.localStorage) {\n window.localStorage[`f7router-${router.view.id}-history`] = JSON.stringify(router.history);\n }\n }\n restoreHistory() {\n const router = this;\n const window = getWindow();\n if (router.params.browserHistory && router.params.browserHistoryStoreHistory && window.localStorage && window.localStorage[`f7router-${router.view.id}-history`]) {\n router.history = JSON.parse(window.localStorage[`f7router-${router.view.id}-history`]);\n router.view.history = router.history;\n }\n }\n clearHistory() {\n const router = this;\n router.history = [];\n if (router.view) router.view.history = [];\n router.saveHistory();\n }\n updateCurrentUrl(newUrl) {\n const router = this;\n appRouterCheck(router, 'updateCurrentUrl');\n // Update history\n if (router.history.length) {\n router.history[router.history.length - 1] = newUrl;\n } else {\n router.history.push(newUrl);\n }\n\n // Update current route params\n const {\n query,\n hash,\n params,\n url,\n path\n } = router.parseRouteUrl(newUrl);\n if (router.currentRoute) {\n extend(router.currentRoute, {\n query,\n hash,\n params,\n url,\n path\n });\n }\n if (router.params.browserHistory) {\n const browserHistoryRoot = router.params.browserHistoryRoot || '';\n History.replace(router.view.id, {\n url: newUrl\n }, browserHistoryRoot + router.params.browserHistorySeparator + newUrl);\n }\n\n // Save History\n router.saveHistory();\n router.emit('routeUrlUpdate', router.currentRoute, router);\n }\n getInitialUrl() {\n const router = this;\n if (router.initialUrl) {\n return {\n initialUrl: router.initialUrl,\n historyRestored: router.historyRestored\n };\n }\n const {\n app,\n view\n } = router;\n const document = getDocument();\n const window = getWindow();\n const location = app.params.url && typeof app.params.url === 'string' && typeof URL !== 'undefined' ? new URL(app.params.url) : document.location;\n let initialUrl = router.params.url;\n let documentUrl = location.href.split(location.origin)[1];\n let historyRestored;\n const {\n browserHistory,\n browserHistoryOnLoad,\n browserHistorySeparator\n } = router.params;\n let {\n browserHistoryRoot\n } = router.params;\n if ((window.cordova || window.Capacitor && window.Capacitor.isNative) && browserHistory && !browserHistorySeparator && !browserHistoryRoot && location.pathname.indexOf('index.html')) {\n // eslint-disable-next-line\n console.warn('Framework7: wrong or not complete browserHistory configuration, trying to guess browserHistoryRoot');\n browserHistoryRoot = location.pathname.split('index.html')[0];\n }\n if (!browserHistory || !browserHistoryOnLoad) {\n if (!initialUrl) {\n initialUrl = documentUrl;\n }\n if (location.search && initialUrl.indexOf('?') < 0) {\n initialUrl += location.search;\n }\n if (location.hash && initialUrl.indexOf('#') < 0) {\n initialUrl += location.hash;\n }\n } else {\n if (browserHistoryRoot && documentUrl.indexOf(browserHistoryRoot) >= 0) {\n documentUrl = documentUrl.substring(documentUrl.indexOf(browserHistoryRoot) + browserHistoryRoot.length);\n if (documentUrl === '') documentUrl = '/';\n }\n if (browserHistorySeparator.length > 0 && documentUrl.indexOf(browserHistorySeparator) >= 0) {\n initialUrl = documentUrl.substring(documentUrl.indexOf(browserHistorySeparator) + browserHistorySeparator.length);\n } else {\n initialUrl = documentUrl;\n }\n router.restoreHistory();\n if (router.history.indexOf(initialUrl) >= 0) {\n router.history = router.history.slice(0, router.history.indexOf(initialUrl) + 1);\n } else if (router.params.url === initialUrl) {\n router.history = [initialUrl];\n } else if (History.state && History.state[view.id] && History.state[view.id].url === router.history[router.history.length - 1]) {\n initialUrl = router.history[router.history.length - 1];\n } else {\n router.history = [documentUrl.split(browserHistorySeparator)[0] || '/', initialUrl];\n }\n if (router.history.length > 1) {\n historyRestored = true;\n } else {\n router.history = [];\n }\n router.saveHistory();\n }\n router.initialUrl = initialUrl;\n router.historyRestored = historyRestored;\n return {\n initialUrl,\n historyRestored\n };\n }\n init() {\n const router = this;\n const {\n app,\n view\n } = router;\n const document = getDocument();\n router.mount();\n const {\n initialUrl,\n historyRestored\n } = router.getInitialUrl();\n\n // Init Swipeback\n if (view && router.params.iosSwipeBack && app.theme === 'ios' || view && router.params.mdSwipeBack && app.theme === 'md') {\n SwipeBack(router);\n }\n const {\n browserHistory,\n browserHistoryOnLoad,\n browserHistoryAnimateOnLoad,\n browserHistoryInitialMatch\n } = router.params;\n let currentRoute;\n if (router.history.length > 1) {\n // Will load page\n const initUrl = browserHistoryInitialMatch ? initialUrl : router.history[0];\n currentRoute = router.findMatchingRoute(initUrl);\n if (!currentRoute) {\n currentRoute = extend(router.parseRouteUrl(initUrl), {\n route: {\n url: initUrl,\n path: initUrl.split('?')[0]\n }\n });\n }\n } else {\n // Don't load page\n currentRoute = router.findMatchingRoute(initialUrl);\n if (!currentRoute) {\n currentRoute = extend(router.parseRouteUrl(initialUrl), {\n route: {\n url: initialUrl,\n path: initialUrl.split('?')[0]\n }\n });\n }\n }\n if (router.$el.children('.page').length === 0 && initialUrl && router.params.loadInitialPage) {\n // No pages presented in DOM, reload new page\n router.navigate(initialUrl, {\n initial: true,\n reloadCurrent: true,\n browserHistory: false,\n animate: false,\n once: {\n modalOpen() {\n if (!historyRestored) return;\n const preloadPreviousPage = router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({\n preload: true\n });\n }\n },\n pageAfterIn() {\n if (!historyRestored) return;\n const preloadPreviousPage = router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({\n preload: true\n });\n }\n }\n }\n });\n } else if (router.$el.children('.page').length) {\n // Init current DOM page\n let hasTabRoute;\n router.currentRoute = currentRoute;\n router.$el.children('.page').each(pageEl => {\n const $pageEl = $(pageEl);\n let $navbarEl;\n router.setPagePosition($pageEl, 'current');\n if (router.dynamicNavbar) {\n $navbarEl = $pageEl.children('.navbar');\n if ($navbarEl.length > 0) {\n if (!router.$navbarsEl.parents(document).length) {\n router.$el.prepend(router.$navbarsEl);\n }\n router.setNavbarPosition($navbarEl, 'current');\n router.$navbarsEl.append($navbarEl);\n if ($navbarEl.children('.title-large').length) {\n $navbarEl.addClass('navbar-large');\n }\n $pageEl.children('.navbar').remove();\n } else {\n router.$navbarsEl.addClass('navbar-hidden');\n if ($navbarEl.children('.title-large').length) {\n router.$navbarsEl.addClass('navbar-hidden navbar-large-hidden');\n }\n }\n }\n if (router.currentRoute && router.currentRoute.route && (router.currentRoute.route.master === true || typeof router.currentRoute.route.master === 'function' && router.currentRoute.route.master(app, router)) && router.params.masterDetailBreakpoint > 0) {\n $pageEl.addClass('page-master');\n $pageEl.trigger('page:role', {\n role: 'master'\n });\n if ($navbarEl && $navbarEl.length) {\n $navbarEl.addClass('navbar-master');\n }\n view.checkMasterDetailBreakpoint();\n }\n const initOptions = {\n route: router.currentRoute\n };\n if (router.currentRoute && router.currentRoute.route && router.currentRoute.route.options) {\n extend(initOptions, router.currentRoute.route.options);\n }\n router.currentPageEl = $pageEl[0];\n if (router.dynamicNavbar && $navbarEl.length) {\n router.currentNavbarEl = $navbarEl[0];\n }\n router.removeThemeElements($pageEl);\n if (router.dynamicNavbar && $navbarEl.length) {\n router.removeThemeElements($navbarEl);\n }\n if (initOptions.route.route.tab) {\n hasTabRoute = true;\n router.tabLoad(initOptions.route.route.tab, extend({}, initOptions));\n }\n router.pageCallback('init', $pageEl, $navbarEl, 'current', undefined, initOptions);\n router.pageCallback('beforeIn', $pageEl, $navbarEl, 'current', undefined, initOptions);\n router.pageCallback('afterIn', $pageEl, $navbarEl, 'current', undefined, initOptions);\n });\n if (historyRestored) {\n if (browserHistoryInitialMatch) {\n const preloadPreviousPage = router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 1) {\n router.back({\n preload: true\n });\n }\n } else {\n router.navigate(initialUrl, {\n initial: true,\n browserHistory: false,\n history: false,\n animate: browserHistoryAnimateOnLoad,\n once: {\n pageAfterIn() {\n const preloadPreviousPage = router.params.preloadPreviousPage || router.params[`${app.theme}SwipeBack`];\n if (preloadPreviousPage && router.history.length > 2) {\n router.back({\n preload: true\n });\n }\n }\n }\n });\n }\n }\n if (!historyRestored && !hasTabRoute) {\n router.history.push(initialUrl);\n router.saveHistory();\n }\n }\n if (initialUrl && browserHistory && browserHistoryOnLoad && (!History.state || !History.state[view.id])) {\n History.initViewState(view.id, {\n url: initialUrl\n });\n }\n router.emit('local::init routerInit', router);\n }\n destroy() {\n let router = this;\n router.emit('local::destroy routerDestroy', router);\n\n // Delete props & methods\n Object.keys(router).forEach(routerProp => {\n router[routerProp] = null;\n delete router[routerProp];\n });\n router = null;\n }\n}\n\n// Load\nRouter.prototype.navigate = navigate;\nRouter.prototype.refreshPage = refreshPage;\n// Tab\nRouter.prototype.tabLoad = tabLoad;\nRouter.prototype.tabRemove = tabRemove;\n// Modal\nRouter.prototype.modalLoad = modalLoad;\nRouter.prototype.modalRemove = modalRemove;\n// Back\nRouter.prototype.back = back;\n// Clear history\nRouter.prototype.clearPreviousHistory = clearPreviousHistory;\nexport default Router;", "import Router from './router-class.js';\nexport default {\n name: 'router',\n static: {\n Router\n },\n instance: {\n cache: {\n xhr: [],\n templates: [],\n components: []\n }\n },\n create() {\n const instance = this;\n if (instance.app) {\n // View Router\n if (instance.params.router) {\n instance.router = new Router(instance.app, instance);\n }\n } else {\n // App Router\n instance.router = new Router(instance);\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nfunction resizableView(view) {\n const app = view.app;\n const support = getSupport();\n if (view.resizableInitialized) return;\n extend(view, {\n resizable: true,\n resizableWidth: null,\n resizableInitialized: true\n });\n const $htmlEl = $('html');\n const {\n $el\n } = view;\n if (!$el) return;\n let $resizeHandlerEl;\n let isTouched;\n let isMoved;\n const touchesStart = {};\n let touchesDiff;\n let width;\n let minWidth;\n let maxWidth;\n function transformCSSWidth(v) {\n if (!v) return null;\n if (v.indexOf('%') >= 0 || v.indexOf('vw') >= 0) {\n return parseInt(v, 10) / 100 * app.width;\n }\n const newV = parseInt(v, 10);\n if (Number.isNaN(newV)) return null;\n return newV;\n }\n function isResizable() {\n return view.resizable && $el.hasClass('view-resizable') && $el.hasClass('view-master-detail');\n }\n function handleTouchStart(e) {\n if (!isResizable()) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isMoved = false;\n isTouched = true;\n const $pageMasterEl = $el.children('.page-master');\n minWidth = transformCSSWidth($pageMasterEl.css('min-width'));\n maxWidth = transformCSSWidth($pageMasterEl.css('max-width'));\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n e.f7PreventSwipePanel = true;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n if (!isMoved) {\n width = $resizeHandlerEl[0].offsetLeft + $resizeHandlerEl[0].offsetWidth;\n $el.addClass('view-resizing');\n $htmlEl.css('cursor', 'col-resize');\n }\n isMoved = true;\n e.preventDefault();\n touchesDiff = pageX - touchesStart.x;\n let newWidth = width + touchesDiff;\n if (minWidth && !Number.isNaN(minWidth)) {\n newWidth = Math.max(newWidth, minWidth);\n }\n if (maxWidth && !Number.isNaN(maxWidth)) {\n newWidth = Math.min(newWidth, maxWidth);\n }\n newWidth = Math.min(Math.max(newWidth, 0), app.width);\n view.resizableWidth = newWidth;\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${newWidth}px`);\n $el.trigger('view:resize', newWidth);\n view.emit('local::resize viewResize', view, newWidth);\n }\n function handleTouchEnd() {\n $('html').css('cursor', '');\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${view.resizableWidth}px`);\n $el.removeClass('view-resizing');\n }\n function handleResize() {\n if (!view.resizableWidth) return;\n minWidth = transformCSSWidth($resizeHandlerEl.css('min-width'));\n maxWidth = transformCSSWidth($resizeHandlerEl.css('max-width'));\n if (minWidth && !Number.isNaN(minWidth) && view.resizableWidth < minWidth) {\n view.resizableWidth = Math.max(view.resizableWidth, minWidth);\n }\n if (maxWidth && !Number.isNaN(maxWidth) && view.resizableWidth > maxWidth) {\n view.resizableWidth = Math.min(view.resizableWidth, maxWidth);\n }\n view.resizableWidth = Math.min(Math.max(view.resizableWidth, 0), app.width);\n $htmlEl[0].style.setProperty('--f7-page-master-width', `${view.resizableWidth}px`);\n }\n $resizeHandlerEl = view.$el.children('.view-resize-handler');\n if (!$resizeHandlerEl.length) {\n view.$el.append('');\n $resizeHandlerEl = view.$el.children('.view-resize-handler');\n }\n view.$resizeHandlerEl = $resizeHandlerEl;\n $el.addClass('view-resizable');\n\n // Add Events\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n view.$el.on(app.touchEvents.start, '.view-resize-handler', handleTouchStart, passive);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n view.on('beforeOpen', handleResize);\n view.once('viewDestroy', () => {\n $el.removeClass('view-resizable');\n view.$resizeHandlerEl.remove();\n view.$el.off(app.touchEvents.start, '.view-resize-handler', handleTouchStart, passive);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n view.off('beforeOpen', handleResize);\n });\n}\nexport default resizableView;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Router from '../../modules/router/router.js';\nimport Framework7Class from '../../shared/class.js';\nimport resizableView from './resizable-view.js';\nclass View extends Framework7Class {\n constructor(app, el, viewParams) {\n if (viewParams === void 0) {\n viewParams = {};\n }\n super(viewParams, [app]);\n const view = this;\n const ssr = view.params.routerId;\n const defaults = {\n routes: [],\n routesAdd: []\n };\n if (!ssr) {\n const $el = $(el);\n if (!$el.length) {\n let message = \"Framework7: can't create a View instance because \";\n message += typeof el === 'string' ? `the selector \"${el}\" didn't match any element` : 'el must be an HTMLElement or Dom7 object';\n throw new Error(message);\n }\n }\n\n // Default View params\n view.params = extend({\n el\n }, defaults, app.params.view, viewParams);\n\n // Routes\n if (view.params.routes.length > 0) {\n view.routes = view.params.routes;\n } else {\n view.routes = [].concat(app.routes, view.params.routesAdd);\n }\n\n // View Props\n extend(false, view, {\n app,\n name: view.params.name,\n main: view.params.main,\n history: [],\n scrollHistory: {}\n });\n\n // Install Modules\n view.useModules();\n\n // Add to app\n app.views.push(view);\n if (view.main) {\n app.views.main = view;\n }\n if (view.name) {\n app.views[view.name] = view;\n }\n\n // Index\n view.index = app.views.indexOf(view);\n\n // View ID\n let viewId;\n if (view.name) {\n viewId = `view_${view.name}`;\n } else if (view.main) {\n viewId = 'view_main';\n } else {\n viewId = `view_${view.index}`;\n }\n view.id = viewId;\n if (!view.params.init) {\n return view;\n }\n // Init View\n if (app.initialized) {\n view.init();\n } else {\n app.on('init', () => {\n view.init();\n });\n }\n return view;\n }\n destroy() {\n let view = this;\n const app = view.app;\n view.$el.trigger('view:beforedestroy');\n view.emit('local::beforeDestroy viewBeforeDestroy', view);\n app.off('resize', view.checkMasterDetailBreakpoint);\n if (view.main) {\n app.views.main = null;\n delete app.views.main;\n } else if (view.name) {\n app.views[view.name] = null;\n delete app.views[view.name];\n }\n view.$el[0].f7View = null;\n delete view.$el[0].f7View;\n app.views.splice(app.views.indexOf(view), 1);\n\n // Destroy Router\n if (view.params.router && view.router) {\n view.router.destroy();\n }\n view.emit('local::destroy viewDestroy', view);\n\n // Delete props & methods\n Object.keys(view).forEach(viewProp => {\n view[viewProp] = null;\n delete view[viewProp];\n });\n view = null;\n }\n checkMasterDetailBreakpoint(force) {\n const view = this;\n const app = view.app;\n const wasMasterDetail = view.$el.hasClass('view-master-detail');\n const isMasterDetail = app.width >= view.params.masterDetailBreakpoint && view.$el.children('.page-master').length;\n if (typeof force === 'undefined' && isMasterDetail || force === true) {\n view.$el.addClass('view-master-detail');\n if (!wasMasterDetail) {\n view.emit('local::masterDetailBreakpoint viewMasterDetailBreakpoint', view);\n view.$el.trigger('view:masterDetailBreakpoint');\n }\n } else {\n view.$el.removeClass('view-master-detail');\n if (wasMasterDetail) {\n view.emit('local::masterDetailBreakpoint viewMasterDetailBreakpoint', view);\n view.$el.trigger('view:masterDetailBreakpoint');\n }\n }\n }\n initMasterDetail() {\n const view = this;\n const app = view.app;\n view.checkMasterDetailBreakpoint = view.checkMasterDetailBreakpoint.bind(view);\n view.checkMasterDetailBreakpoint();\n if (view.params.masterDetailResizable) {\n resizableView(view);\n }\n app.on('resize', view.checkMasterDetailBreakpoint);\n }\n mount(viewEl) {\n const view = this;\n const app = view.app;\n const el = view.params.el || viewEl;\n const $el = $(el);\n\n // Selector\n let selector;\n if (typeof el === 'string') selector = el;else {\n // Supposed to be HTMLElement or Dom7\n selector = ($el.attr('id') ? `#${$el.attr('id')}` : '') + ($el.attr('class') ? `.${$el.attr('class').replace(/ /g, '.').replace('.active', '')}` : '');\n }\n\n // DynamicNavbar\n let $navbarsEl;\n if (app.theme === 'ios' && view.params.iosDynamicNavbar) {\n $navbarsEl = $el.children('.navbars').eq(0);\n if ($navbarsEl.length === 0) {\n $navbarsEl = $('');\n }\n }\n extend(view, {\n $el,\n el: $el[0],\n main: view.main || $el.hasClass('view-main'),\n $navbarsEl,\n navbarsEl: $navbarsEl ? $navbarsEl[0] : undefined,\n selector\n });\n if (view.main) {\n app.views.main = view;\n }\n\n // Save in DOM\n if ($el && $el[0]) {\n $el[0].f7View = view;\n }\n view.emit('local::mount viewMount', view);\n }\n init(viewEl) {\n const view = this;\n view.mount(viewEl);\n if (view.params.router) {\n if (view.params.masterDetailBreakpoint > 0) {\n view.initMasterDetail();\n }\n if (view.params.initRouterOnTabShow && view.$el.hasClass('tab') && !view.$el.hasClass('tab-active')) {\n view.$el.once('tab:show', () => {\n view.router.init();\n });\n } else {\n view.router.init();\n }\n view.$el.trigger('view:init');\n view.emit('local::init viewInit', view);\n }\n }\n}\n\n// Use Router\nView.use(Router);\nexport default View;", "import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport ViewClass from '../../components/view/view-class.js';\nfunction initClicks(app) {\n function handleClicks(e) {\n const window = getWindow();\n const $clickedEl = $(e.target);\n const $clickedLinkEl = $clickedEl.closest('a');\n const isLink = $clickedLinkEl.length > 0;\n const url = isLink && $clickedLinkEl.attr('href');\n\n // Check if link is external\n if (isLink) {\n if ($clickedLinkEl.is(app.params.clicks.externalLinks) ||\n // eslint-disable-next-line\n url && url.indexOf('javascript:') >= 0) {\n const target = $clickedLinkEl.attr('target');\n if (url && window.cordova && window.cordova.InAppBrowser && (target === '_system' || target === '_blank')) {\n e.preventDefault();\n window.cordova.InAppBrowser.open(url, target);\n } else if (url && window.Capacitor && window.Capacitor.Plugins && window.Capacitor.Plugins.Browser && (target === '_system' || target === '_blank')) {\n e.preventDefault();\n window.Capacitor.Plugins.Browser.open({\n url\n });\n }\n return;\n }\n }\n\n // Modules Clicks\n Object.keys(app.modules).forEach(moduleName => {\n const moduleClicks = app.modules[moduleName].clicks;\n if (!moduleClicks) return;\n if (e.preventF7Router) return;\n Object.keys(moduleClicks).forEach(clickSelector => {\n const matchingClickedElement = $clickedEl.closest(clickSelector).eq(0);\n if (matchingClickedElement.length > 0) {\n moduleClicks[clickSelector].call(app, matchingClickedElement, matchingClickedElement.dataset(), e);\n }\n });\n });\n\n // Load Page\n let clickedLinkData = {};\n if (isLink) {\n e.preventDefault();\n clickedLinkData = $clickedLinkEl.dataset();\n }\n clickedLinkData.clickedEl = $clickedLinkEl[0];\n\n // Prevent Router\n if (e.preventF7Router) return;\n if ($clickedLinkEl.hasClass('prevent-router') || $clickedLinkEl.hasClass('router-prevent')) return;\n const validUrl = url && url.length > 0 && url[0] !== '#';\n if (validUrl || $clickedLinkEl.hasClass('back')) {\n let view;\n if (clickedLinkData.view && clickedLinkData.view === 'current') {\n view = app.views.current;\n } else if (clickedLinkData.view) {\n view = $(clickedLinkData.view)[0].f7View;\n } else {\n view = $clickedEl.parents('.view')[0] && $clickedEl.parents('.view')[0].f7View;\n if (view && view.params.linksView && (!$clickedLinkEl.hasClass('back') || $clickedLinkEl.hasClass('back') && view.router.history.length === 1)) {\n if (typeof view.params.linksView === 'string') view = $(view.params.linksView)[0].f7View;else if (view.params.linksView instanceof ViewClass) view = view.params.linksView;\n }\n }\n if (!view) {\n if (app.views.main) view = app.views.main;\n }\n if (!view || !view.router) return;\n if ($clickedLinkEl[0].f7RouteProps) {\n clickedLinkData.props = $clickedLinkEl[0].f7RouteProps;\n }\n if ($clickedLinkEl.hasClass('back')) view.router.back(url, clickedLinkData);else view.router.navigate(url, clickedLinkData);\n }\n }\n app.on('click', handleClicks);\n}\nexport default {\n name: 'clicks',\n params: {\n clicks: {\n // External Links\n externalLinks: '.external'\n }\n },\n on: {\n init() {\n const app = this;\n initClicks(app);\n }\n }\n};", "import { merge } from '../../shared/utils.js';\nexport default {\n name: 'routerComponentLoader',\n proto: {\n openIn(router, url, options) {\n const navigateOptions = {\n url,\n route: {\n path: url,\n options: {\n ...options,\n openIn: undefined\n }\n }\n };\n const params = {\n ...options\n };\n const component = (props, ctx) => {\n const {\n $h,\n $onMounted,\n $el,\n $f7\n } = ctx;\n $onMounted(() => {\n const viewEl = $el.value.find('.view');\n const view = $f7.view.create(viewEl, {\n linksView: router.view.selector,\n ignoreOpenIn: true,\n loadInitialPage: false\n });\n view.router.navigate(url, {\n props: options.props,\n reloadAll: true\n });\n });\n // eslint-disable-next-line\n return () => {\n if (options.openIn === 'popup') {\n return $h``;\n }\n if (options.openIn === 'loginScreen') {\n return $h``;\n }\n if (options.openIn === 'sheet') {\n return $h``;\n }\n if (options.openIn === 'popover') {\n return $h``;\n }\n if (options.openIn.indexOf('panel') >= 0) {\n const parts = options.openIn.split(':');\n const side = parts[1] || 'left';\n const effect = parts[2] || 'cover';\n return $h``;\n }\n };\n };\n if (options.openIn === 'popup') {\n navigateOptions.route.popup = params;\n }\n if (options.openIn === 'loginScreen') {\n navigateOptions.route.loginScreen = params;\n }\n if (options.openIn === 'sheet') {\n navigateOptions.route.sheet = params;\n }\n if (options.openIn === 'popover') {\n params.targetEl = options.clickedEl || options.targetEl;\n navigateOptions.route.popover = params;\n }\n if (options.openIn.indexOf('panel') >= 0) {\n params.targetEl = options.clickedEl || options.targetEl;\n navigateOptions.route.panel = params;\n }\n params.component = component;\n return router.navigate(navigateOptions);\n },\n componentLoader(component, componentUrl, options, resolve, reject) {\n if (options === void 0) {\n options = {};\n }\n const router = this;\n const {\n app\n } = router;\n const url = typeof component === 'string' ? component : componentUrl;\n const compiledUrl = router.replaceRequestUrlParams(url, options);\n function compile(componentFunction) {\n let context = options.context || {};\n if (typeof context === 'function') context = context.call(router);else if (typeof context === 'string') {\n try {\n context = JSON.parse(context);\n } catch (err) {\n reject(err);\n throw err;\n }\n }\n const componentContext = merge({}, context, {\n f7route: options.route,\n f7router: router\n });\n const componentProps = merge(options.route ? options.route.params || {} : {}, options.props || {}, options.routeProps || {});\n let componentEl;\n let componentRoot;\n if (options.componentOptions && options.componentOptions.el) {\n componentEl = options.componentOptions.el;\n }\n if (options.componentOptions && options.componentOptions.root) {\n componentRoot = options.componentOptions.root;\n }\n app.component.create(componentFunction, componentProps, {\n context: componentContext,\n el: componentEl,\n root: componentRoot\n }).then(createdComponent => {\n resolve(createdComponent.el);\n }).catch(err => {\n reject(err);\n throw new Error(err, {\n cause: err\n });\n });\n }\n let cachedComponent;\n if (compiledUrl && router.params.componentCache) {\n router.cache.components.forEach(cached => {\n if (cached.url === compiledUrl) cachedComponent = cached.component;\n });\n }\n if (compiledUrl && cachedComponent) {\n compile(cachedComponent);\n } else if (compiledUrl && !cachedComponent) {\n // Load via XHR\n if (router.xhrAbortController) {\n router.xhrAbortController.abort();\n router.xhrAbortController = false;\n }\n router.xhrRequest(url, options).then(loadedComponent => {\n const parsedComponent = app.component.parse(loadedComponent);\n if (router.params.componentCache) {\n router.cache.components.push({\n url: compiledUrl,\n component: parsedComponent\n });\n }\n compile(parsedComponent);\n }).catch(err => {\n reject();\n throw err;\n });\n } else {\n compile(component);\n }\n },\n modalComponentLoader(_temp) {\n let {\n component,\n componentUrl,\n options,\n resolve,\n reject\n } = _temp === void 0 ? {} : _temp;\n const router = this;\n router.componentLoader(component, componentUrl, options, el => {\n resolve(el);\n }, reject);\n },\n tabComponentLoader(_temp2) {\n let {\n component,\n componentUrl,\n options,\n resolve,\n reject\n } = _temp2 === void 0 ? {} : _temp2;\n const router = this;\n router.componentLoader(component, componentUrl, options, el => {\n resolve(el);\n }, reject);\n },\n pageComponentLoader(_temp3) {\n let {\n component,\n componentUrl,\n options,\n resolve,\n reject\n } = _temp3 === void 0 ? {} : _temp3;\n const router = this;\n router.componentLoader(component, componentUrl, options, function (el, newOptions) {\n if (newOptions === void 0) {\n newOptions = {};\n }\n resolve(el, newOptions);\n }, reject);\n }\n }\n};", "var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n", "import htm from 'htm';\nimport { flattenArray } from '../../shared/utils.js';\nconst ignoreChildren = [false, null, '', undefined];\nconst h = function (type, props) {\n for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n children[_key - 2] = arguments[_key];\n }\n return {\n type,\n props: props || {},\n children: flattenArray(children.filter(child => ignoreChildren.indexOf(child) < 0))\n };\n};\nconst $h = htm.bind(h);\nexport default $h;", "export function vnode(sel, data, children, text, elm) {\n var key = data === undefined ? undefined : data.key;\n return {\n sel: sel,\n data: data,\n children: children,\n text: text,\n elm: elm,\n key: key\n };\n}\nexport default vnode;", "export var array = Array.isArray;\nexport function primitive(s) {\n return typeof s === 'string' || typeof s === 'number';\n}", "import { vnode } from './vnode.js';\nimport * as is from './is.js';\nfunction addNS(data, children, sel) {\n data.ns = 'http://www.w3.org/2000/svg';\n if (sel !== 'foreignObject' && children !== undefined) {\n for (var i = 0; i < children.length; ++i) {\n var childData = children[i].data;\n if (childData !== undefined) {\n addNS(childData, children[i].children, children[i].sel);\n }\n }\n }\n}\nexport function h(sel, b, c) {\n var data = {},\n children,\n text,\n i;\n if (c !== undefined) {\n data = b;\n if (is.array(c)) {\n children = c;\n } else if (is.primitive(c)) {\n text = c;\n } else if (c && c.sel) {\n children = [c];\n }\n } else if (b !== undefined) {\n if (is.array(b)) {\n children = b;\n } else if (is.primitive(b)) {\n text = b;\n } else if (b && b.sel) {\n children = [b];\n } else {\n data = b;\n }\n }\n if (is.array(children)) {\n for (i = 0; i < children.length; ++i) {\n if (is.primitive(children[i])) children[i] = vnode(undefined, undefined, undefined, children[i], undefined);\n }\n }\n if (sel[0] === 's' && sel[1] === 'v' && sel[2] === 'g' && (sel.length === 3 || sel[3] === '.' || sel[3] === '#')) {\n addNS(data, children, sel);\n }\n return vnode(sel, data, children, text, undefined);\n}\n;\nexport default h;", "export default {};", "/* eslint no-use-before-define: \"off\" */\n/* eslint import/no-named-as-default: \"off\" */\nimport h from './snabbdom/h.js';\nimport customComponents from './custom-components.js';\nimport { isObject, eventNameToColonCase } from '../../shared/utils.js';\nconst SELF_CLOSING = 'area base br col command embed hr img input keygen link menuitem meta param source track wbr'.split(' ');\nconst PROPS_ATTRS = 'hidden checked disabled readonly selected autofocus autoplay required multiple value indeterminate routeProps innerHTML'.split(' ');\nconst BOOLEAN_PROPS = 'hidden checked disabled readonly selected autofocus autoplay required multiple readOnly indeterminate'.split(' ');\nconst getTagName = treeNode => {\n return typeof treeNode.type === 'function' ? treeNode.type.name || 'CustomComponent' : treeNode.type;\n};\nconst toCamelCase = name => {\n return name.split('-').map((word, index) => {\n if (index === 0) return word.toLowerCase();\n return word[0].toUpperCase() + word.substr(1);\n }).join('');\n};\nconst propsFromAttrs = function () {\n const context = {};\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n args.forEach(function (obj) {\n if (obj === void 0) {\n obj = {};\n }\n Object.keys(obj).forEach(key => {\n context[toCamelCase(key)] = obj[key];\n });\n });\n return context;\n};\nconst createCustomComponent = _ref => {\n let {\n f7,\n treeNode,\n vnode,\n data\n } = _ref;\n const component = typeof treeNode.type === 'function' ? treeNode.type : customComponents[treeNode.type];\n f7.component.create(component, propsFromAttrs(data.attrs || {}, data.props || {}), {\n el: vnode.elm,\n children: treeNode.children\n }).then(c => {\n if (vnode.data && vnode.data.on && c && c.$el) {\n Object.keys(vnode.data.on).forEach(eventName => {\n c.$el.on(eventName, vnode.data.on[eventName]);\n });\n }\n // eslint-disable-next-line\n vnode.elm.__component__ = c;\n });\n};\nconst updateCustomComponent = vnode => {\n // eslint-disable-next-line\n const component = vnode && vnode.elm && vnode.elm.__component__;\n if (!component) return;\n const newProps = propsFromAttrs(vnode.data.attrs || {}, vnode.data.props || {});\n component.children = vnode.data.treeNode.children;\n Object.assign(component.props, newProps);\n component.update();\n};\nconst destroyCustomComponent = vnode => {\n // eslint-disable-next-line\n const component = vnode && vnode.elm && vnode.elm.__component__;\n if (component) {\n const {\n el,\n $el\n } = component;\n if (vnode.data && vnode.data.on && $el) {\n Object.keys(vnode.data.on).forEach(eventName => {\n $el.off(eventName, vnode.data.on[eventName]);\n });\n }\n if (component.destroy) component.destroy();\n if (el && el.parentNode) el.parentNode.removeChild(el);\n delete vnode.elm.__component__; // eslint-disable-line\n }\n};\n\nconst isCustomComponent = treeNodeType => {\n return typeof treeNodeType === 'function' || treeNodeType && treeNodeType.indexOf('-') > 0 && customComponents[treeNodeType];\n};\nfunction getHooks(treeNode, data, f7, initial, isRoot) {\n const hooks = {};\n const insert = [];\n const destroy = [];\n const update = [];\n const postpatch = [];\n let isFakeElement = false;\n let tagName = getTagName(treeNode);\n if (data && data.attrs && data.attrs.component) {\n tagName = data.attrs.component;\n delete data.attrs.component;\n isFakeElement = true;\n }\n const isCustom = isCustomComponent(treeNode.type);\n if (isCustom) {\n insert.push(vnode => {\n if (vnode.sel !== tagName && !isFakeElement) return;\n createCustomComponent({\n f7,\n treeNode,\n vnode,\n data\n });\n });\n destroy.push(vnode => {\n destroyCustomComponent(vnode);\n });\n update.push((oldVnode, vnode) => {\n updateCustomComponent(vnode);\n });\n }\n if (!isCustom) {\n if (!data || !data.attrs || !data.attrs.class) return hooks;\n const classNames = data.attrs.class;\n classNames.split(' ').forEach(className => {\n if (!initial) {\n insert.push(...f7.getVnodeHooks('insert', className));\n }\n destroy.push(...f7.getVnodeHooks('destroy', className));\n update.push(...f7.getVnodeHooks('update', className));\n postpatch.push(...f7.getVnodeHooks('postpatch', className));\n });\n }\n if (isRoot && !initial) {\n postpatch.push((oldVnode, vnode) => {\n const vn = vnode || oldVnode;\n if (!vn) return;\n if (vn.data && vn.data.component) {\n vn.data.component.hook('onUpdated');\n }\n });\n }\n if (insert.length === 0 && destroy.length === 0 && update.length === 0 && postpatch.length === 0) {\n return hooks;\n }\n if (insert.length) {\n hooks.insert = vnode => {\n insert.forEach(f => f(vnode));\n };\n }\n if (destroy.length) {\n hooks.destroy = vnode => {\n destroy.forEach(f => f(vnode));\n };\n }\n if (update.length) {\n hooks.update = (oldVnode, vnode) => {\n update.forEach(f => f(oldVnode, vnode));\n };\n }\n if (postpatch.length) {\n hooks.postpatch = (oldVnode, vnode) => {\n postpatch.forEach(f => f(oldVnode, vnode));\n };\n }\n return hooks;\n}\nconst getEventHandler = function (eventHandler, _temp) {\n let {\n stop,\n prevent,\n once\n } = _temp === void 0 ? {} : _temp;\n let fired = false;\n function handler() {\n const e = arguments.length <= 0 ? undefined : arguments[0];\n if (once && fired) return;\n if (stop) e.stopPropagation();\n if (prevent) e.preventDefault();\n fired = true;\n eventHandler(...arguments);\n }\n return handler;\n};\nconst getData = (treeNode, component, f7, initial, isRoot) => {\n const data = {\n component,\n treeNode\n };\n const tagName = getTagName(treeNode);\n Object.keys(treeNode.props).forEach(attrName => {\n const attrValue = treeNode.props[attrName];\n if (typeof attrValue === 'undefined') return;\n if (PROPS_ATTRS.indexOf(attrName) >= 0) {\n // Props\n if (!data.props) data.props = {};\n if (attrName === 'readonly') {\n // eslint-disable-next-line\n attrName = 'readOnly';\n }\n if (attrName === 'routeProps') {\n // eslint-disable-next-line\n attrName = 'f7RouteProps';\n }\n if (tagName === 'option' && attrName === 'value') {\n if (!data.attrs) data.attrs = {};\n data.attrs.value = attrValue;\n }\n if (BOOLEAN_PROPS.indexOf(attrName) >= 0) {\n // eslint-disable-next-line\n data.props[attrName] = attrValue === false ? false : true;\n } else {\n data.props[attrName] = attrValue;\n }\n } else if (attrName === 'key') {\n // Key\n data.key = attrValue;\n } else if (attrName.indexOf('@') === 0 || attrName.indexOf('on') === 0 && attrName.length > 2) {\n // Events\n if (!data.on) data.on = {};\n let eventName = attrName.indexOf('@') === 0 ? attrName.substr(1) : eventNameToColonCase(attrName.substr(2));\n let stop = false;\n let prevent = false;\n let once = false;\n if (eventName.indexOf('.') >= 0) {\n eventName.split('.').forEach((eventNamePart, eventNameIndex) => {\n if (eventNameIndex === 0) eventName = eventNamePart;else {\n if (eventNamePart === 'stop') stop = true;\n if (eventNamePart === 'prevent') prevent = true;\n if (eventNamePart === 'once') once = true;\n }\n });\n }\n data.on[eventName] = getEventHandler(attrValue, {\n stop,\n prevent,\n once\n });\n } else if (attrName === 'style') {\n // Style\n if (typeof attrValue !== 'string') {\n data.style = attrValue;\n } else {\n if (!data.attrs) data.attrs = {};\n data.attrs.style = attrValue;\n }\n } else {\n // Rest of attribures\n if (!data.attrs) data.attrs = {};\n data.attrs[attrName] = attrValue;\n\n // ID -> Key\n if (attrName === 'id' && !data.key && !isRoot) {\n data.key = attrValue;\n }\n }\n });\n const hooks = getHooks(treeNode, data, f7, initial, isRoot);\n hooks.prepatch = (oldVnode, vnode) => {\n if (!oldVnode || !vnode) return;\n if (oldVnode && oldVnode.data && oldVnode.data.props) {\n Object.keys(oldVnode.data.props).forEach(key => {\n if (BOOLEAN_PROPS.indexOf(key) < 0) return;\n if (!vnode.data) vnode.data = {};\n if (!vnode.data.props) vnode.data.props = {};\n if (oldVnode.data.props[key] === true && !(key in vnode.data.props)) {\n vnode.data.props[key] = false;\n }\n });\n }\n };\n data.hook = hooks;\n return data;\n};\nconst getChildren = (treeNode, component, f7, initial) => {\n if (treeNode && treeNode.type && SELF_CLOSING.indexOf(treeNode.type) >= 0) {\n return [];\n }\n const children = [];\n const nodes = treeNode.children;\n for (let i = 0; i < nodes.length; i += 1) {\n const childNode = nodes[i];\n const child = treeNodeToVNode(childNode, component, f7, initial, false);\n if (Array.isArray(child)) {\n children.push(...child);\n } else if (child) {\n children.push(child);\n }\n }\n return children;\n};\nconst getSlots = (treeNode, component, f7, initial) => {\n const slotName = treeNode.props.name || 'default';\n const slotNodes = (component.children || []).filter(childTreeNode => {\n let childSlotName = 'default';\n if (childTreeNode.props) {\n childSlotName = childTreeNode.props.slot || 'default';\n }\n return childSlotName === slotName;\n });\n if (slotNodes.length === 0) {\n return getChildren(treeNode, component, f7, initial);\n }\n return slotNodes.map(subTreeNode => treeNodeToVNode(subTreeNode, component, f7, initial));\n};\nconst isTreeNode = treeNode => {\n return isObject(treeNode) && 'props' in treeNode && 'type' in treeNode && 'children' in treeNode;\n};\nconst treeNodeToVNode = (treeNode, component, f7, initial, isRoot) => {\n if (!isTreeNode(treeNode)) {\n return String(treeNode);\n }\n if (treeNode.type === 'slot') {\n return getSlots(treeNode, component, f7, initial);\n }\n const data = getData(treeNode, component, f7, initial, isRoot);\n const children = isCustomComponent(treeNode.type) ? [] : getChildren(treeNode, component, f7, initial);\n return h(getTagName(treeNode), data, children);\n};\nexport default function vdom(tree, component, initial) {\n if (tree === void 0) {\n tree = {};\n }\n return treeNodeToVNode(tree, component, component.f7, initial, true);\n}", "function createElement(tagName) {\n return document.createElement(tagName);\n}\nfunction createElementNS(namespaceURI, qualifiedName) {\n return document.createElementNS(namespaceURI, qualifiedName);\n}\nfunction createTextNode(text) {\n return document.createTextNode(text);\n}\nfunction createComment(text) {\n return document.createComment(text);\n}\nfunction insertBefore(parentNode, newNode, referenceNode) {\n if (referenceNode && referenceNode.parentNode !== parentNode) {\n if (referenceNode.__component__) referenceNode = referenceNode.__component__.el;\n }\n parentNode.insertBefore(newNode, referenceNode);\n}\nfunction removeChild(node, child) {\n if (!node) return;\n node.removeChild(child);\n}\nfunction appendChild(node, child) {\n node.appendChild(child);\n}\nfunction parentNode(node) {\n return node.parentNode;\n}\nfunction nextSibling(node) {\n return node.nextSibling;\n}\nfunction tagName(elm) {\n return elm.tagName;\n}\nfunction setTextContent(node, text) {\n node.textContent = text;\n}\nfunction getTextContent(node) {\n return node.textContent;\n}\nfunction isElement(node) {\n return node.nodeType === 1;\n}\nfunction isText(node) {\n return node.nodeType === 3;\n}\nfunction isComment(node) {\n return node.nodeType === 8;\n}\nexport var htmlDomApi = {\n createElement: createElement,\n createElementNS: createElementNS,\n createTextNode: createTextNode,\n createComment: createComment,\n insertBefore: insertBefore,\n removeChild: removeChild,\n appendChild: appendChild,\n parentNode: parentNode,\n nextSibling: nextSibling,\n tagName: tagName,\n setTextContent: setTextContent,\n getTextContent: getTextContent,\n isElement: isElement,\n isText: isText,\n isComment: isComment\n};\nexport default htmlDomApi;", "import vnode from './vnode.js';\nimport * as is from './is.js';\nimport htmlDomApi from './htmldomapi.js';\nfunction isUndef(s) {\n return s === undefined;\n}\nfunction isDef(s) {\n return s !== undefined;\n}\nvar emptyNode = vnode('', {}, [], undefined, undefined);\nfunction sameVnode(vnode1, vnode2) {\n return vnode1.key === vnode2.key && vnode1.sel === vnode2.sel;\n}\nfunction isVnode(vnode) {\n return vnode.sel !== undefined;\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n var i,\n map = {},\n key,\n ch;\n for (i = beginIdx; i <= endIdx; ++i) {\n ch = children[i];\n if (ch != null) {\n key = ch.key;\n if (key !== undefined) map[key] = i;\n }\n }\n return map;\n}\nvar hooks = ['create', 'update', 'remove', 'destroy', 'pre', 'post'];\nexport { h } from './h.js';\nexport { thunk } from './thunk.js';\nexport function init(modules, domApi) {\n var i,\n j,\n cbs = {};\n var api = domApi !== undefined ? domApi : htmlDomApi;\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n var hook = modules[j][hooks[i]];\n if (hook !== undefined) {\n cbs[hooks[i]].push(hook);\n }\n }\n }\n function emptyNodeAt(elm) {\n var id = elm.id ? '#' + elm.id : '';\n var c = elm.className ? '.' + elm.className.split(' ').join('.') : '';\n return vnode(api.tagName(elm).toLowerCase() + id + c, {}, [], undefined, elm);\n }\n function createRmCb(childElm, listeners) {\n return function rmCb() {\n if (--listeners === 0) {\n var parent_1 = api.parentNode(childElm);\n api.removeChild(parent_1, childElm);\n }\n };\n }\n function createElm(vnode, insertedVnodeQueue) {\n var i,\n data = vnode.data;\n if (data !== undefined) {\n if (isDef(i = data.hook) && isDef(i = i.init)) {\n i(vnode);\n data = vnode.data;\n }\n }\n var children = vnode.children,\n sel = vnode.sel;\n if (sel === '!') {\n if (isUndef(vnode.text)) {\n vnode.text = '';\n }\n vnode.elm = api.createComment(vnode.text);\n } else if (sel !== undefined) {\n // Parse selector\n var hashIdx = sel.indexOf('#');\n var dotIdx = sel.indexOf('.', hashIdx);\n var hash = hashIdx > 0 ? hashIdx : sel.length;\n var dot = dotIdx > 0 ? dotIdx : sel.length;\n var tag = hashIdx !== -1 || dotIdx !== -1 ? sel.slice(0, Math.min(hash, dot)) : sel;\n var elm = vnode.elm = isDef(data) && isDef(i = data.ns) ? api.createElementNS(i, tag) : api.createElement(tag);\n if (hash < dot) elm.setAttribute('id', sel.slice(hash + 1, dot));\n if (dotIdx > 0) elm.setAttribute('class', sel.slice(dot + 1).replace(/\\./g, ' '));\n for (i = 0; i < cbs.create.length; ++i) cbs.create[i](emptyNode, vnode);\n if (is.array(children)) {\n for (i = 0; i < children.length; ++i) {\n var ch = children[i];\n if (ch != null) {\n api.appendChild(elm, createElm(ch, insertedVnodeQueue));\n }\n }\n } else if (is.primitive(vnode.text)) {\n api.appendChild(elm, api.createTextNode(vnode.text));\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (i.create) i.create(emptyNode, vnode);\n if (i.insert) insertedVnodeQueue.push(vnode);\n }\n } else {\n vnode.elm = api.createTextNode(vnode.text);\n }\n return vnode.elm;\n }\n function addVnodes(parentElm, before, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (ch != null) {\n api.insertBefore(parentElm, createElm(ch, insertedVnodeQueue), before);\n }\n }\n }\n function invokeDestroyHook(vnode) {\n var i,\n j,\n data = vnode.data;\n if (data !== undefined) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) i(vnode);\n for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode);\n if (vnode.children !== undefined) {\n for (j = 0; j < vnode.children.length; ++j) {\n i = vnode.children[j];\n if (i != null && typeof i !== \"string\") {\n invokeDestroyHook(i);\n }\n }\n }\n }\n }\n function removeVnodes(parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var i_1 = void 0,\n listeners = void 0,\n rm = void 0,\n ch = vnodes[startIdx];\n if (ch != null) {\n if (isDef(ch.sel)) {\n invokeDestroyHook(ch);\n listeners = cbs.remove.length + 1;\n rm = createRmCb(ch.elm, listeners);\n for (i_1 = 0; i_1 < cbs.remove.length; ++i_1) cbs.remove[i_1](ch, rm);\n if (isDef(i_1 = ch.data) && isDef(i_1 = i_1.hook) && isDef(i_1 = i_1.remove)) {\n i_1(ch, rm);\n } else {\n rm();\n }\n } else {\n api.removeChild(parentElm, ch.elm);\n }\n }\n }\n }\n function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue) {\n var oldStartIdx = 0,\n newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx;\n var idxInOld;\n var elmToMove;\n var before;\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (oldStartVnode == null) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode might have been moved left\n } else if (oldEndVnode == null) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (newStartVnode == null) {\n newStartVnode = newCh[++newStartIdx];\n } else if (newEndVnode == null) {\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) {\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) {\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n api.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (oldKeyToIdx === undefined) {\n oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n }\n idxInOld = oldKeyToIdx[newStartVnode.key];\n if (isUndef(idxInOld)) {\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n newStartVnode = newCh[++newStartIdx];\n } else {\n elmToMove = oldCh[idxInOld];\n if (elmToMove.sel !== newStartVnode.sel) {\n api.insertBefore(parentElm, createElm(newStartVnode, insertedVnodeQueue), oldStartVnode.elm);\n } else {\n patchVnode(elmToMove, newStartVnode, insertedVnodeQueue);\n oldCh[idxInOld] = undefined;\n api.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm);\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n }\n if (oldStartIdx <= oldEndIdx || newStartIdx <= newEndIdx) {\n if (oldStartIdx > oldEndIdx) {\n before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n }\n function patchVnode(oldVnode, vnode, insertedVnodeQueue) {\n var i, hook;\n if (isDef(i = vnode.data) && isDef(hook = i.hook) && isDef(i = hook.prepatch)) {\n i(oldVnode, vnode);\n }\n var elm = vnode.elm = oldVnode.elm;\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (oldVnode === vnode) return;\n if (vnode.data !== undefined) {\n for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode);\n i = vnode.data.hook;\n if (isDef(i) && isDef(i = i.update)) i(oldVnode, vnode);\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue);\n } else if (isDef(ch)) {\n if (isDef(oldVnode.text)) api.setTextContent(elm, '');\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n api.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n api.setTextContent(elm, vnode.text);\n }\n if (isDef(hook) && isDef(i = hook.postpatch)) {\n i(oldVnode, vnode);\n }\n }\n return function patch(oldVnode, vnode) {\n var i, elm, parent;\n var insertedVnodeQueue = [];\n for (i = 0; i < cbs.pre.length; ++i) cbs.pre[i]();\n if (!isVnode(oldVnode)) {\n oldVnode = emptyNodeAt(oldVnode);\n }\n if (sameVnode(oldVnode, vnode)) {\n patchVnode(oldVnode, vnode, insertedVnodeQueue);\n } else {\n elm = oldVnode.elm;\n parent = api.parentNode(elm);\n createElm(vnode, insertedVnodeQueue);\n if (parent !== null) {\n api.insertBefore(parent, vnode.elm, api.nextSibling(elm));\n removeVnodes(parent, [oldVnode], 0, 0);\n }\n }\n for (i = 0; i < insertedVnodeQueue.length; ++i) {\n insertedVnodeQueue[i].data.hook.insert(insertedVnodeQueue[i]);\n }\n for (i = 0; i < cbs.post.length; ++i) cbs.post[i]();\n return vnode;\n };\n}", "var xlinkNS = 'http://www.w3.org/1999/xlink';\nvar xmlNS = 'http://www.w3.org/XML/1998/namespace';\nvar colonChar = 58;\nvar xChar = 120;\nfunction updateAttrs(oldVnode, vnode) {\n var key,\n elm = vnode.elm,\n oldAttrs = oldVnode.data.attrs,\n attrs = vnode.data.attrs;\n if (!oldAttrs && !attrs) return;\n if (oldAttrs === attrs) return;\n oldAttrs = oldAttrs || {};\n attrs = attrs || {};\n // update modified attributes, add new attributes\n for (key in attrs) {\n var cur = attrs[key];\n var old = oldAttrs[key];\n if (old !== cur) {\n if (cur === true) {\n elm.setAttribute(key, \"\");\n } else if (cur === false) {\n elm.removeAttribute(key);\n } else {\n if (key.charCodeAt(0) !== xChar) {\n elm.setAttribute(key, cur);\n } else if (key.charCodeAt(3) === colonChar) {\n // Assume xml namespace\n elm.setAttributeNS(xmlNS, key, cur);\n } else if (key.charCodeAt(5) === colonChar) {\n // Assume xlink namespace\n elm.setAttributeNS(xlinkNS, key, cur);\n } else {\n elm.setAttribute(key, cur);\n }\n }\n }\n }\n // remove removed attributes\n // use `in` operator since the previous `for` iteration uses it (.i.e. add even attributes with undefined value)\n // the other option is to remove all attributes with value == undefined\n for (key in oldAttrs) {\n if (!(key in attrs)) {\n elm.removeAttribute(key);\n }\n }\n}\nexport var attributesModule = {\n create: updateAttrs,\n update: updateAttrs\n};\nexport default attributesModule;", "function updateProps(oldVnode, vnode) {\n var key,\n cur,\n old,\n elm = vnode.elm,\n oldProps = oldVnode.data.props,\n props = vnode.data.props;\n if (!oldProps && !props) return;\n if (oldProps === props) return;\n oldProps = oldProps || {};\n props = props || {};\n for (key in oldProps) {\n if (!props[key]) {\n delete elm[key];\n }\n }\n for (key in props) {\n cur = props[key];\n old = oldProps[key];\n if (old !== cur && (key !== 'value' || elm[key] !== cur)) {\n elm[key] = cur;\n }\n }\n}\nexport var propsModule = {\n create: updateProps,\n update: updateProps\n};\nexport default propsModule;", "var raf = typeof window !== 'undefined' && window.requestAnimationFrame || setTimeout;\nvar nextFrame = function (fn) {\n raf(function () {\n raf(fn);\n });\n};\nfunction setNextFrame(obj, prop, val) {\n nextFrame(function () {\n obj[prop] = val;\n });\n}\nfunction updateStyle(oldVnode, vnode) {\n var cur,\n name,\n elm = vnode.elm,\n oldStyle = oldVnode.data.style,\n style = vnode.data.style;\n if (!oldStyle && !style) return;\n if (oldStyle === style) return;\n oldStyle = oldStyle || {};\n style = style || {};\n var oldHasDel = ('delayed' in oldStyle);\n for (name in oldStyle) {\n if (!style[name]) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.removeProperty(name);\n } else {\n elm.style[name] = '';\n }\n }\n }\n for (name in style) {\n cur = style[name];\n if (name === 'delayed' && style.delayed) {\n for (var name2 in style.delayed) {\n cur = style.delayed[name2];\n if (!oldHasDel || cur !== oldStyle.delayed[name2]) {\n setNextFrame(elm.style, name2, cur);\n }\n }\n } else if (name !== 'remove' && cur !== oldStyle[name]) {\n if (name[0] === '-' && name[1] === '-') {\n elm.style.setProperty(name, cur);\n } else {\n elm.style[name] = cur;\n }\n }\n }\n}\nfunction applyDestroyStyle(vnode) {\n var style,\n name,\n elm = vnode.elm,\n s = vnode.data.style;\n if (!s || !(style = s.destroy)) return;\n for (name in style) {\n elm.style[name] = style[name];\n }\n}\nfunction applyRemoveStyle(vnode, rm) {\n var s = vnode.data.style;\n if (!s || !s.remove) {\n rm();\n return;\n }\n var name,\n elm = vnode.elm,\n i = 0,\n compStyle,\n style = s.remove,\n amount = 0,\n applied = [];\n for (name in style) {\n applied.push(name);\n elm.style[name] = style[name];\n }\n compStyle = getComputedStyle(elm);\n var props = compStyle['transition-property'].split(', ');\n for (; i < props.length; ++i) {\n if (applied.indexOf(props[i]) !== -1) amount++;\n }\n elm.addEventListener('transitionend', function (ev) {\n if (ev.target === elm) --amount;\n if (amount === 0) rm();\n });\n}\nexport var styleModule = {\n create: updateStyle,\n update: updateStyle,\n destroy: applyDestroyStyle,\n remove: applyRemoveStyle\n};\nexport default styleModule;", "import $ from '../../shared/dom7.js';\nfunction invokeHandler(handler, event, args) {\n if (typeof handler === 'function') {\n // call function handler\n handler(event, ...args);\n }\n}\nfunction handleEvent(event, args, vnode) {\n const name = event.type;\n const on = vnode.data.on;\n // call event handler(s) if exists\n if (on && on[name]) {\n invokeHandler(on[name], event, args, vnode);\n }\n}\nfunction createListener() {\n return function handler(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n handleEvent(event, args, handler.vnode);\n };\n}\nfunction updateEvents(oldVnode, vnode) {\n const oldOn = oldVnode.data.on;\n const oldListener = oldVnode.listener;\n const oldElm = oldVnode.elm;\n const on = vnode && vnode.data.on;\n const elm = vnode && vnode.elm;\n // optimization for reused immutable handlers\n if (oldOn === on) {\n return;\n }\n // remove existing listeners which no longer used\n if (oldOn && oldListener) {\n // if element changed or deleted we remove all existing listeners unconditionally\n if (!on) {\n Object.keys(oldOn).forEach(name => {\n $(oldElm).off(name, oldListener);\n });\n } else {\n Object.keys(oldOn).forEach(name => {\n if (!on[name]) {\n $(oldElm).off(name, oldListener);\n }\n });\n }\n }\n // add new listeners which has not already attached\n if (on) {\n // reuse existing listener or create new\n const listener = oldVnode.listener || createListener();\n vnode.listener = listener;\n // update vnode for listener\n listener.vnode = vnode;\n // if element changed or added we add all needed listeners unconditionally\n if (!oldOn) {\n Object.keys(on).forEach(name => {\n $(elm).on(name, listener);\n });\n } else {\n Object.keys(on).forEach(name => {\n if (!oldOn[name]) {\n $(elm).on(name, listener);\n }\n });\n }\n }\n}\nexport default {\n create: updateEvents,\n update: updateEvents,\n destroy: updateEvents\n};", "/* eslint import/no-named-as-default: off */\nimport { init } from './snabbdom/snabbdom.js';\nimport attributesModule from './snabbdom/modules/attributes.js';\nimport propsModule from './snabbdom/modules/props.js';\nimport styleModule from './snabbdom/modules/style.js';\nimport eventListenersModule from './eventslisteners.js';\nconst patch = init([attributesModule, propsModule, styleModule, eventListenersModule]);\nexport default patch;", "import { flattenArray } from '../../shared/utils.js';\nconst ignoreChildren = [false, null, '', undefined];\nconst $jsx = function (type, props) {\n for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n children[_key - 2] = arguments[_key];\n }\n const flatChildren = flattenArray((children || []).filter(child => ignoreChildren.indexOf(child) < 0));\n if (type === 'Fragment') {\n return flatChildren;\n }\n return {\n type,\n props: props || {},\n children: flatChildren\n };\n};\nexport default $jsx;", "/* eslint no-underscore-dangle: \"off\" */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport $h from './$h.js';\nimport { id as generateId, merge, eventNameToColonCase, deleteProps } from '../../shared/utils.js';\nimport vdom from './vdom.js';\nimport patch from './patch.js';\nimport $jsx from './$jsx.js';\n\n/* eslint-disable no-shadow */\n/* eslint-disable no-return-assign */\n/* eslint-disable no-plusplus */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-sequences */\nconst types = [{\n name: 'array',\n init: i => i,\n type: i => [i].find(Array.isArray),\n update: (i, o) => [o].filter(Array.isArray).find(() => (i.length = 0, i.push(...o))),\n insert: function (i, x, o) {\n if (o === void 0) {\n o = [];\n }\n return i.splice(Math.max(x, 0), 0, ...[o].flat());\n },\n replace: function (i, x, o) {\n if (o === void 0) {\n o = [];\n }\n return i.splice(Math.max(x, 0), Math.min(++x, 1), ...[o].flat());\n },\n append: function (i, o) {\n if (o === void 0) {\n o = [];\n }\n return i.push(...[o].flat());\n },\n prepend: function (i, o) {\n if (o === void 0) {\n o = [];\n }\n return i.unshift(...[o].flat());\n },\n swap: (i, a, b) => {\n [i[a], i[b]] = [i[b], i[a]];\n },\n fromTo: function (i, a, b) {\n if (b === void 0) {\n b = a;\n }\n return i.splice(Math.max(b, 0), 0, ...i.splice(Math.max(a, 0), 1));\n },\n remove: function (i, o, a) {\n if (a === void 0) {\n a = i.map((_, x) => x);\n }\n return [o].flat().filter(i => a.includes(i)).sort((a, b) => b - a).forEach(x => i.splice(x, 1));\n },\n clear: i => i.length = 0\n}, {\n name: 'object',\n init: i => i,\n type: i => [i].filter(i => [i !== null, i !== undefined].every(i => i)).find(i => Object.getPrototypeOf(i) === Object.prototype),\n update: (i, o) => Object.assign(i, o),\n insert: () => {},\n replace: () => {},\n append: () => {},\n prepend: () => {},\n swap: () => ({}),\n // N/A\n fromTo: () => ({}),\n // N/A\n remove: (i, o) => [o].flat().forEach(k => delete i[k]),\n clear: i => Object.keys(i).forEach(k => delete i[k])\n}, {\n name: 'atoms',\n type: () => true,\n init: function (i, o) {\n if (o === void 0) {\n o = {};\n }\n return Object.defineProperty(o, 'value', {\n get: () => i,\n set: v => {\n // eslint-disable-next-line\n i = v;\n }\n }), o;\n },\n update: function (i, v) {\n if (v === void 0) {\n v = i.value;\n }\n i.value = v;\n },\n insert: () => ({}),\n // N/A\n replace: () => ({}),\n // N/A\n append: () => ({}),\n // N/A\n prepend: () => ({}),\n // N/A\n swap: () => ({}),\n // N/A\n fromTo: () => ({}),\n // N/A\n remove: () => ({}),\n // N/A\n clear: i => {\n i.value = undefined;\n }\n}];\n\n/* eslint-enable no-shadow */\n/* eslint-enable no-return-assign */\n/* eslint-enable no-plusplus */\n/* eslint-enable no-param-reassign */\n/* eslint-enable no-sequences */\n\nclass Component {\n constructor(app, component, props, _temp) {\n if (props === void 0) {\n props = {};\n }\n let {\n el,\n context,\n children\n } = _temp === void 0 ? {} : _temp;\n const document = getDocument();\n merge(this, {\n f7: app,\n props: props || {},\n context: context || {},\n id: component.id || generateId(),\n children: children || [],\n theme: {\n ios: app.theme === 'ios',\n md: app.theme === 'md'\n },\n style: component.style,\n __updateQueue: [],\n __eventHandlers: [],\n __onceEventHandlers: [],\n __onBeforeMount: [],\n __onMounted: [],\n __onBeforeUpdate: [],\n __onUpdated: [],\n __onBeforeUnmount: [],\n __onUnmounted: []\n });\n const createComponent = () => {\n return component(this.props, this.getComponentContext(true));\n };\n const getRenderFuncion = componentResult => new Promise((resolve, reject) => {\n if (typeof componentResult === 'function') {\n resolve(componentResult);\n } else if (componentResult instanceof Promise) {\n componentResult.then(render => {\n resolve(render);\n }).catch(err => {\n reject(err);\n });\n } else {\n reject(new Error('Framework7: Component render function is not a \"function\" type. Didn\\'t you forget to \"return $render\"?'));\n }\n });\n return new Promise((resolve, reject) => {\n const componentResult = createComponent();\n getRenderFuncion(componentResult).then(render => {\n this.renderFunction = render;\n const tree = this.render();\n if (el) {\n this.vnode = vdom(tree, this, true);\n if (this.style) {\n this.styleEl = document.createElement('style');\n this.styleEl.innerHTML = this.style;\n }\n this.el = el;\n patch(this.el, this.vnode);\n this.el = this.vnode.elm;\n this.$el = $(this.el);\n this.attachEvents();\n this.el.f7Component = this;\n this.mount();\n resolve(this);\n return;\n }\n // Make Dom\n if (tree) {\n this.vnode = vdom(tree, this, true);\n this.el = document.createElement(this.vnode.sel || 'div');\n patch(this.el, this.vnode);\n this.$el = $(this.el);\n }\n if (this.style) {\n this.styleEl = document.createElement('style');\n this.styleEl.innerHTML = this.style;\n }\n this.attachEvents();\n if (this.el) {\n this.el.f7Component = this;\n }\n resolve(this);\n }).catch(err => {\n reject(err);\n });\n });\n }\n on(eventName, handler) {\n if (!this.__eventHandlers) return;\n this.__eventHandlers.push({\n eventName,\n handler\n });\n }\n once(eventName, handler) {\n if (!this.__eventHandlers) return;\n this.__onceEventHandlers.push({\n eventName,\n handler\n });\n }\n getComponentRef() {\n const self = this;\n return initialValue => {\n let value = initialValue;\n const obj = {};\n Object.defineProperty(obj, 'value', {\n get() {\n return value;\n },\n set(v) {\n value = v;\n self.update();\n }\n });\n return obj;\n };\n }\n getComponentStore() {\n const {\n state,\n _gettersPlain,\n dispatch\n } = this.f7.store;\n const $store = {\n state,\n dispatch\n };\n $store.getters = new Proxy(_gettersPlain, {\n get: (target, prop) => {\n const obj = target[prop];\n const callback = v => {\n obj.value = v;\n this.update();\n };\n obj.onUpdated(callback);\n return obj;\n }\n });\n return $store;\n }\n\n /* eslint-disable no-sequences */\n getUseState() {\n var _this = this;\n return o => {\n const obj = [o].reduce(function (t, _i, _x, _a, i) {\n if (i === void 0) {\n i = t.init(_i);\n }\n return {\n state: i,\n update: v => (t.update(i, v), _this.update()),\n remove: v => (t.remove(i, v), _this.update()),\n clear: () => (t.clear(i), _this.update()),\n insert: (x, v) => (t.insert(i, x, v), _this.update()),\n replace: (x, v) => (t.replace(i, x, v), _this.update()),\n append: v => (t.append(i, v), _this.update()),\n prepend: v => (t.prepend(i, v), _this.update()),\n swap: (a, b) => (t.swap(i, a, b), _this.update()),\n fromTo: (a, b) => (t.fromTo(i, a, b), _this.update()),\n method: function (f) {\n if (f === void 0) {\n f = () => ({});\n }\n return f(i), _this.update();\n },\n async: function (f) {\n if (f === void 0) {\n f = () => Promise.reject(i);\n }\n return f(i).then(() => _this.update());\n }\n };\n }, types.find(i => i.type(o)));\n obj.length = 12;\n obj[Symbol.iterator] = function Iterate() {\n const values = Object.values(this);\n values.splice(values.indexOf(12), 1);\n let index = 0;\n return {\n next() {\n if (index < values.length) {\n const val = values[index];\n index += 1;\n return {\n value: val,\n done: false\n };\n }\n return {\n done: true\n };\n }\n };\n };\n return obj;\n };\n }\n /* eslint-enable no-sequences */\n\n getComponentContext(includeHooks) {\n const ctx = {\n $f7route: this.context.f7route,\n $f7router: this.context.f7router,\n $h,\n $,\n $id: this.id,\n $f7: this.f7,\n $f7ready: this.f7ready.bind(this),\n $theme: this.theme,\n $tick: this.tick.bind(this),\n $update: this.update.bind(this),\n $emit: this.emit.bind(this),\n $store: this.getComponentStore(),\n $ref: this.getComponentRef(),\n $el: {},\n $useState: this.getUseState()\n };\n Object.defineProperty(ctx.$el, 'value', {\n get: () => {\n return this.$el;\n }\n });\n if (includeHooks) Object.assign(ctx, {\n $on: this.on.bind(this),\n $once: this.once.bind(this),\n $onBeforeMount: handler => this.__onBeforeMount.push(handler),\n $onMounted: handler => this.__onMounted.push(handler),\n $onBeforeUpdate: handler => this.__onBeforeUpdate.push(handler),\n $onUpdated: handler => this.__onUpdated.push(handler),\n $onBeforeUnmount: handler => this.__onBeforeUnmount.push(handler),\n $onUnmounted: handler => this.__onUnmounted.push(handler)\n });\n return ctx;\n }\n render() {\n return this.renderFunction(this.getComponentContext());\n }\n emit(name, data) {\n if (!this.el) return;\n this.$el.trigger(name, data);\n }\n attachEvents() {\n const {\n $el\n } = this;\n if (!this.__eventHandlers) return;\n this.__eventHandlers.forEach(_ref => {\n let {\n eventName,\n handler\n } = _ref;\n $el.on(eventNameToColonCase(eventName), handler);\n });\n this.__onceEventHandlers.forEach(_ref2 => {\n let {\n eventName,\n handler\n } = _ref2;\n $el.once(eventNameToColonCase(eventName), handler);\n });\n }\n detachEvents() {\n const {\n $el\n } = this;\n if (!this.__eventHandlers) return;\n this.__eventHandlers.forEach(_ref3 => {\n let {\n eventName,\n handler\n } = _ref3;\n $el.on(eventNameToColonCase(eventName), handler);\n });\n this.__onceEventHandlers.forEach(_ref4 => {\n let {\n eventName,\n handler\n } = _ref4;\n $el.once(eventNameToColonCase(eventName), handler);\n });\n }\n startUpdateQueue() {\n const window = getWindow();\n if (this.__requestAnimationFrameId) return;\n const update = () => {\n this.hook('onBeforeUpdate');\n const tree = this.render();\n\n // Make Dom\n if (tree) {\n const newVNode = vdom(tree, this, false);\n this.vnode = patch(this.vnode, newVNode);\n }\n };\n this.__requestAnimationFrameId = window.requestAnimationFrame(() => {\n if (this.__updateIsPending) update();\n let resolvers = [...this.__updateQueue];\n this.__updateQueue = [];\n this.__updateIsPending = false;\n window.cancelAnimationFrame(this.__requestAnimationFrameId);\n delete this.__requestAnimationFrameId;\n delete this.__updateIsPending;\n resolvers.forEach(resolver => resolver());\n resolvers = [];\n });\n }\n tick(callback) {\n return new Promise(resolve => {\n function resolver() {\n resolve();\n if (callback) callback();\n }\n this.__updateQueue.push(resolver);\n this.startUpdateQueue();\n });\n }\n update(callback) {\n if (this.__destroyed) return new Promise(() => {});\n return new Promise(resolve => {\n const resolver = () => {\n resolve();\n if (callback) callback();\n };\n this.__updateIsPending = true;\n this.__updateQueue.push(resolver);\n this.startUpdateQueue();\n });\n }\n setState(callback) {\n return this.update(callback);\n }\n f7ready(callback) {\n if (this.f7.initialized) {\n callback(this.f7);\n return;\n }\n this.f7.once('init', () => {\n callback(this.f7);\n });\n }\n mount(mountMethod) {\n this.hook('onBeforeMount', this.$el);\n if (this.styleEl) $('head').append(this.styleEl);\n if (mountMethod) mountMethod(this.el);\n this.hook('onMounted', this.$el);\n }\n destroy() {\n if (this.__destroyed) return;\n const window = getWindow();\n this.hook('onBeforeUnmount');\n if (this.styleEl) $(this.styleEl).remove();\n this.detachEvents();\n this.hook('onUnmounted');\n // Delete component instance\n if (this.el && this.el.f7Component) {\n this.el.f7Component = null;\n delete this.el.f7Component;\n }\n // Patch with empty node\n if (this.vnode) {\n this.vnode = patch(this.vnode, {\n sel: this.vnode.sel,\n data: {}\n });\n }\n // Clear update queue\n window.cancelAnimationFrame(this.__requestAnimationFrameId);\n this.__updateQueue = [];\n this.__eventHandlers = [];\n this.__onceEventHandlers = [];\n this.__onBeforeMount = [];\n this.__onMounted = [];\n this.__onBeforeUpdate = [];\n this.__onUpdated = [];\n this.__onBeforeUnmount = [];\n this.__onUnmounted = [];\n // Delete all props\n deleteProps(this);\n this.__destroyed = true;\n }\n hook(name) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.__destroyed) return;\n this[`__${name}`].forEach(handler => {\n handler(...args);\n });\n }\n}\nComponent.$jsx = $jsx;\nexport default Component;", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { id } from '../../shared/utils.js';\nfunction parseComponent(componentString) {\n const window = getWindow();\n const document = getDocument();\n const componentId = id();\n const callbackCreateName = `f7_component_create_callback_${componentId}`;\n\n // Template\n let template;\n const hasTemplate = componentString.match(//);\n if (hasTemplate) {\n template = componentString.split(//).filter((item, index) => index > 0).join('').split('').filter((item, index, arr) => index < arr.length - 1).join('').replace(/{{#raw}}([ \\n]*)([ \\n]*){{\\/raw}}/g, '/template>{{/raw}}').replace(/([ \\n])([ \\n])/g, '/template>{{/raw}}$1');\n }\n\n // Parse Styles\n let style = null;\n if (componentString.indexOf('')[0];\n }\n if (componentString.indexOf('')[0];\n }\n\n // Parse Script\n let scriptContent;\n if (componentString.indexOf('')[0].trim();\n } else {\n scriptContent = 'return () => {return $render}';\n }\n if (!scriptContent || !scriptContent.trim()) scriptContent = 'return () => {return $render}';\n\n // Parse Template\n if (template) {\n scriptContent = scriptContent.replace('$render', `function ($$ctx) {\n var $ = $$ctx.$$;\n var $h = $$ctx.$h;\n var $root = $$ctx.$root;\n var $f7 = $$ctx.$f7;\n var $f7route = $$ctx.$f7route;\n var $f7router = $$ctx.$f7router;\n var $theme = $$ctx.$theme;\n var $update = $$ctx.$update;\n var $store = $$ctx.$store;\n var $ref = $$ctx.$ref;\n var $useState = $$ctx.$useState;\n\n return $h\\`${template}\\`\n }\n `).replace(/export default/g, 'return');\n }\n\n // Execute Script\n scriptContent = `window.${callbackCreateName} = function () {${scriptContent}}`;\n\n // Insert Script El\n const scriptEl = document.createElement('script');\n scriptEl.innerHTML = scriptContent;\n $('head').append(scriptEl);\n const component = window[callbackCreateName]();\n\n // Remove Script El\n $(scriptEl).remove();\n window[callbackCreateName] = null;\n delete window[callbackCreateName];\n\n // Assign Style\n if (style) {\n component.style = style;\n }\n\n // Component ID\n component.id = componentId;\n return component;\n}\nexport default parseComponent;", "import Component from './component-class.js';\nimport parseComponent from './parse-component.js';\nimport customComponents from './custom-components.js';\nimport $jsx from './$jsx.js';\nfunction registerComponent(tagName, component) {\n customComponents[tagName] = component;\n}\nfunction unregisterComponent(tagName) {\n delete customComponents[tagName];\n}\nexport { Component, $jsx };\nexport default {\n name: 'component',\n static: {\n Component,\n parseComponent,\n registerComponent,\n unregisterComponent\n },\n create() {\n const app = this;\n app.component = {\n registerComponent,\n unregisterComponent,\n parse(componentString) {\n return parseComponent(componentString);\n },\n create(component, props, _ref) {\n let {\n root,\n el,\n context,\n children\n } = _ref;\n return new Component(app, component, props, {\n root,\n el,\n context,\n children\n });\n }\n };\n }\n};", "import History from '../../shared/history.js';\nexport default {\n name: 'history',\n static: {\n history: History\n },\n on: {\n init() {\n History.init(this);\n }\n }\n};", "import { getWindow } from 'ssr-window';\nimport { extend } from '../../shared/utils.js';\nconst SW = {\n registrations: [],\n register(path, scope) {\n const app = this;\n const window = getWindow();\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n return new Promise((resolve, reject) => {\n app.serviceWorker.container.register(path, scope ? {\n scope\n } : {}).then(reg => {\n SW.registrations.push(reg);\n app.emit('serviceWorkerRegisterSuccess', reg);\n resolve(reg);\n }).catch(error => {\n app.emit('serviceWorkerRegisterError', error);\n reject(error);\n });\n });\n },\n unregister(registration) {\n const app = this;\n const window = getWindow();\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n let registrations;\n if (!registration) registrations = SW.registrations;else if (Array.isArray(registration)) registrations = registration;else registrations = [registration];\n return Promise.all(registrations.map(reg => new Promise((resolve, reject) => {\n reg.unregister().then(() => {\n if (SW.registrations.indexOf(reg) >= 0) {\n SW.registrations.splice(SW.registrations.indexOf(reg), 1);\n }\n app.emit('serviceWorkerUnregisterSuccess', reg);\n resolve();\n }).catch(error => {\n app.emit('serviceWorkerUnregisterError', reg, error);\n reject(error);\n });\n })));\n }\n};\nexport default {\n name: 'sw',\n params: {\n serviceWorker: {\n path: undefined,\n scope: undefined\n }\n },\n create() {\n const app = this;\n const window = getWindow();\n extend(app, {\n serviceWorker: {\n container: 'serviceWorker' in window.navigator ? window.navigator.serviceWorker : undefined,\n registrations: SW.registrations,\n register: SW.register.bind(app),\n unregister: SW.unregister.bind(app)\n }\n });\n },\n on: {\n init() {\n const window = getWindow();\n if (!('serviceWorker' in window.navigator)) return;\n const app = this;\n if (app.device.cordova || window.Capacitor && window.Capacitor.isNative) return;\n if (!app.serviceWorker.container) return;\n const paths = app.params.serviceWorker.path;\n const scope = app.params.serviceWorker.scope;\n if (!paths || Array.isArray(paths) && !paths.length) return;\n const toRegister = Array.isArray(paths) ? paths : [paths];\n toRegister.forEach(path => {\n app.serviceWorker.register(path, scope);\n });\n }\n }\n};", "/* eslint-disable no-underscore-dangle */\nimport { extend } from '../../shared/utils.js';\nfunction createStore(storeParams) {\n if (storeParams === void 0) {\n storeParams = {};\n }\n const store = {\n __store: true\n };\n const originalState = {\n ...(storeParams.state || {})\n };\n const actions = {\n ...(storeParams.actions || {})\n };\n const getters = {\n ...(storeParams.getters || {})\n };\n const state = extend({}, originalState);\n let propsQueue = [];\n const gettersDependencies = {};\n const gettersCallbacks = {};\n Object.keys(getters).forEach(getterKey => {\n gettersDependencies[getterKey] = [];\n gettersCallbacks[getterKey] = [];\n });\n const getGetterValue = getterKey => {\n return getters[getterKey]({\n state: store.state\n });\n };\n const addGetterDependencies = (getterKey, deps) => {\n if (!gettersDependencies[getterKey]) gettersDependencies[getterKey] = [];\n deps.forEach(dep => {\n if (gettersDependencies[getterKey].indexOf(dep) < 0) {\n gettersDependencies[getterKey].push(dep);\n }\n });\n };\n const addGetterCallback = (getterKey, callback) => {\n if (!gettersCallbacks[getterKey]) gettersCallbacks[getterKey] = [];\n gettersCallbacks[getterKey].push(callback);\n };\n const runGetterCallbacks = stateKey => {\n const keys = Object.keys(gettersDependencies).filter(getterKey => {\n return gettersDependencies[getterKey].indexOf(stateKey) >= 0;\n });\n keys.forEach(getterKey => {\n if (!gettersCallbacks[getterKey] || !gettersCallbacks[getterKey].length) return;\n gettersCallbacks[getterKey].forEach(callback => {\n callback(getGetterValue(getterKey));\n });\n });\n };\n const removeGetterCallback = callback => {\n Object.keys(gettersCallbacks).forEach(stateKey => {\n const callbacks = gettersCallbacks[stateKey];\n if (callbacks.indexOf(callback) >= 0) {\n callbacks.splice(callbacks.indexOf(callback), 1);\n }\n });\n };\n\n // eslint-disable-next-line\n store.__removeCallback = callback => {\n removeGetterCallback(callback);\n };\n const getterValue = function (getterKey, addCallback) {\n if (addCallback === void 0) {\n addCallback = true;\n }\n if (getterKey === 'constructor') return undefined;\n propsQueue = [];\n const value = getGetterValue(getterKey);\n addGetterDependencies(getterKey, propsQueue);\n const onUpdated = callback => {\n addGetterCallback(getterKey, callback);\n };\n const obj = {\n value,\n onUpdated\n };\n if (!addCallback) {\n return obj;\n }\n const callback = v => {\n obj.value = v;\n };\n obj.__callback = callback;\n addGetterCallback(getterKey, callback);\n // eslint-disable-next-line\n return obj;\n };\n store.state = new Proxy(state, {\n set: (target, prop, value) => {\n target[prop] = value;\n runGetterCallbacks(prop);\n return true;\n },\n get: (target, prop) => {\n propsQueue.push(prop);\n return target[prop];\n }\n });\n store.getters = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, true);\n }\n });\n store._gettersPlain = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, false);\n }\n });\n store.dispatch = (actionName, data) => {\n return new Promise((resolve, reject) => {\n if (!actions[actionName]) {\n reject();\n throw new Error(`Framework7: Store action \"${actionName}\" is not found`);\n }\n const result = actions[actionName]({\n state: store.state,\n dispatch: store.dispatch\n }, data);\n resolve(result);\n });\n };\n return store;\n}\nexport default createStore;", "import createStore from './create-store.js';\nexport { createStore };\nexport default {\n name: 'store',\n static: {\n createStore\n },\n proto: {\n createStore\n }\n};", "import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nconst isCapacitor = () => {\n const window = getWindow();\n return window.Capacitor && window.Capacitor.isNative && window.Capacitor.Plugins && window.Capacitor.Plugins.StatusBar;\n};\nconst Statusbar = {\n hide() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.hide();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.hide();\n }\n },\n show() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.show();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.show();\n }\n },\n onClick() {\n const app = this;\n let pageContent;\n if ($('.popup.modal-in').length > 0) {\n // Check for opened popup\n pageContent = $('.popup.modal-in').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else if ($('.panel.panel-in').length > 0) {\n // Check for opened panel\n pageContent = $('.panel.panel-in').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else if ($('.views > .view.tab-active').length > 0) {\n // View in tab bar app layout\n pageContent = $('.views > .view.tab-active').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else if ($('.views').length > 0) {\n pageContent = $('.views').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else {\n pageContent = app.$el.children('.view').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n }\n if (pageContent && pageContent.length > 0) {\n // Check for tab\n if (pageContent.hasClass('tab')) {\n pageContent = pageContent.parent('.tabs').children('.page-content.tab-active');\n }\n if (pageContent.length > 0) pageContent.scrollTop(0, 300);\n }\n },\n setTextColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n if (color === 'white') {\n window.StatusBar.styleLightContent();\n } else {\n window.StatusBar.styleDefault();\n }\n }\n if (isCapacitor()) {\n if (color === 'white') {\n window.Capacitor.Plugins.StatusBar.setStyle({\n style: 'DARK'\n });\n } else {\n window.Capacitor.Plugins.StatusBar.setStyle({\n style: 'LIGHT'\n });\n }\n }\n },\n setBackgroundColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.backgroundColorByHexString(color);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setBackgroundColor({\n color\n });\n }\n },\n isVisible() {\n const window = getWindow();\n const device = getDevice();\n return new Promise(resolve => {\n if (device.cordova && window.StatusBar) {\n resolve(window.StatusBar.isVisible);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.getInfo().then(info => {\n resolve(info.visible);\n });\n }\n resolve(false);\n });\n },\n overlaysWebView(overlays) {\n if (overlays === void 0) {\n overlays = true;\n }\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.overlaysWebView(overlays);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setOverlaysWebView({\n overlay: overlays\n });\n }\n },\n init() {\n const app = this;\n const window = getWindow();\n const device = getDevice();\n const params = app.params.statusbar;\n if (!params.enabled) return;\n const isCordova = device.cordova && window.StatusBar;\n const isCap = isCapacitor();\n if (isCordova || isCap) {\n if (params.scrollTopOnClick) {\n $(window).on('statusTap', Statusbar.onClick.bind(app));\n }\n if (device.ios) {\n if (params.iosOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.iosTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n if (device.android) {\n if (params.androidOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.androidTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n }\n if (params.iosBackgroundColor && device.ios) {\n Statusbar.setBackgroundColor(params.iosBackgroundColor);\n }\n if (params.androidBackgroundColor && device.android) {\n Statusbar.setBackgroundColor(params.androidBackgroundColor);\n }\n }\n};\nexport default {\n name: 'statusbar',\n params: {\n statusbar: {\n enabled: true,\n scrollTopOnClick: true,\n iosOverlaysWebView: true,\n iosTextColor: 'black',\n iosBackgroundColor: null,\n androidOverlaysWebView: false,\n androidTextColor: 'black',\n androidBackgroundColor: null\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n statusbar: Statusbar\n });\n },\n on: {\n init() {\n const app = this;\n Statusbar.init.call(app);\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport View from './view-class.js';\nfunction getCurrentView(app) {\n const $popoverView = $('.popover.modal-in .view');\n const $popupView = $('.popup.modal-in .view');\n const $panelView = $('.panel.panel-in .view');\n let $viewsEl = $('.views');\n if ($viewsEl.length === 0) $viewsEl = app.$el;\n // Find active view as tab\n let $viewEl = $viewsEl.children('.view');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view');\n }\n // Propably in tabs or split view\n if ($viewEl.length > 1) {\n if ($viewEl.hasClass('tab')) {\n // Tabs\n $viewEl = $viewsEl.children('.view.tab-active');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view.tab-active');\n }\n } else {\n // Split View, leave appView intact\n }\n }\n if ($popoverView.length > 0 && $popoverView[0].f7View) return $popoverView[0].f7View;\n if ($popupView.length > 0 && $popupView[0].f7View) return $popupView[0].f7View;\n if ($panelView.length > 0 && $panelView[0].f7View) return $panelView[0].f7View;\n if ($viewEl.length > 0) {\n if ($viewEl.length === 1 && $viewEl[0].f7View) return $viewEl[0].f7View;\n if ($viewEl.length > 1) {\n return app.views.main;\n }\n }\n return undefined;\n}\nexport default {\n name: 'view',\n params: {\n view: {\n init: true,\n initRouterOnTabShow: false,\n name: undefined,\n main: false,\n router: true,\n linksView: null,\n xhrCache: true,\n xhrCacheIgnore: [],\n xhrCacheIgnoreGetParameters: false,\n xhrCacheDuration: 1000 * 60 * 10,\n // Ten minutes\n componentCache: true,\n preloadPreviousPage: true,\n allowDuplicateUrls: false,\n reloadPages: false,\n reloadDetail: false,\n masterDetailBreakpoint: 0,\n masterDetailResizable: false,\n removeElements: true,\n removeElementsWithTimeout: false,\n removeElementsTimeout: 0,\n restoreScrollTopOnBack: true,\n unloadTabContent: true,\n passRouteQueryToRequest: true,\n passRouteParamsToRequest: false,\n loadInitialPage: true,\n // Swipe Back\n iosSwipeBack: true,\n iosSwipeBackAnimateShadow: true,\n iosSwipeBackAnimateOpacity: true,\n iosSwipeBackActiveArea: 30,\n iosSwipeBackThreshold: 0,\n mdSwipeBack: false,\n mdSwipeBackAnimateShadow: true,\n mdSwipeBackAnimateOpacity: false,\n mdSwipeBackActiveArea: 30,\n mdSwipeBackThreshold: 0,\n // Push State\n browserHistory: false,\n browserHistoryRoot: undefined,\n browserHistoryAnimate: true,\n browserHistoryAnimateOnLoad: false,\n browserHistorySeparator: '#!',\n browserHistoryOnLoad: true,\n browserHistoryInitialMatch: false,\n browserHistoryStoreHistory: true,\n browserHistoryTabs: 'replace',\n // Animate Pages\n animate: true,\n // iOS Dynamic Navbar\n iosDynamicNavbar: true,\n // Animate iOS Navbar Back Icon\n iosAnimateNavbarBackIcon: true,\n // Delays\n iosPageLoadDelay: 0,\n mdPageLoadDelay: 0,\n // Routes hooks\n routesBeforeEnter: null,\n routesBeforeLeave: null\n }\n },\n static: {\n View\n },\n create() {\n const app = this;\n extend(app, {\n views: extend([], {\n create(el, params) {\n return new View(app, el, params);\n },\n get(viewEl) {\n const $viewEl = $(viewEl);\n if ($viewEl.length && $viewEl[0].f7View) return $viewEl[0].f7View;\n return undefined;\n }\n })\n });\n Object.defineProperty(app.views, 'current', {\n enumerable: true,\n configurable: true,\n get() {\n return getCurrentView(app);\n }\n });\n // Alias\n app.view = app.views;\n },\n on: {\n init() {\n const app = this;\n $('.view-init').each(viewEl => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalOpen panelOpen': function onOpen(instance) {\n const app = this;\n instance.$el.find('.view-init').each(viewEl => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalBeforeDestroy panelBeforeDestroy': function onClose(instance) {\n if (!instance || !instance.$el) return;\n instance.$el.find('.view-init').each(viewEl => {\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n });\n }\n },\n vnode: {\n 'view-init': {\n insert(vnode) {\n const app = this;\n const viewEl = vnode.elm;\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n },\n destroy(vnode) {\n const viewEl = vnode.elm;\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nconst Navbar = {\n size(el) {\n const app = this;\n let $el = $(el);\n if ($el.hasClass('navbars')) {\n $el = $el.children('.navbar').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n return;\n }\n const $innerEl = $el.children('.navbar-inner');\n if (!$innerEl.length) return;\n const needCenterTitle = $innerEl.hasClass('navbar-inner-centered-title') || app.params.navbar[`${app.theme}CenterTitle`];\n const needLeftTitle = app.theme === 'ios' && !app.params.navbar[`${app.theme}CenterTitle`];\n if (!needCenterTitle && !needLeftTitle) return;\n if ($el.parents('.tab:not(.tab-active)').length > 0 || $el.parents('.popup:not(.modal-in)').length > 0) {\n return;\n }\n if (app.theme !== 'ios' && app.params.navbar[`${app.theme}CenterTitle`]) {\n $innerEl.addClass('navbar-inner-centered-title');\n }\n if (app.theme === 'ios' && !app.params.navbar.iosCenterTitle) {\n $innerEl.addClass('navbar-inner-left-title');\n }\n const $viewEl = $el.parents('.view').eq(0);\n const left = app.rtl ? $innerEl.children('.right') : $innerEl.children('.left');\n const right = app.rtl ? $innerEl.children('.left') : $innerEl.children('.right');\n const title = $innerEl.children('.title');\n const subnavbar = $innerEl.children('.subnavbar');\n const noLeft = left.length === 0;\n const noRight = right.length === 0;\n const leftWidth = noLeft ? 0 : left.outerWidth(true);\n const rightWidth = noRight ? 0 : right.outerWidth(true);\n const titleWidth = title.outerWidth(true);\n const navbarStyles = $innerEl.styles();\n const navbarWidth = $innerEl[0].offsetWidth;\n const navbarInnerWidth = navbarWidth - parseInt(navbarStyles.paddingLeft, 10) - parseInt(navbarStyles.paddingRight, 10);\n const isPrevious = $el.hasClass('navbar-previous');\n const sliding = $innerEl.hasClass('sliding');\n let router;\n let dynamicNavbar;\n if ($viewEl.length > 0 && $viewEl[0].f7View) {\n router = $viewEl[0].f7View.router;\n dynamicNavbar = router && router.dynamicNavbar;\n }\n let currLeft;\n let diff;\n if (noRight) {\n currLeft = navbarInnerWidth - titleWidth;\n }\n if (noLeft) {\n currLeft = 0;\n }\n if (!noLeft && !noRight) {\n currLeft = (navbarInnerWidth - rightWidth - titleWidth + leftWidth) / 2;\n }\n let requiredLeft = (navbarInnerWidth - titleWidth) / 2;\n if (navbarInnerWidth - leftWidth - rightWidth > titleWidth) {\n if (requiredLeft < leftWidth) {\n requiredLeft = leftWidth;\n }\n if (requiredLeft + titleWidth > navbarInnerWidth - rightWidth) {\n requiredLeft = navbarInnerWidth - rightWidth - titleWidth;\n }\n diff = requiredLeft - currLeft;\n } else {\n diff = 0;\n }\n\n // RTL inverter\n const inverter = app.rtl ? -1 : 1;\n if (dynamicNavbar && app.theme === 'ios') {\n if (title.hasClass('sliding') || title.length > 0 && sliding) {\n let titleLeftOffset = -(currLeft + diff) * inverter;\n const titleRightOffset = (navbarInnerWidth - currLeft - diff - titleWidth) * inverter;\n if (isPrevious) {\n if (router && router.params.iosAnimateNavbarBackIcon) {\n const activeNavbarBackLink = $el.parent().find('.navbar-current').children('.left.sliding').find('.back .icon ~ span');\n if (activeNavbarBackLink.length > 0) {\n titleLeftOffset += activeNavbarBackLink[0].offsetLeft;\n }\n }\n }\n title[0].f7NavbarLeftOffset = titleLeftOffset;\n title[0].f7NavbarRightOffset = titleRightOffset;\n }\n if (!noLeft && (left.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n left[0].f7NavbarLeftOffset = -(navbarInnerWidth - left[0].offsetWidth) / 2 * inverter;\n left[0].f7NavbarRightOffset = leftWidth * inverter;\n } else {\n left[0].f7NavbarLeftOffset = -leftWidth;\n left[0].f7NavbarRightOffset = (navbarInnerWidth - left[0].offsetWidth) / 2;\n if (router && router.params.iosAnimateNavbarBackIcon && left.find('.back .icon').length > 0) {\n if (left.find('.back .icon ~ span').length) {\n const leftOffset = left[0].f7NavbarLeftOffset;\n const rightOffset = left[0].f7NavbarRightOffset;\n left[0].f7NavbarLeftOffset = 0;\n left[0].f7NavbarRightOffset = 0;\n left.find('.back .icon ~ span')[0].f7NavbarLeftOffset = leftOffset;\n left.find('.back .icon ~ span')[0].f7NavbarRightOffset = rightOffset - left.find('.back .icon')[0].offsetWidth;\n }\n }\n }\n }\n if (!noRight && (right.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n right[0].f7NavbarLeftOffset = -rightWidth * inverter;\n right[0].f7NavbarRightOffset = (navbarInnerWidth - right[0].offsetWidth) / 2 * inverter;\n } else {\n right[0].f7NavbarLeftOffset = -(navbarInnerWidth - right[0].offsetWidth) / 2;\n right[0].f7NavbarRightOffset = rightWidth;\n }\n }\n if (subnavbar.length && (subnavbar.hasClass('sliding') || sliding)) {\n subnavbar[0].f7NavbarLeftOffset = app.rtl ? subnavbar[0].offsetWidth : -subnavbar[0].offsetWidth;\n subnavbar[0].f7NavbarRightOffset = -subnavbar[0].f7NavbarLeftOffset;\n }\n }\n\n // Center title\n if (needCenterTitle) {\n let titleLeft = diff;\n if (app.rtl && noLeft && noRight && title.length > 0) titleLeft = -titleLeft;\n title.css({\n left: `${titleLeft}px`\n });\n }\n },\n hide(el, animate, hideStatusbar, hideOnlyCurrent) {\n if (animate === void 0) {\n animate = true;\n }\n if (hideStatusbar === void 0) {\n hideStatusbar = false;\n }\n if (hideOnlyCurrent === void 0) {\n hideOnlyCurrent = false;\n }\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if ($el.hasClass('navbar-hidden')) return;\n let className = `navbar-hidden${animate ? ' navbar-transitioning' : ''}`;\n const currentIsLarge = isDynamic ? $el.find('.navbar-current .title-large').length : $el.find('.title-large').length;\n if (currentIsLarge) {\n className += ' navbar-large-hidden';\n }\n if (hideStatusbar) {\n className += ' navbar-hidden-statusbar';\n }\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n $el.addClass(className);\n if (isDynamic) {\n $el.children('.navbar').each(subEl => {\n $(subEl).trigger('navbar:hide');\n app.emit('navbarHide', subEl);\n });\n } else {\n $el.trigger('navbar:hide');\n app.emit('navbarHide', $el[0]);\n }\n },\n show(el, animate, hideOnlyCurrent) {\n if (el === void 0) {\n el = '.navbar-hidden';\n }\n if (animate === void 0) {\n animate = true;\n }\n if (hideOnlyCurrent === void 0) {\n hideOnlyCurrent = false;\n }\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if (!$el.hasClass('navbar-hidden')) return;\n if (animate) {\n $el.addClass('navbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n }\n $el.removeClass('navbar-hidden navbar-large-hidden navbar-hidden-statusbar');\n if (isDynamic) {\n $el.children('.navbar').each(subEl => {\n $(subEl).trigger('navbar:show');\n app.emit('navbarShow', subEl);\n });\n } else {\n $el.trigger('navbar:show');\n app.emit('navbarShow', $el[0]);\n }\n },\n getElByPage(page) {\n let $pageEl;\n let $navbarEl;\n let pageData;\n if (page.$navbarEl || page.$el) {\n pageData = page;\n $pageEl = page.$el;\n } else {\n $pageEl = $(page);\n if ($pageEl.length > 0) pageData = $pageEl[0].f7Page;\n }\n if (pageData && pageData.$navbarEl && pageData.$navbarEl.length > 0) {\n $navbarEl = pageData.$navbarEl;\n } else if ($pageEl) {\n $navbarEl = $pageEl.children('.navbar');\n }\n if (!$navbarEl || $navbarEl && $navbarEl.length === 0) return undefined;\n return $navbarEl[0];\n },\n getPageByEl(navbarEl) {\n const $navbarEl = $(navbarEl);\n if ($navbarEl.parents('.page').length) {\n return $navbarEl.parents('.page')[0];\n }\n let pageEl;\n $navbarEl.parents('.view').find('.page').each(el => {\n if (el && el.f7Page && el.f7Page.navbarEl && $navbarEl[0] === el.f7Page.navbarEl) {\n pageEl = el;\n }\n });\n return pageEl;\n },\n collapseLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.addClass('navbar-large-collapsed');\n $pageEl.eq(0).addClass('page-with-navbar-large-collapsed').trigger('page:navbarlargecollapsed');\n app.emit('pageNavbarLargeCollapsed', $pageEl[0]);\n $navbarEl.trigger('navbar:collapse');\n app.emit('navbarCollapse', $navbarEl[0]);\n },\n expandLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.removeClass('navbar-large-collapsed');\n $pageEl.eq(0).removeClass('page-with-navbar-large-collapsed').trigger('page:navbarlargeexpanded');\n app.emit('pageNavbarLargeExpanded', $pageEl[0]);\n $navbarEl.trigger('navbar:expand');\n app.emit('navbarExpand', $navbarEl[0]);\n },\n toggleLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n if ($navbarEl.hasClass('navbar-large-collapsed')) {\n app.navbar.expandLargeTitle($navbarEl);\n } else {\n app.navbar.collapseLargeTitle($navbarEl);\n }\n },\n initNavbarOnScroll(pageEl, navbarEl, needHide, needCollapse, needTransparent) {\n const app = this;\n const support = getSupport();\n const $pageEl = $(pageEl);\n const $navbarEl = $(navbarEl);\n const $titleLargeEl = $navbarEl.find('.title-large');\n const isLarge = $titleLargeEl.length || $navbarEl.hasClass('.navbar-large');\n let navbarHideHeight = 44;\n const snapPageScrollToLargeTitle = app.params.navbar.snapPageScrollToLargeTitle;\n const snapPageScrollToTransparentNavbar = app.params.navbar.snapPageScrollToTransparentNavbar;\n let previousScrollTop;\n let currentScrollTop;\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let navbarHidden;\n let navbarCollapsed;\n let navbarTitleLargeHeight;\n let navbarOffsetHeight;\n if (needCollapse || needHide && isLarge) {\n navbarTitleLargeHeight = $navbarEl.css('--f7-navbar-large-title-height');\n if (navbarTitleLargeHeight && navbarTitleLargeHeight.indexOf('px') >= 0) {\n navbarTitleLargeHeight = parseInt(navbarTitleLargeHeight, 10);\n if (Number.isNaN(navbarTitleLargeHeight) && $titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else if (Number.isNaN(navbarTitleLargeHeight)) {\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 88;\n }\n } else if ($titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else {\n // eslint-disable-next-line\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 88;\n }\n }\n if (needHide && isLarge) {\n navbarHideHeight += navbarTitleLargeHeight;\n }\n let scrollChanged;\n let scrollContent;\n let scrollTimeoutId;\n let touchEndTimeoutId;\n const touchSnapTimeout = 70;\n const desktopSnapTimeout = 300;\n function calcScrollableDistance() {\n $pageEl.find('.page-content').each(pageContentEl => {\n pageContentEl.f7ScrollableDistance = pageContentEl.scrollHeight - pageContentEl.offsetHeight;\n });\n }\n function snapLargeNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (currentScrollTop >= navbarTitleLargeHeight / 2 && currentScrollTop < navbarTitleLargeHeight) {\n $(scrollContent).scrollTop(navbarTitleLargeHeight, 100);\n } else if (currentScrollTop < navbarTitleLargeHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n function snapTransparentNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (currentScrollTop >= navbarOffsetHeight / 2 && currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(navbarOffsetHeight, 100);\n } else if (currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n function handleNavbarTransparent() {\n const isHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded || isHidden) return;\n if (!navbarOffsetHeight) {\n navbarOffsetHeight = navbarEl.offsetHeight;\n }\n let opacity = currentScrollTop / navbarOffsetHeight;\n const notTransparent = $navbarEl.hasClass('navbar-transparent-visible');\n opacity = Math.max(Math.min(opacity, 1), 0);\n if (notTransparent && opacity === 1 || !notTransparent && opacity === 0) {\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (notTransparent && opacity === 0) {\n $navbarEl.trigger('navbar:transparenthide');\n app.emit('navbarTransparentHide', $navbarEl[0]);\n $navbarEl.removeClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (!notTransparent && opacity === 1) {\n $navbarEl.trigger('navbar:transparentshow');\n app.emit('navbarTransparentShow', $navbarEl[0]);\n $navbarEl.addClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n $navbarEl.find('.navbar-bg, .title').css('opacity', opacity);\n if (snapPageScrollToTransparentNavbar) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n let previousCollapseProgress = null;\n let collapseProgress = null;\n function handleLargeNavbarCollapse(pageContentEl) {\n const isHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (isHidden) return;\n const isLargeTransparent = $navbarEl.hasClass('navbar-large-transparent') || $navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-transparent');\n previousCollapseProgress = collapseProgress;\n const scrollableDistance = Math.min(navbarTitleLargeHeight, pageContentEl.f7ScrollableDistance || navbarTitleLargeHeight);\n collapseProgress = Math.min(Math.max(currentScrollTop / scrollableDistance, 0), 1);\n const previousCollapseWasInMiddle = previousCollapseProgress > 0 && previousCollapseProgress < 1;\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n navbarCollapsed = $navbarEl.hasClass('navbar-large-collapsed');\n const $bgEl = $navbarEl.find('.navbar-bg');\n if (collapseProgress === 0 && navbarCollapsed) {\n app.navbar.expandLargeTitle($navbarEl[0]);\n } else if (collapseProgress === 1 && !navbarCollapsed) {\n app.navbar.collapseLargeTitle($navbarEl[0]);\n }\n if (collapseProgress === 0 && navbarCollapsed || collapseProgress === 0 && previousCollapseWasInMiddle || collapseProgress === 1 && !navbarCollapsed || collapseProgress === 1 && previousCollapseWasInMiddle) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', '');\n }\n $navbarEl.find('.title').css('opacity', '');\n $navbarEl.find('.title-large-text, .subnavbar').css('transform', '');\n $navbarEl.find('.title-large-text').css('opacity', '');\n if (isLargeTransparent) {\n $bgEl.css('opacity', '');\n }\n $bgEl.css('transform', '');\n } else if (collapseProgress > 0 && collapseProgress < 1) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', 'visible');\n }\n $navbarEl.find('.title').css('opacity', -0.5 + collapseProgress * 1.5);\n $navbarEl.find('.title-large-text, .subnavbar').css('transform', `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`);\n $navbarEl.find('.title-large-text').css('opacity', 1 - collapseProgress * 2);\n if (isLargeTransparent) {\n $bgEl.css('opacity', collapseProgress);\n }\n $bgEl.css('transform', `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`);\n }\n if (snapPageScrollToLargeTitle) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n function handleTitleHideShow() {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n navbarHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (reachEnd) {\n if (app.params.navbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.navbar.showOnPageScrollTop || currentScrollTop <= navbarHideHeight) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > navbarHideHeight) {\n action = 'hide';\n } else {\n action = 'show';\n }\n if (action === 'show' && navbarHidden) {\n app.navbar.show($navbarEl, true, true);\n navbarHidden = false;\n } else if (action === 'hide' && !navbarHidden) {\n app.navbar.hide($navbarEl, true, false, true);\n navbarHidden = true;\n }\n previousScrollTop = currentScrollTop;\n }\n function handleScroll(e) {\n scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollChanged = currentScrollTop;\n if (needCollapse) {\n handleLargeNavbarCollapse(scrollContent);\n } else if (needTransparent) {\n handleNavbarTransparent();\n }\n if ($pageEl.hasClass('page-previous')) return;\n if (needHide) {\n handleTitleHideShow();\n }\n }\n function handeTouchStart() {\n scrollChanged = false;\n }\n function handleTouchEnd() {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n if (scrollChanged !== false) {\n if (needTransparent && !needCollapse) {\n snapTransparentNavbar();\n } else {\n snapLargeNavbar();\n }\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }\n }, touchSnapTimeout);\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) {\n app.on('touchstart:passive', handeTouchStart);\n app.on('touchend:passive', handleTouchEnd);\n }\n calcScrollableDistance();\n if (needCollapse || needTransparent) {\n $pageEl.find('.page-content').each(pageContentEl => {\n if (pageContentEl.scrollTop > 0) handleScroll.call(pageContentEl);\n });\n }\n app.on('resize', calcScrollableDistance);\n $pageEl[0].f7DetachNavbarScrollHandlers = function f7DetachNavbarScrollHandlers() {\n app.off('resize', calcScrollableDistance);\n delete $pageEl[0].f7DetachNavbarScrollHandlers;\n $pageEl.off('scroll', '.page-content', handleScroll, true);\n if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) {\n app.off('touchstart:passive', handeTouchStart);\n app.off('touchend:passive', handleTouchEnd);\n }\n };\n }\n};\nexport default {\n name: 'navbar',\n create() {\n const app = this;\n bindMethods(app, {\n navbar: Navbar\n });\n },\n params: {\n navbar: {\n scrollTopOnTitleClick: true,\n iosCenterTitle: true,\n mdCenterTitle: false,\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true,\n collapseLargeTitleOnScroll: true,\n snapPageScrollToLargeTitle: true,\n snapPageScrollToTransparentNavbar: true\n }\n },\n on: {\n 'panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint': function onPanelResize() {\n const app = this;\n $('.navbar').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n },\n pageBeforeRemove(page) {\n if (page.$el[0].f7DetachNavbarScrollHandlers) {\n page.$el[0].f7DetachNavbarScrollHandlers();\n }\n },\n pageBeforeIn(page) {\n const app = this;\n if (app.theme !== 'ios') return;\n let $navbarsEl;\n const view = page.$el.parents('.view')[0].f7View;\n const navbarEl = app.navbar.getElByPage(page);\n if (!navbarEl) {\n $navbarsEl = page.$el.parents('.view').children('.navbars');\n } else {\n $navbarsEl = $(navbarEl).parents('.navbars');\n }\n if (page.$el.hasClass('no-navbar') || view.router.dynamicNavbar && !navbarEl) {\n const animate = !!(page.pageFrom && page.router.history.length > 0);\n app.navbar.hide($navbarsEl, animate);\n } else {\n app.navbar.show($navbarsEl);\n }\n },\n pageReinit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n app.navbar.size($navbarEl);\n },\n pageInit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n\n // Size\n app.navbar.size($navbarEl);\n\n // Need Collapse On Scroll\n let needCollapseOnScrollHandler;\n if ($navbarEl.find('.title-large').length > 0) {\n $navbarEl.addClass('navbar-large');\n }\n if ($navbarEl.hasClass('navbar-large')) {\n if (app.params.navbar.collapseLargeTitleOnScroll) needCollapseOnScrollHandler = true;\n page.$el.addClass('page-with-navbar-large');\n }\n\n // Need transparent on scroll\n let needTransparentOnScroll;\n if (!needCollapseOnScrollHandler && $navbarEl.hasClass('navbar-transparent')) {\n needTransparentOnScroll = true;\n }\n\n // Need Hide On Scroll\n let needHideOnScrollHandler;\n if (app.params.navbar.hideOnPageScroll || page.$el.find('.hide-navbar-on-scroll').length || page.$el.hasClass('hide-navbar-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {\n if (page.$el.find('.keep-navbar-on-scroll').length || page.$el.hasClass('keep-navbar-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {\n needHideOnScrollHandler = false;\n } else {\n needHideOnScrollHandler = true;\n }\n }\n if (needCollapseOnScrollHandler || needHideOnScrollHandler || needTransparentOnScroll) {\n app.navbar.initNavbarOnScroll(page.el, $navbarEl[0], needHideOnScrollHandler, needCollapseOnScrollHandler, needTransparentOnScroll);\n }\n },\n 'panelOpen panelSwipeOpen modalOpen': function onPanelModalOpen(instance) {\n const app = this;\n instance.$el.find('.navbar:not(.navbar-previous)').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n },\n tabShow(tabEl) {\n const app = this;\n $(tabEl).find('.navbar:not(.navbar-previous)').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n }\n },\n clicks: {\n '.navbar .title': function onTitleClick($clickedEl, clickedData, e) {\n const app = this;\n if (!app.params.navbar.scrollTopOnTitleClick) return;\n if ($(e.target).closest('a, button').length > 0) {\n return;\n }\n let $pageContentEl;\n\n // Find active page\n const $navbarEl = $clickedEl.parents('.navbar');\n const $navbarsEl = $navbarEl.parents('.navbars');\n\n // Static Layout\n $pageContentEl = $navbarEl.parents('.page-content');\n if ($pageContentEl.length === 0) {\n // Fixed Layout\n if ($navbarEl.parents('.page').length > 0) {\n $pageContentEl = $navbarEl.parents('.page').find('.page-content');\n }\n // Through Layout iOS\n if ($pageContentEl.length === 0 && $navbarsEl.length) {\n if ($navbarsEl.nextAll('.page-current').length > 0) {\n $pageContentEl = $navbarsEl.nextAll('.page-current').find('.page-content');\n }\n }\n // Through Layout\n if ($pageContentEl.length === 0) {\n if ($navbarEl.nextAll('.page-current').length > 0) {\n $pageContentEl = $navbarEl.nextAll('.page-current').find('.page-content');\n }\n }\n }\n if ($pageContentEl && $pageContentEl.length > 0) {\n // Check for tab\n if ($pageContentEl.hasClass('tab')) {\n $pageContentEl = $pageContentEl.parent('.tabs').children('.page-content.tab-active');\n }\n if ($pageContentEl.length > 0) $pageContentEl.scrollTop(0, 300);\n }\n }\n },\n vnode: {\n navbar: {\n postpatch(vnode) {\n const app = this;\n app.navbar.size(vnode.elm);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\nconst Toolbar = {\n setHighlight(tabbarEl) {\n const app = this;\n const $tabbarEl = $(tabbarEl);\n if (app.theme === 'ios' && !$tabbarEl.hasClass('tabbar-highlight')) return;\n if ($tabbarEl.length === 0 || !($tabbarEl.hasClass('tabbar') || $tabbarEl.hasClass('tabbar-icons'))) return;\n let $highlightEl = $tabbarEl.find('.tab-link-highlight');\n const tabLinksCount = $tabbarEl.find('.tab-link').length;\n if (tabLinksCount === 0) {\n $highlightEl.remove();\n return;\n }\n if ($highlightEl.length === 0) {\n $tabbarEl.children('.toolbar-inner').append('');\n $highlightEl = $tabbarEl.find('.tab-link-highlight');\n } else if ($highlightEl.next().length) {\n $tabbarEl.children('.toolbar-inner').append($highlightEl);\n }\n const $activeLink = $tabbarEl.find('.tab-link-active');\n let highlightWidth;\n let highlightTranslate;\n if ($tabbarEl.hasClass('tabbar-scrollable') && $activeLink && $activeLink[0]) {\n highlightWidth = `${$activeLink[0].offsetWidth}px`;\n highlightTranslate = `${$activeLink[0].offsetLeft}px`;\n } else {\n const activeIndex = $activeLink.index();\n highlightWidth = `${100 / tabLinksCount}%`;\n highlightTranslate = `${(app.rtl ? -activeIndex : activeIndex) * 100}%`;\n }\n nextFrame(() => {\n $highlightEl.css('width', highlightWidth).transform(`translate3d(${highlightTranslate},0,0)`);\n });\n },\n init(tabbarEl) {\n const app = this;\n app.toolbar.setHighlight(tabbarEl);\n },\n hide(el, animate) {\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const $el = $(el);\n if ($el.hasClass('toolbar-hidden')) return;\n const className = `toolbar-hidden${animate ? ' toolbar-transitioning' : ''}`;\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n $el.addClass(className);\n $el.trigger('toolbar:hide');\n app.emit('toolbarHide', $el[0]);\n },\n show(el, animate) {\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const $el = $(el);\n if (!$el.hasClass('toolbar-hidden')) return;\n if (animate) {\n $el.addClass('toolbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n }\n $el.removeClass('toolbar-hidden');\n $el.trigger('toolbar:show');\n app.emit('toolbarShow', $el[0]);\n },\n initToolbarOnScroll(pageEl) {\n const app = this;\n const $pageEl = $(pageEl);\n let $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.parents('.views').children('.tabbar, .tabbar-icons');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n let previousScrollTop;\n let currentScrollTop;\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let toolbarHidden;\n function handleScroll(e) {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n if ($pageEl.hasClass('page-previous')) return;\n const scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n toolbarHidden = $toolbarEl.hasClass('toolbar-hidden');\n if (reachEnd) {\n if (app.params.toolbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.toolbar.showOnPageScrollTop || currentScrollTop <= 44) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > 44) {\n action = 'hide';\n } else {\n action = 'show';\n }\n if (action === 'show' && toolbarHidden) {\n app.toolbar.show($toolbarEl);\n toolbarHidden = false;\n } else if (action === 'hide' && !toolbarHidden) {\n app.toolbar.hide($toolbarEl);\n toolbarHidden = true;\n }\n previousScrollTop = currentScrollTop;\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n $pageEl[0].f7ScrollToolbarHandler = handleScroll;\n }\n};\nexport default {\n name: 'toolbar',\n create() {\n const app = this;\n bindMethods(app, {\n toolbar: Toolbar\n });\n },\n params: {\n toolbar: {\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true\n }\n },\n on: {\n pageBeforeRemove(page) {\n if (page.$el[0].f7ScrollToolbarHandler) {\n page.$el.off('scroll', '.page-content', page.$el[0].f7ScrollToolbarHandler, true);\n }\n },\n pageBeforeIn(page) {\n const app = this;\n let $toolbarEl = page.$el.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.parents('.views').children('.tabbar, .tabbar-icons');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n if (page.$el.hasClass('no-toolbar')) {\n app.toolbar.hide($toolbarEl);\n } else {\n app.toolbar.show($toolbarEl);\n }\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {\n app.toolbar.init(tabbarEl);\n });\n if (app.params.toolbar.hideOnPageScroll || page.$el.find('.hide-toolbar-on-scroll').length || page.$el.hasClass('hide-toolbar-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {\n if (page.$el.find('.keep-toolbar-on-scroll').length || page.$el.hasClass('keep-toolbar-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {\n return;\n }\n app.toolbar.initToolbarOnScroll(page.el);\n }\n },\n init() {\n const app = this;\n app.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {\n app.toolbar.init(tabbarEl);\n });\n }\n },\n vnode: {\n tabbar: {\n insert(vnode) {\n const app = this;\n app.toolbar.init(vnode.elm);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nexport default {\n name: 'subnavbar',\n on: {\n pageInit(page) {\n if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length) {\n page.$el.addClass('page-with-subnavbar');\n }\n const $innerSubnavbars = page.$el.find('.subnavbar').filter(subnavbarEl => {\n return $(subnavbarEl).parents('.page')[0] === page.$el[0];\n });\n if ($innerSubnavbars.length) {\n page.$el.addClass('page-with-subnavbar');\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nexport default class TouchRipple {\n constructor(app, $el, x, y) {\n const ripple = this;\n if (!$el) return undefined;\n const {\n left,\n top,\n width,\n height\n } = $el[0].getBoundingClientRect();\n const center = {\n x: x - left,\n y: y - top\n };\n let diameter = Math.max((height ** 2 + width ** 2) ** 0.5, 48);\n let isInset = false;\n const insetElements = app.params.touch.touchRippleInsetElements || '';\n if (insetElements && $el.is(insetElements)) {\n isInset = true;\n }\n if (isInset) {\n diameter = Math.max(Math.min(width, height), 48);\n }\n if (!isInset && $el.css('overflow') === 'hidden') {\n const distanceFromCenter = ((center.x - width / 2) ** 2 + (center.y - height / 2) ** 2) ** 0.5;\n const scale = (diameter / 2 + distanceFromCenter) / (diameter / 2);\n ripple.rippleTransform = `translate3d(0px, 0px, 0) scale(${scale * 2})`;\n } else {\n // prettier-ignore\n ripple.rippleTransform = `translate3d(${-center.x + width / 2}px, ${-center.y + height / 2}px, 0) scale(1)`;\n }\n if (isInset) {\n $el.addClass('ripple-inset');\n }\n ripple.$rippleWaveEl = $(``);\n $el.prepend(ripple.$rippleWaveEl);\n ripple.$rippleWaveEl.animationEnd(() => {\n if (!ripple.$rippleWaveEl) return;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-out')) return;\n ripple.$rippleWaveEl.addClass('ripple-wave-in');\n if (ripple.shouldBeRemoved) {\n ripple.out();\n }\n });\n return ripple;\n }\n destroy() {\n let ripple = this;\n if (ripple.$rippleWaveEl) {\n ripple.$rippleWaveEl.remove();\n }\n Object.keys(ripple).forEach(key => {\n ripple[key] = null;\n delete ripple[key];\n });\n ripple = null;\n }\n out() {\n const ripple = this;\n const {\n $rippleWaveEl\n } = this;\n clearTimeout(ripple.removeTimeout);\n $rippleWaveEl.addClass('ripple-wave-out');\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 300);\n $rippleWaveEl.animationEnd(() => {\n clearTimeout(ripple.removeTimeout);\n ripple.destroy();\n });\n }\n remove() {\n const ripple = this;\n if (ripple.shouldBeRemoved) return;\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 400);\n ripple.shouldBeRemoved = true;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-in')) {\n ripple.out();\n }\n }\n}", "import TouchRipple from './touch-ripple-class.js';\nexport default {\n name: 'touch-ripple',\n static: {\n TouchRipple\n },\n create() {\n const app = this;\n app.touchRipple = {\n create() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return new TouchRipple(...args);\n }\n };\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nconst openedModals = [];\nconst dialogsQueue = [];\nfunction clearDialogsQueue() {\n if (dialogsQueue.length === 0) return;\n const dialog = dialogsQueue.shift();\n dialog.open();\n}\nclass Modal extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const modal = this;\n const defaults = {};\n\n // Extend defaults with modules params\n modal.useModulesParams(defaults);\n modal.params = extend(defaults, params);\n modal.opened = false;\n let $containerEl = modal.params.containerEl ? $(modal.params.containerEl).eq(0) : app.$el;\n if (!$containerEl.length) $containerEl = app.$el;\n modal.$containerEl = $containerEl;\n modal.containerEl = $containerEl[0];\n\n // Install Modules\n modal.useModules();\n return this;\n }\n onOpen() {\n const modal = this;\n modal.opened = true;\n openedModals.push(modal);\n $('html').addClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:open ${modal.type.toLowerCase()}:open`);\n modal.emit(`local::open modalOpen ${modal.type}Open`, modal);\n }\n onOpened() {\n const modal = this;\n modal.$el.trigger(`modal:opened ${modal.type.toLowerCase()}:opened`);\n modal.emit(`local::opened modalOpened ${modal.type}Opened`, modal);\n }\n onClose() {\n const modal = this;\n modal.opened = false;\n if (!modal.type || !modal.$el) return;\n openedModals.splice(openedModals.indexOf(modal), 1);\n $('html').removeClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:close ${modal.type.toLowerCase()}:close`);\n modal.emit(`local::close modalClose ${modal.type}Close`, modal);\n }\n onClosed() {\n const modal = this;\n if (!modal.type || !modal.$el) return;\n modal.$el.removeClass('modal-out');\n modal.$el.hide();\n if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {\n modal.$backdropEl.remove();\n }\n modal.$el.trigger(`modal:closed ${modal.type.toLowerCase()}:closed`);\n modal.emit(`local::closed modalClosed ${modal.type}Closed`, modal);\n }\n open(animateModal, force) {\n const modal = this;\n const document = getDocument();\n const app = modal.app;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n const type = modal.type;\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n if (!$el || $el.hasClass('modal-in')) {\n if (animateModal === false && $el[0] && type !== 'dialog') {\n $el[0].style.display = 'block';\n }\n if (!force) return modal;\n }\n if (type === 'dialog' && app.params.modal.queueDialogs) {\n let pushToQueue;\n if ($('.dialog.modal-in').length > 0) {\n pushToQueue = true;\n } else if (openedModals.length > 0) {\n openedModals.forEach(openedModal => {\n if (openedModal.type === 'dialog') pushToQueue = true;\n });\n }\n if (pushToQueue) {\n dialogsQueue.push(modal);\n return modal;\n }\n }\n const $modalParentEl = $el.parent();\n const wasInDom = $el.parents(document).length > 0;\n if (!$modalParentEl.is(modal.$containerEl)) {\n modal.$containerEl.append($el);\n modal.once(`${type}Closed`, () => {\n if (wasInDom) {\n $modalParentEl.append($el);\n } else {\n $el.remove();\n }\n });\n }\n // Show Modal\n $el.show();\n if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {\n modal.$backdropEl.insertBefore($el);\n }\n\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n modal._clientLeft = $el[0].clientLeft;\n\n // Modal\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n if ($backdropEl) {\n $backdropEl.removeClass('not-animated');\n $backdropEl.addClass('backdrop-in');\n }\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-out not-animated').addClass('modal-in');\n modal.onOpen();\n } else {\n if ($backdropEl) {\n $backdropEl.addClass('backdrop-in not-animated');\n }\n $el.removeClass('modal-out').addClass('modal-in not-animated');\n modal.onOpen();\n modal.onOpened();\n }\n return modal;\n }\n close(animateModal) {\n const modal = this;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n if (!$el || !$el.hasClass('modal-in')) {\n if (dialogsQueue.indexOf(modal) >= 0) {\n dialogsQueue.splice(dialogsQueue.indexOf(modal), 1);\n }\n return modal;\n }\n\n // backdrop\n if ($backdropEl) {\n let needToHideBackdrop = true;\n if (modal.type === 'popup') {\n modal.$el.prevAll('.popup.modal-in').add(modal.$el.nextAll('.popup.modal-in')).each(popupEl => {\n const popupInstance = popupEl.f7Modal;\n if (!popupInstance) return;\n if (popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === modal.backdropEl) {\n needToHideBackdrop = false;\n }\n });\n }\n if (needToHideBackdrop) {\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n $backdropEl.removeClass('backdrop-in');\n }\n }\n\n // Modal\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n } else {\n $el.addClass('not-animated').removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n modal.onClosed();\n }\n if (modal.type === 'dialog') {\n clearDialogsQueue();\n }\n return modal;\n }\n destroy() {\n const modal = this;\n if (modal.destroyed) return;\n modal.emit(`local::beforeDestroy modalBeforeDestroy ${modal.type}BeforeDestroy`, modal);\n if (modal.$el) {\n modal.$el.trigger(`modal:beforedestroy ${modal.type.toLowerCase()}:beforedestroy`);\n if (modal.$el.length && modal.$el[0].f7Modal) {\n delete modal.$el[0].f7Modal;\n }\n }\n deleteProps(modal);\n modal.destroyed = true;\n }\n}\nexport default Modal;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Modal from './modal-class.js';\nclass CustomModal extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n backdrop: true,\n closeByBackdropClick: true,\n on: {}\n }, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const customModal = this;\n customModal.params = extendedParams;\n\n // Find Element\n let $el;\n if (!customModal.params.el) {\n $el = $(customModal.params.content);\n } else {\n $el = $(customModal.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return customModal.destroy();\n }\n let $backdropEl;\n if (customModal.params.backdrop) {\n $backdropEl = app.$el.children('.custom-modal-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n app.$el.append($backdropEl);\n }\n }\n function handleClick(e) {\n if (!customModal || customModal.destroyed) return;\n if ($backdropEl && e.target === $backdropEl[0]) {\n customModal.close();\n }\n }\n customModal.on('customModalOpened', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.on('click', handleClick);\n }\n });\n customModal.on('customModalClose', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.off('click', handleClick);\n }\n });\n extend(customModal, {\n app,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'customModal'\n });\n $el[0].f7Modal = customModal;\n return customModal;\n }\n}\nexport default CustomModal;", "import Modal from './modal-class.js';\nimport CustomModal from './custom-modal-class.js';\nexport default {\n name: 'modal',\n static: {\n Modal,\n CustomModal\n },\n create() {\n const app = this;\n app.customModal = {\n create(params) {\n return new CustomModal(app, params);\n }\n };\n },\n params: {\n modal: {\n queueDialogs: true\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Dialog extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n title: app.params.dialog.title,\n text: undefined,\n content: '',\n buttons: [],\n verticalButtons: false,\n onClick: undefined,\n cssClass: undefined,\n destroyOnClose: false,\n on: {}\n }, params);\n if (typeof extendedParams.closeByBackdropClick === 'undefined') {\n extendedParams.closeByBackdropClick = app.params.dialog.closeByBackdropClick;\n }\n if (typeof extendedParams.backdrop === 'undefined') {\n extendedParams.backdrop = app.params.dialog.backdrop;\n }\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const dialog = this;\n const device = getDevice();\n const document = getDocument();\n const {\n title,\n text,\n content,\n buttons,\n verticalButtons,\n cssClass,\n backdrop\n } = extendedParams;\n dialog.params = extendedParams;\n\n // Find Element\n let $el;\n if (!dialog.params.el) {\n const dialogClasses = ['dialog'];\n if (buttons.length === 0) dialogClasses.push('dialog-no-buttons');\n if (buttons.length > 0) dialogClasses.push(`dialog-buttons-${buttons.length}`);\n if (verticalButtons) dialogClasses.push('dialog-buttons-vertical');\n if (cssClass) dialogClasses.push(cssClass);\n let buttonsHTML = '';\n if (buttons.length > 0) {\n buttonsHTML = $jsx(\"div\", {\n class: \"dialog-buttons\"\n }, buttons.map(button => $jsx(\"span\", {\n class: `dialog-button${button.strong ? ' dialog-button-strong' : ''}${button.color ? ` color-${button.color}` : ''}${button.cssClass ? ` ${button.cssClass}` : ''}`\n }, button.text)));\n }\n const dialogHtml = $jsx(\"div\", {\n class: dialogClasses.join(' ')\n }, $jsx(\"div\", {\n class: \"dialog-inner\"\n }, title && $jsx(\"div\", {\n class: \"dialog-title\"\n }, title), text && $jsx(\"div\", {\n class: \"dialog-text\"\n }, text), content), buttonsHTML);\n $el = $(dialogHtml);\n } else {\n $el = $(dialog.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return dialog.destroy();\n }\n let $backdropEl;\n if (backdrop) {\n $backdropEl = app.$el.children('.dialog-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n app.$el.append($backdropEl);\n }\n }\n\n // Assign events\n function buttonOnClick(e) {\n const buttonEl = this;\n const index = $(buttonEl).index();\n const button = buttons[index];\n if (button.onClick) button.onClick(dialog, e);\n if (dialog.params.onClick) dialog.params.onClick(dialog, index);\n if (button.close !== false) dialog.close();\n }\n let addKeyboardHander;\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n buttons.forEach((button, index) => {\n if (button.keyCodes && button.keyCodes.indexOf(keyCode) >= 0) {\n if (document.activeElement) document.activeElement.blur();\n if (button.onClick) button.onClick(dialog, e);\n if (dialog.params.onClick) dialog.params.onClick(dialog, index);\n if (button.close !== false) dialog.close();\n }\n });\n }\n if (buttons && buttons.length > 0) {\n dialog.on('open', () => {\n $el.find('.dialog-button').each((buttonEl, index) => {\n const button = buttons[index];\n if (button.keyCodes) addKeyboardHander = true;\n $(buttonEl).on('click', buttonOnClick);\n });\n if (addKeyboardHander && !device.ios && !device.android && !device.cordova && !device.capacitor) {\n $(document).on('keydown', onKeyDown);\n }\n });\n dialog.on('close', () => {\n $el.find('.dialog-button').each(buttonEl => {\n $(buttonEl).off('click', buttonOnClick);\n });\n if (addKeyboardHander && !device.ios && !device.android && !device.cordova && !device.capacitor) {\n $(document).off('keydown', onKeyDown);\n }\n addKeyboardHander = false;\n });\n }\n extend(dialog, {\n app,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'dialog',\n setProgress(progress, duration) {\n app.progressbar.set($el.find('.progressbar'), progress, duration);\n return dialog;\n },\n setText(newText) {\n let $textEl = $el.find('.dialog-text');\n if ($textEl.length === 0) {\n $textEl = $('');\n if (typeof title !== 'undefined') {\n $textEl.insertAfter($el.find('.dialog-title'));\n } else {\n $el.find('.dialog-inner').prepend($textEl);\n }\n }\n $textEl.html(newText);\n dialog.params.text = newText;\n return dialog;\n },\n setTitle(newTitle) {\n let $titleEl = $el.find('.dialog-title');\n if ($titleEl.length === 0) {\n $titleEl = $('');\n $el.find('.dialog-inner').prepend($titleEl);\n }\n $titleEl.html(newTitle);\n dialog.params.title = newTitle;\n return dialog;\n }\n });\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n if ($target.closest(dialog.el).length === 0) {\n if (dialog.params.closeByBackdropClick && dialog.backdropEl && dialog.backdropEl === target) {\n dialog.close();\n }\n }\n }\n dialog.on('opened', () => {\n if (dialog.params.closeByBackdropClick) {\n app.on('click', handleClick);\n }\n });\n dialog.on('close', () => {\n if (dialog.params.closeByBackdropClick) {\n app.off('click', handleClick);\n }\n });\n $el[0].f7Modal = dialog;\n if (dialog.params.destroyOnClose) {\n dialog.once('closed', () => {\n setTimeout(() => {\n dialog.destroy();\n }, 0);\n });\n }\n return dialog;\n }\n}\nexport default Dialog;", "import { extend, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nimport Dialog from './dialog-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'dialog',\n params: {\n dialog: {\n title: undefined,\n buttonOk: 'OK',\n buttonCancel: 'Cancel',\n usernamePlaceholder: 'Username',\n passwordPlaceholder: 'Password',\n preloaderTitle: 'Loading... ',\n progressTitle: 'Loading... ',\n backdrop: true,\n closeByBackdropClick: false,\n destroyPredefinedDialogs: true,\n keyboardActions: true,\n autoFocus: true\n }\n },\n static: {\n Dialog\n },\n create() {\n const app = this;\n function defaultDialogTitle() {\n return app.params.dialog.title || app.name;\n }\n const destroyOnClose = app.params.dialog.destroyPredefinedDialogs;\n const keyboardActions = app.params.dialog.keyboardActions;\n const autoFocus = app.params.dialog.autoFocus;\n const autoFocusHandler = autoFocus ? {\n on: {\n opened(dialog) {\n dialog.$el.find('input').eq(0).focus();\n }\n }\n } : {};\n const isIosTheme = app.theme === 'ios';\n app.dialog = extend(ModalMethods({\n app,\n constructor: Dialog,\n defaultSelector: '.dialog.modal-in'\n }), {\n // Shortcuts\n alert() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [text, title, callbackOk] = args;\n if (args.length === 2 && typeof args[1] === 'function') {\n [text, callbackOk, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n buttons: [{\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n onClick: callbackOk,\n keyCodes: keyboardActions ? [13, 27] : null\n }],\n destroyOnClose\n }).open();\n },\n prompt() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n let [text, title, callbackOk, callbackCancel, defaultValue] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, defaultValue, title] = args;\n }\n defaultValue = typeof defaultValue === 'undefined' || defaultValue === null ? '' : defaultValue;\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n content: ``,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n keyCodes: keyboardActions ? [13] : null\n }],\n onClick(dialog, index) {\n const inputValue = dialog.$el.find('.dialog-input').val();\n if (index === 0 && callbackCancel) callbackCancel(inputValue);\n if (index === 1 && callbackOk) callbackOk(inputValue);\n },\n destroyOnClose,\n ...autoFocusHandler\n }).open();\n },\n confirm() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n let [text, title, callbackOk, callbackCancel] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n onClick: callbackCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n onClick: callbackOk,\n keyCodes: keyboardActions ? [13] : null\n }],\n destroyOnClose\n }).open();\n },\n login() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n let [text, title, callbackOk, callbackCancel] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n // prettier-ignore\n content: `\n \n \n
\n \n \n
`,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n keyCodes: keyboardActions ? [13] : null\n }],\n onClick(dialog, index) {\n const username = dialog.$el.find('[name=\"dialog-username\"]').val();\n const password = dialog.$el.find('[name=\"dialog-password\"]').val();\n if (index === 0 && callbackCancel) callbackCancel(username, password);\n if (index === 1 && callbackOk) callbackOk(username, password);\n },\n destroyOnClose,\n ...autoFocusHandler\n }).open();\n },\n password() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n let [text, title, callbackOk, callbackCancel] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n // prettier-ignore\n content: `\n \n \n
`,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n keyCodes: keyboardActions ? [13] : null\n }],\n onClick(dialog, index) {\n const password = dialog.$el.find('[name=\"dialog-password\"]').val();\n if (index === 0 && callbackCancel) callbackCancel(password);\n if (index === 1 && callbackOk) callbackOk(password);\n },\n destroyOnClose,\n ...autoFocusHandler\n }).open();\n },\n preloader(title, color) {\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || '';\n return new Dialog(app, {\n title: typeof title === 'undefined' || title === null ? app.params.dialog.preloaderTitle : title,\n // prettier-ignore\n content: `${preloaderInner}
`,\n cssClass: 'dialog-preloader',\n destroyOnClose\n }).open();\n },\n progress() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n let [title, progress, color] = args;\n if (args.length === 2) {\n if (typeof args[0] === 'number') {\n [progress, color, title] = args;\n } else if (typeof args[0] === 'string' && typeof args[1] === 'string') {\n [title, color, progress] = args;\n }\n } else if (args.length === 1) {\n if (typeof args[0] === 'number') {\n [progress, title, color] = args;\n }\n }\n const infinite = typeof progress === 'undefined';\n const dialog = new Dialog(app, {\n title: typeof title === 'undefined' ? app.params.dialog.progressTitle : title,\n cssClass: 'dialog-progress',\n // prettier-ignore\n content: `\n \n ${!infinite ? '' : ''}\n
\n `,\n destroyOnClose\n });\n if (!infinite) dialog.setProgress(progress);\n return dialog.open();\n }\n });\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, now, nextTick } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\nclass Popup extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.popup, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const popup = this;\n const window = getWindow();\n const document = getDocument();\n const support = getSupport();\n const device = getDevice();\n popup.params = extendedParams;\n\n // Find Element\n let $el;\n if (!popup.params.el) {\n $el = $(popup.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(popup.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return popup.destroy();\n }\n let $backdropEl;\n if (popup.params.backdrop && popup.params.backdropEl) {\n $backdropEl = $(popup.params.backdropEl);\n } else if (popup.params.backdrop) {\n if (popup.params.backdropUnique) {\n $backdropEl = $('');\n popup.$containerEl.append($backdropEl);\n } else {\n $backdropEl = popup.$containerEl.children('.popup-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n popup.$containerEl.append($backdropEl);\n }\n }\n extend(popup, {\n app,\n push: $el.hasClass('popup-push') || popup.params.push,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'popup',\n $htmlEl: $('html')\n });\n if (popup.params.push) {\n $el.addClass('popup-push');\n }\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(popup.el).length === 0) {\n if (popup.params && popup.params.closeByBackdropClick && popup.params.backdrop && popup.backdropEl && popup.backdropEl === target) {\n let needToClose = true;\n popup.$el.nextAll('.popup.modal-in').each(popupEl => {\n const popupInstance = popupEl.f7Modal;\n if (!popupInstance) return;\n if (popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === popup.backdropEl) {\n needToClose = false;\n }\n });\n if (needToClose) {\n popup.close();\n }\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && popup.params.closeOnEscape) {\n popup.close();\n }\n }\n let pushOffset;\n let isPush;\n function pushViewScale(offset) {\n return (app.height - offset * 2) / app.height;\n }\n let allowSwipeToClose = true;\n let isTouched = false;\n let startTouch;\n let currentTouch;\n let isScrolling;\n let touchStartTime;\n let touchesDiff;\n let isMoved = false;\n let pageContentEl;\n let pageContentScrollTop;\n let pageContentOffsetHeight;\n let pageContentScrollHeight;\n let popupHeight;\n let $pushEl;\n function handleTouchStart(e) {\n if (isTouched || !allowSwipeToClose || !popup.params.swipeToClose || !e.isTrusted) return;\n if (popup.params.swipeHandler && $(e.target).closest(popup.params.swipeHandler).length === 0) {\n return;\n }\n if ($(e.target).closest('.sortable-handler').length > 0) return;\n isTouched = true;\n isMoved = false;\n startTouch = {\n x: e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY\n };\n touchStartTime = now();\n isScrolling = undefined;\n if (!popup.params.swipeHandler && e.type === 'touchstart') {\n pageContentEl = $(e.target).closest('.page-content')[0];\n }\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n currentTouch = {\n x: e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY\n };\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(currentTouch.x - startTouch.x) > Math.abs(currentTouch.y - startTouch.y));\n }\n if (isScrolling) {\n isTouched = false;\n isMoved = false;\n return;\n }\n touchesDiff = startTouch.y - currentTouch.y;\n if (isPush && pushOffset && touchesDiff > 0) {\n touchesDiff = 0;\n }\n const direction = touchesDiff < 0 ? 'to-bottom' : 'to-top';\n $el.transition(0);\n if (typeof popup.params.swipeToClose === 'string' && direction !== popup.params.swipeToClose) {\n $el.transform('');\n $el.transition('');\n return;\n }\n if (!isMoved) {\n if (isPush && pushOffset) {\n popupHeight = $el[0].offsetHeight;\n $pushEl = $el.prevAll('.popup.modal-in').eq(0);\n if ($pushEl.length === 0) {\n $pushEl = app.$el.children('.view, .views');\n }\n }\n if (pageContentEl) {\n pageContentScrollTop = pageContentEl.scrollTop;\n pageContentScrollHeight = pageContentEl.scrollHeight;\n pageContentOffsetHeight = pageContentEl.offsetHeight;\n if (!(pageContentScrollHeight === pageContentOffsetHeight) && !(direction === 'to-bottom' && pageContentScrollTop === 0) && !(direction === 'to-top' && pageContentScrollTop === pageContentScrollHeight - pageContentOffsetHeight)) {\n $el.transform('');\n $el.transition('');\n isTouched = false;\n isMoved = false;\n return;\n }\n }\n isMoved = true;\n popup.emit('local::swipeStart popupSwipeStart', popup);\n popup.$el.trigger('popup:swipestart');\n } else {\n popup.emit('local::swipeMove popupSwipeMove', popup);\n popup.$el.trigger('popup:swipemove');\n }\n e.preventDefault();\n if (isPush && pushOffset) {\n const pushProgress = 1 - Math.abs(touchesDiff / popupHeight);\n const scale = 1 - (1 - pushViewScale(pushOffset)) * pushProgress;\n if ($pushEl.hasClass('popup')) {\n if ($pushEl.hasClass('popup-push')) {\n $pushEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0, calc(-1 * ${pushProgress} * (var(--f7-popup-push-offset) + 10px)) , 0px) scale(${scale})`, 'important');\n });\n } else {\n $pushEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0, 0px , 0px) scale(${scale})`, 'important');\n });\n }\n } else {\n $pushEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${scale})`, 'important');\n });\n }\n }\n $el.transition(0).transform(`translate3d(0,${-touchesDiff}px,0)`);\n }\n function handleTouchEnd(e) {\n if (!e.isTrusted) return;\n isTouched = false;\n if (!isMoved) {\n return;\n }\n popup.emit('local::swipeEnd popupSwipeEnd', popup);\n popup.$el.trigger('popup:swipeend');\n isMoved = false;\n allowSwipeToClose = false;\n $el.transition('');\n if (isPush && pushOffset) {\n $pushEl.transition('').transform('');\n }\n const direction = touchesDiff <= 0 ? 'to-bottom' : 'to-top';\n if (typeof popup.params.swipeToClose === 'string' && direction !== popup.params.swipeToClose) {\n $el.transform('');\n allowSwipeToClose = true;\n return;\n }\n const diff = Math.abs(touchesDiff);\n const timeDiff = new Date().getTime() - touchStartTime;\n if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > 100) {\n nextTick(() => {\n if (direction === 'to-bottom') {\n $el.addClass('swipe-close-to-bottom');\n } else {\n $el.addClass('swipe-close-to-top');\n }\n $el.transform('');\n popup.emit('local::swipeclose popupSwipeClose', popup);\n popup.$el.trigger('popup:swipeclose');\n popup.close();\n allowSwipeToClose = true;\n });\n return;\n }\n allowSwipeToClose = true;\n $el.transform('');\n }\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (popup.params.swipeToClose) {\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n popup.once('popupDestroy', () => {\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n });\n }\n let hasPreviousPushPopup;\n const updatePushOffset = () => {\n const wasPush = isPush;\n if (popup.push) {\n isPush = popup.push && (app.width < 630 || app.height < 630 || $el.hasClass('popup-tablet-fullscreen'));\n }\n if (isPush && !wasPush) {\n // eslint-disable-next-line\n setPushOffset();\n } else if (isPush && wasPush) {\n popup.$htmlEl[0].style.setProperty('--f7-popup-push-scale', pushViewScale(pushOffset));\n } else if (!isPush && wasPush) {\n popup.$htmlEl.removeClass('with-modal-popup-push');\n popup.$htmlEl[0].style.removeProperty('--f7-popup-push-scale');\n }\n };\n const setPushOffset = () => {\n app.off('resize', updatePushOffset);\n if (popup.push) {\n isPush = popup.push && (app.width < 630 || app.height < 630 || $el.hasClass('popup-tablet-fullscreen'));\n }\n if (isPush) {\n pushOffset = parseInt($el.css('--f7-popup-push-offset'), 10);\n if (Number.isNaN(pushOffset)) {\n pushOffset = 0;\n }\n if (!pushOffset) pushOffset = app.theme === 'ios' ? 44 : 48;\n popup.$htmlEl[0].style.setProperty('--f7-popup-push-offset', `${pushOffset}px`);\n $el.addClass('popup-push');\n popup.$htmlEl.addClass('with-modal-popup-push');\n popup.$htmlEl[0].style.setProperty('--f7-popup-push-scale', pushViewScale(pushOffset));\n }\n app.on('resize', updatePushOffset);\n };\n popup.on('open', () => {\n hasPreviousPushPopup = false;\n if (popup.params.closeOnEscape) {\n $(document).on('keydown', onKeyDown);\n }\n $el.prevAll('.popup.modal-in').addClass('popup-behind');\n setPushOffset();\n });\n popup.on('opened', () => {\n $el.removeClass('swipe-close-to-bottom swipe-close-to-top');\n if (popup.params.closeByBackdropClick) {\n app.on('click', handleClick);\n }\n });\n popup.on('close', () => {\n hasPreviousPushPopup = popup.$el.prevAll('.popup-push.modal-in').length > 0;\n if (popup.params.closeOnEscape) {\n $(document).off('keydown', onKeyDown);\n }\n if (popup.params.closeByBackdropClick) {\n app.off('click', handleClick);\n }\n $el.prevAll('.popup.modal-in').eq(0).removeClass('popup-behind');\n if (isPush && pushOffset && !hasPreviousPushPopup) {\n popup.$htmlEl.removeClass('with-modal-popup-push');\n popup.$htmlEl.addClass('with-modal-popup-push-closing');\n }\n app.off('resize', updatePushOffset);\n });\n popup.on('closed', () => {\n $el.removeClass('popup-behind');\n if (isPush && pushOffset && !hasPreviousPushPopup) {\n popup.$htmlEl.removeClass('with-modal-popup-push-closing');\n popup.$htmlEl[0].style.removeProperty('--f7-popup-push-scale');\n popup.$htmlEl[0].style.removeProperty('--f7-popup-push-offset');\n }\n });\n $el[0].f7Modal = popup;\n return popup;\n }\n}\nexport default Popup;", "import Popup from './popup-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'popup',\n params: {\n popup: {\n backdrop: true,\n backdropEl: undefined,\n backdropUnique: false,\n closeByBackdropClick: true,\n closeOnEscape: false,\n swipeToClose: false,\n swipeHandler: null,\n push: false,\n containerEl: null\n }\n },\n static: {\n Popup\n },\n create() {\n const app = this;\n app.popup = ModalMethods({\n app,\n constructor: Popup,\n defaultSelector: '.popup.modal-in',\n parentSelector: '.popup'\n });\n },\n clicks: {\n '.popup-open': function openPopup($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popup.open(data.popup, data.animate, $clickedEl);\n },\n '.popup-close': function closePopup($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popup.close(data.popup, data.animate, $clickedEl);\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\nclass LoginScreen extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const loginScreen = this;\n loginScreen.params = extendedParams;\n\n // Find Element\n let $el;\n if (!loginScreen.params.el) {\n $el = $(loginScreen.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(loginScreen.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return loginScreen.destroy();\n }\n extend(loginScreen, {\n app,\n $el,\n el: $el[0],\n type: 'loginScreen'\n });\n $el[0].f7Modal = loginScreen;\n return loginScreen;\n }\n}\nexport default LoginScreen;", "import LoginScreen from './login-screen-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'loginScreen',\n static: {\n LoginScreen\n },\n create() {\n const app = this;\n app.loginScreen = ModalMethods({\n app,\n constructor: LoginScreen,\n defaultSelector: '.login-screen.modal-in'\n });\n },\n clicks: {\n '.login-screen-open': function openLoginScreen($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.loginScreen.open(data.loginScreen, data.animate, $clickedEl);\n },\n '.login-screen-close': function closeLoginScreen($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.loginScreen.close(data.loginScreen, data.animate, $clickedEl);\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\nclass Popover extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.popover, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const popover = this;\n const device = getDevice();\n const window = getWindow();\n const document = getDocument();\n popover.params = extendedParams;\n\n // Find Element\n let $el;\n if (!popover.params.el) {\n $el = $(popover.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(popover.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n\n // Find Target\n const $targetEl = $(popover.params.targetEl).eq(0);\n if ($el.length === 0) {\n return popover.destroy();\n }\n\n // Backdrop\n let $backdropEl;\n const forceBackdropUnique = popover.params.backdrop && app.$el.find('.popover.modal-in').filter(anotherPopoverEl => anotherPopoverEl !== $el[0]).length > 0;\n if (popover.params.backdrop && popover.params.backdropEl) {\n $backdropEl = $(popover.params.backdropEl);\n } else if (popover.params.backdrop) {\n if (popover.params.backdropUnique || forceBackdropUnique) {\n $backdropEl = $('');\n $backdropEl[0].f7PopoverRef = popover;\n popover.$containerEl.append($backdropEl);\n } else {\n $backdropEl = popover.$containerEl.children('.popover-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n popover.$containerEl.append($backdropEl);\n }\n }\n\n // Find Arrow\n let $arrowEl;\n if ($el.find('.popover-arrow').length === 0 && popover.params.arrow) {\n $arrowEl = $('');\n $el.prepend($arrowEl);\n } else {\n $arrowEl = $el.find('.popover-arrow');\n }\n\n // Open\n const originalOpen = popover.open;\n extend(popover, {\n app,\n $el,\n el: $el[0],\n $targetEl,\n targetEl: $targetEl[0],\n $arrowEl,\n arrowEl: $arrowEl[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'popover',\n forceBackdropUnique,\n open() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [targetEl, animate] = args;\n if (typeof args[0] === 'boolean') [animate, targetEl] = args;\n if (targetEl) {\n popover.$targetEl = $(targetEl);\n popover.targetEl = popover.$targetEl[0];\n }\n return originalOpen.call(popover, animate);\n }\n });\n function handleResize() {\n popover.resize();\n }\n popover.on('popoverOpen', () => {\n popover.resize();\n app.on('resize', handleResize);\n $(window).on('keyboardDidShow keyboardDidHide', handleResize);\n popover.on('popoverClose popoverBeforeDestroy', () => {\n app.off('resize', handleResize);\n $(window).off('keyboardDidShow keyboardDidHide', handleResize);\n });\n });\n let touchStartTarget = null;\n function handleTouchStart(e) {\n touchStartTarget = e.target;\n }\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(popover.el).length === 0) {\n if (popover.params.closeByBackdropClick && popover.params.backdrop && popover.backdropEl && popover.backdropEl === target && touchStartTarget === target) {\n popover.close();\n } else if (popover.params.closeByOutsideClick && touchStartTarget === target) {\n const isAnotherPopoverBackdrop = $target.hasClass('popover-backdrop-unique') && target.f7PopoverRef !== popover || $target.hasClass('popover-backdrop') && target !== popover.backdropEl;\n const isAnotherPopoverTarget = target.closest('.popover') && target.closest('.popover') !== popover.$el[0];\n if (!isAnotherPopoverBackdrop && !isAnotherPopoverTarget) {\n popover.close();\n }\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && popover.params.closeOnEscape) {\n popover.close();\n }\n }\n if (popover.params.closeOnEscape) {\n popover.on('popoverOpen', () => {\n $(document).on('keydown', onKeyDown);\n });\n popover.on('popoverClose', () => {\n $(document).off('keydown', onKeyDown);\n });\n }\n popover.on('popoverOpened', () => {\n if (popover.params.closeByOutsideClick || popover.params.closeByBackdropClick) {\n app.on('touchstart', handleTouchStart);\n app.on('click', handleClick);\n }\n });\n popover.on('popoverClose', () => {\n if (popover.params.closeByOutsideClick || popover.params.closeByBackdropClick) {\n app.off('touchstart', handleTouchStart);\n app.off('click', handleClick);\n }\n });\n $el[0].f7Modal = popover;\n return popover;\n }\n resize() {\n const popover = this;\n const {\n app,\n $el,\n $targetEl,\n $arrowEl\n } = popover;\n const {\n targetX,\n targetY,\n verticalPosition\n } = popover.params;\n $el.css({\n left: '',\n top: ''\n });\n const [width, height] = [$el.width(), $el.height()];\n let arrowSize = 0;\n let arrowLeft;\n let arrowTop;\n const hasArrow = $arrowEl.length > 0;\n const arrowMin = app.theme === 'ios' ? 13 : 24;\n if (hasArrow) {\n $arrowEl.removeClass('on-left on-right on-top on-bottom').css({\n left: '',\n top: ''\n });\n arrowSize = $arrowEl.width() / 2;\n }\n $el.removeClass('popover-on-left popover-on-right popover-on-top popover-on-bottom popover-on-middle').css({\n left: '',\n top: ''\n });\n let targetWidth;\n let targetHeight;\n let targetOffsetLeft;\n let targetOffsetTop;\n let safeAreaTop = parseInt($('html').css('--f7-safe-area-top'), 10);\n let safeAreaLeft = parseInt($('html').css('--f7-safe-area-left'), 10);\n let safeAreaRight = parseInt($('html').css('--f7-safe-area-right'), 10);\n if (Number.isNaN(safeAreaTop)) safeAreaTop = 0;\n if (Number.isNaN(safeAreaLeft)) safeAreaLeft = 0;\n if (Number.isNaN(safeAreaRight)) safeAreaRight = 0;\n if ($targetEl && $targetEl.length > 0) {\n targetWidth = $targetEl.outerWidth();\n targetHeight = $targetEl.outerHeight();\n const targetOffset = $targetEl.offset();\n targetOffsetLeft = targetOffset.left - app.left;\n targetOffsetTop = targetOffset.top - app.top;\n const targetParentPage = $targetEl.parents('.page');\n if (targetParentPage.length > 0) {\n targetOffsetTop -= targetParentPage[0].scrollTop;\n }\n } else if (typeof targetX !== 'undefined' && targetY !== 'undefined') {\n targetOffsetLeft = targetX;\n targetOffsetTop = targetY;\n targetWidth = popover.params.targetWidth || 0;\n targetHeight = popover.params.targetHeight || 0;\n }\n let [left, top, diff] = [0, 0, 0];\n // Top Position\n const forcedPosition = verticalPosition === 'auto' ? false : verticalPosition;\n let position = forcedPosition || 'top';\n if (forcedPosition === 'top' || !forcedPosition && height + arrowSize < targetOffsetTop - safeAreaTop) {\n // On top\n top = targetOffsetTop - height - arrowSize;\n } else if (forcedPosition === 'bottom' || !forcedPosition && height + arrowSize < app.height - targetOffsetTop - targetHeight) {\n // On bottom\n position = 'bottom';\n top = targetOffsetTop + targetHeight + arrowSize;\n } else {\n // On middle\n position = 'middle';\n top = targetHeight / 2 + targetOffsetTop - height / 2;\n diff = top;\n top = Math.max(5, Math.min(top, app.height - height - 5));\n diff -= top;\n }\n\n // Horizontal Position\n if (position === 'top' || position === 'bottom') {\n left = targetWidth / 2 + targetOffsetLeft - width / 2;\n diff = left;\n left = Math.max(5, Math.min(left, app.width - width - 5));\n if (safeAreaLeft) {\n left = Math.max(left, safeAreaLeft);\n }\n if (safeAreaRight && left + width > app.width - 5 - safeAreaRight) {\n left = app.width - 5 - safeAreaRight - width;\n }\n diff -= left;\n if (hasArrow) {\n if (position === 'top') {\n $arrowEl.addClass('on-bottom');\n }\n if (position === 'bottom') {\n $arrowEl.addClass('on-top');\n }\n arrowLeft = width / 2 - arrowSize + diff;\n arrowLeft = Math.max(Math.min(arrowLeft, width - arrowSize * 2 - arrowMin), arrowMin);\n $arrowEl.css({\n left: `${arrowLeft}px`\n });\n }\n } else if (position === 'middle') {\n left = targetOffsetLeft - width - arrowSize;\n if (hasArrow) $arrowEl.addClass('on-right');\n if (left < 5 || left + width + safeAreaRight > app.width || left < safeAreaLeft) {\n if (left < 5) left = targetOffsetLeft + targetWidth + arrowSize;\n if (left + width + safeAreaRight > app.width) left = app.width - width - 5 - safeAreaRight;\n if (left < safeAreaLeft) left = safeAreaLeft;\n if (hasArrow) $arrowEl.removeClass('on-right').addClass('on-left');\n }\n if (hasArrow) {\n arrowTop = height / 2 - arrowSize + diff;\n arrowTop = Math.max(Math.min(arrowTop, height - arrowSize * 2 - arrowMin), arrowMin);\n $arrowEl.css({\n top: `${arrowTop}px`\n });\n }\n }\n\n // Horizontal Position\n let hPosition;\n if (targetOffsetLeft < app.width / 2) {\n hPosition = 'right';\n } else {\n hPosition = 'left';\n }\n $el.addClass(`popover-on-${position} popover-on-${hPosition}`);\n\n // Apply Styles\n $el.css({\n top: `${top}px`,\n left: `${left}px`\n });\n }\n}\nexport default Popover;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Popover from './popover-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'popover',\n params: {\n popover: {\n verticalPosition: 'auto',\n arrow: true,\n backdrop: true,\n backdropEl: undefined,\n backdropUnique: false,\n closeByBackdropClick: true,\n closeByOutsideClick: true,\n closeOnEscape: false,\n containerEl: null\n }\n },\n static: {\n Popover\n },\n create() {\n const app = this;\n app.popover = extend(ModalMethods({\n app,\n constructor: Popover,\n defaultSelector: '.popover.modal-in'\n }), {\n open(popoverEl, targetEl, animate) {\n let $popoverEl = $(popoverEl);\n if ($popoverEl.length > 1) {\n // check if same popover in other page\n const $targetPage = $(targetEl).parents('.page');\n if ($targetPage.length) {\n $popoverEl.each(el => {\n const $el = $(el);\n if ($el.parents($targetPage)[0] === $targetPage[0]) {\n $popoverEl = $el;\n }\n });\n }\n }\n if ($popoverEl.length > 1) {\n $popoverEl = $popoverEl.eq($popoverEl.length - 1);\n }\n let popover = $popoverEl[0].f7Modal;\n const data = $popoverEl.dataset();\n if (!popover) {\n popover = new Popover(app, Object.assign({\n el: $popoverEl,\n targetEl\n }, data));\n }\n return popover.open(targetEl, animate);\n }\n });\n },\n clicks: {\n '.popover-open': function openPopover($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popover.open(data.popover, $clickedEl, data.animate);\n },\n '.popover-close': function closePopover($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popover.close(data.popover, data.animate, $clickedEl);\n }\n }\n};", "/* eslint indent: [\"off\"] */\nimport { getWindow, getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\nimport { extend, nextTick } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\nimport $ from '../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Actions extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.actions, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const actions = this;\n const device = getDevice();\n const window = getWindow();\n const document = getDocument();\n actions.params = extendedParams;\n\n // Buttons\n let groups;\n if (actions.params.buttons) {\n groups = actions.params.buttons;\n if (!Array.isArray(groups[0])) groups = [groups];\n }\n actions.groups = groups;\n\n // Find Element\n let $el;\n if (actions.params.el) {\n $el = $(actions.params.el).eq(0);\n } else if (actions.params.content) {\n $el = $(actions.params.content).filter(node => node.nodeType === 1).eq(0);\n } else if (actions.params.buttons) {\n if (actions.params.convertToPopover) {\n actions.popoverHtml = actions.renderPopover();\n }\n actions.actionsHtml = actions.render();\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el && $el.length === 0 && !(actions.actionsHtml || actions.popoverHtml)) {\n return actions.destroy();\n }\n\n // Backdrop\n let $backdropEl;\n if (actions.params.backdrop && actions.params.backdropEl) {\n $backdropEl = $(actions.params.backdropEl);\n } else if (actions.params.backdrop) {\n if (actions.params.backdropUnique) {\n $backdropEl = $('');\n actions.$containerEl.append($backdropEl);\n } else {\n $backdropEl = actions.$containerEl.children('.actions-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n actions.$containerEl.append($backdropEl);\n }\n }\n const originalOpen = actions.open;\n const originalClose = actions.close;\n let popover;\n function buttonOnClick(e) {\n const $buttonEl = $(this);\n let buttonIndex;\n let groupIndex;\n if ($buttonEl.hasClass('list-button') || $buttonEl.hasClass('item-link')) {\n buttonIndex = $buttonEl.parents('li').index();\n groupIndex = $buttonEl.parents('.list').index();\n } else {\n buttonIndex = $buttonEl.index();\n groupIndex = $buttonEl.parents('.actions-group').index();\n }\n if (typeof groups !== 'undefined') {\n const button = groups[groupIndex][buttonIndex];\n if (button.onClick) button.onClick(actions, e);\n if (actions.params.onClick) actions.params.onClick(actions, e);\n if (button.close !== false) actions.close();\n }\n }\n actions.open = function open(animate) {\n let convertToPopover = false;\n const {\n targetEl,\n targetX,\n targetY,\n targetWidth,\n targetHeight\n } = actions.params;\n if (actions.params.convertToPopover && (targetEl || targetX !== undefined && targetY !== undefined)) {\n // Popover\n if (actions.params.forceToPopover || device.ios && device.ipad || app.width >= 768 || device.desktop) {\n convertToPopover = true;\n }\n }\n if (convertToPopover && actions.popoverHtml) {\n popover = app.popover.create({\n containerEl: actions.params.containerEl,\n content: actions.popoverHtml,\n backdrop: actions.params.backdrop,\n targetEl,\n targetX,\n targetY,\n targetWidth,\n targetHeight,\n on: {\n open() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:open ${actions.type.toLowerCase()}:open`);\n actions.emit(`local::open modalOpen ${actions.type}Open`, actions);\n },\n opened() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:opened ${actions.type.toLowerCase()}:opened`);\n actions.emit(`local::opened modalOpened ${actions.type}Opened`, actions);\n },\n close() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:close ${actions.type.toLowerCase()}:close`);\n actions.emit(`local::close modalClose ${actions.type}Close`, actions);\n },\n closed() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:closed ${actions.type.toLowerCase()}:closed`);\n actions.emit(`local::closed modalClosed ${actions.type}Closed`, actions);\n }\n }\n });\n popover.open(animate);\n popover.once('popoverOpened', () => {\n popover.$el.find('.list-button, .item-link').each(buttonEl => {\n $(buttonEl).on('click', buttonOnClick);\n });\n });\n popover.once('popoverClosed', () => {\n popover.$el.find('.list-button, .item-link').each(buttonEl => {\n $(buttonEl).off('click', buttonOnClick);\n });\n nextTick(() => {\n popover.destroy();\n popover = undefined;\n });\n });\n } else {\n actions.$el = actions.actionsHtml ? $(actions.actionsHtml) : actions.$el;\n actions.$el[0].f7Modal = actions;\n if (actions.groups) {\n actions.$el.find('.actions-button').each(buttonEl => {\n $(buttonEl).on('click', buttonOnClick);\n });\n actions.once('actionsClosed', () => {\n actions.$el.find('.actions-button').each(buttonEl => {\n $(buttonEl).off('click', buttonOnClick);\n });\n });\n }\n actions.el = actions.$el[0];\n originalOpen.call(actions, animate);\n }\n return actions;\n };\n actions.close = function close(animate) {\n if (popover) {\n popover.close(animate);\n } else {\n originalClose.call(actions, animate);\n }\n return actions;\n };\n extend(actions, {\n app,\n $el,\n el: $el ? $el[0] : undefined,\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'actions'\n });\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(actions.el).length === 0) {\n if (actions.params.closeByBackdropClick && actions.params.backdrop && actions.backdropEl && actions.backdropEl === target) {\n actions.close();\n } else if (actions.params.closeByOutsideClick) {\n actions.close();\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && actions.params.closeOnEscape) {\n actions.close();\n }\n }\n if (actions.params.closeOnEscape) {\n actions.on('open', () => {\n $(document).on('keydown', onKeyDown);\n });\n actions.on('close', () => {\n $(document).off('keydown', onKeyDown);\n });\n }\n actions.on('opened', () => {\n if (actions.params.closeByBackdropClick || actions.params.closeByOutsideClick) {\n app.on('click', handleClick);\n }\n });\n actions.on('close', () => {\n if (actions.params.closeByBackdropClick || actions.params.closeByOutsideClick) {\n app.off('click', handleClick);\n }\n });\n if ($el) {\n $el[0].f7Modal = actions;\n }\n return actions;\n }\n render() {\n const actions = this;\n if (actions.params.render) return actions.params.render.call(actions, actions);\n const {\n groups\n } = actions;\n const cssClass = actions.params.cssClass;\n return $jsx(\"div\", {\n class: `actions-modal${actions.params.grid ? ' actions-grid' : ''} ${cssClass || ''}`\n }, groups.map(group => $jsx(\"div\", {\n class: \"actions-group\"\n }, group.map(button => {\n const buttonClasses = [`actions-${button.label ? 'label' : 'button'}`];\n const {\n color,\n bg,\n strong,\n disabled,\n label,\n text,\n icon\n } = button;\n if (color) buttonClasses.push(`color-${color}`);\n if (bg) buttonClasses.push(`bg-color-${bg}`);\n if (strong) buttonClasses.push('actions-button-strong');\n if (disabled) buttonClasses.push('disabled');\n if (label) {\n return $jsx(\"div\", {\n class: buttonClasses.join(' ')\n }, text);\n }\n return $jsx(\"div\", {\n class: buttonClasses.join(' ')\n }, icon && $jsx(\"div\", {\n class: \"actions-button-media\"\n }, icon), $jsx(\"div\", {\n class: \"actions-button-text\"\n }, text));\n }))));\n }\n renderPopover() {\n const actions = this;\n if (actions.params.renderPopover) return actions.params.renderPopover.call(actions, actions);\n const {\n groups\n } = actions;\n const cssClass = actions.params.cssClass;\n return $jsx(\"div\", {\n class: `popover popover-from-actions ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, groups.map(group => $jsx(\"div\", {\n class: \"list\"\n }, $jsx(\"ul\", null, group.map(button => {\n const itemClasses = [];\n const {\n color,\n bg,\n strong,\n disabled,\n label,\n text,\n icon\n } = button;\n if (color) itemClasses.push(`color-${color}`);\n if (bg) itemClasses.push(`bg-color-${bg}`);\n if (strong) itemClasses.push('popover-from-actions-strong');\n if (disabled) itemClasses.push('disabled');\n if (label) {\n itemClasses.push('popover-from-actions-label');\n return `${text}`;\n }\n if (icon) {\n itemClasses.push('item-link item-content');\n return $jsx(\"li\", null, $jsx(\"a\", {\n class: itemClasses.join(' ')\n }, $jsx(\"div\", {\n class: \"item-media\"\n }, icon), $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, text))));\n }\n itemClasses.push('list-button');\n return $jsx(\"li\", null, $jsx(\"a\", {\n class: itemClasses.join(' ')\n }, text));\n }))))));\n }\n}\nexport default Actions;", "import Actions from './actions-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'actions',\n params: {\n actions: {\n convertToPopover: true,\n forceToPopover: false,\n backdrop: true,\n backdropEl: undefined,\n backdropUnique: false,\n cssClass: null,\n closeByBackdropClick: true,\n closeOnEscape: false,\n render: null,\n renderPopover: null,\n containerEl: null\n }\n },\n static: {\n Actions\n },\n create() {\n const app = this;\n app.actions = ModalMethods({\n app,\n constructor: Actions,\n defaultSelector: '.actions-modal.modal-in'\n });\n },\n clicks: {\n '.actions-open': function openActions($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.actions.open(data.actions, data.animate, $clickedEl);\n },\n '.actions-close': function closeActions($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.actions.close(data.actions, data.animate, $clickedEl);\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, now, getTranslate } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\nclass Sheet extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.sheet, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const sheet = this;\n const window = getWindow();\n const document = getDocument();\n const support = getSupport();\n const device = getDevice();\n sheet.params = extendedParams;\n if (typeof sheet.params.backdrop === 'undefined') {\n sheet.params.backdrop = app.theme !== 'ios';\n }\n\n // Find Element\n let $el;\n if (!sheet.params.el) {\n $el = $(sheet.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(sheet.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return sheet.destroy();\n }\n let $backdropEl;\n if (sheet.params.backdrop && sheet.params.backdropEl) {\n $backdropEl = $(sheet.params.backdropEl);\n } else if (sheet.params.backdrop) {\n if (sheet.params.backdropUnique) {\n $backdropEl = $('');\n sheet.$containerEl.append($backdropEl);\n } else {\n $backdropEl = sheet.$containerEl.children('.sheet-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n sheet.$containerEl.append($backdropEl);\n }\n }\n extend(sheet, {\n app,\n push: $el.hasClass('sheet-modal-push') || sheet.params.push,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'sheet',\n $htmlEl: $('html')\n });\n if (sheet.params.push) {\n $el.addClass('sheet-modal-push');\n }\n let $pageContentEl;\n function scrollToElementOnOpen() {\n const $scrollEl = $(sheet.params.scrollToEl).eq(0);\n if ($scrollEl.length === 0) return;\n $pageContentEl = $scrollEl.parents('.page-content');\n if ($pageContentEl.length === 0) return;\n const paddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const paddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n const pageHeight = $pageContentEl[0].offsetHeight - paddingTop - $el.height();\n const pageScrollHeight = $pageContentEl[0].scrollHeight - paddingTop - $el.height();\n const pageScroll = $pageContentEl.scrollTop();\n let newPaddingBottom;\n const scrollElTop = $scrollEl.offset().top - paddingTop + $scrollEl[0].offsetHeight;\n if (scrollElTop > pageHeight) {\n const scrollTop = pageScroll + scrollElTop - pageHeight;\n if (scrollTop + pageHeight > pageScrollHeight) {\n newPaddingBottom = scrollTop + pageHeight - pageScrollHeight + paddingBottom;\n if (pageHeight === pageScrollHeight) {\n newPaddingBottom = $el.height();\n }\n $pageContentEl.css({\n 'padding-bottom': `${newPaddingBottom}px`\n });\n }\n $pageContentEl.scrollTop(scrollTop, 300);\n }\n }\n function scrollToElementOnClose() {\n if ($pageContentEl && $pageContentEl.length > 0) {\n $pageContentEl.css({\n 'padding-bottom': ''\n });\n }\n }\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(sheet.el).length === 0) {\n if (sheet.params.closeByBackdropClick && sheet.params.backdrop && sheet.backdropEl && sheet.backdropEl === target) {\n sheet.close();\n } else if (sheet.params.closeByOutsideClick) {\n sheet.close();\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && sheet.params.closeOnEscape) {\n sheet.close();\n }\n }\n let pushOffset;\n function pushViewScale(offset) {\n return (app.height - offset * 2) / app.height;\n }\n const useBreakpoints = sheet.params.breakpoints && sheet.params.breakpoints.length > 0;\n let isTouched = false;\n let startTouch;\n let currentTouch;\n let isScrolling;\n let touchStartTime;\n let touchesDiff;\n let isMoved = false;\n let isTopSheetModal;\n let swipeStepTranslate;\n let startTranslate;\n let currentTranslate;\n let sheetElOffsetHeight;\n let minTranslate;\n let maxTranslate;\n let $pushViewEl;\n let pushBorderRadius;\n let sheetPageContentEl;\n let sheetPageContentScrollTop;\n let sheetPageContentScrollHeight;\n let sheetPageContentOffsetHeight;\n let breakpointsTranslate = [];\n let currentBreakpointIndex;\n let backdropBreakpointSet = true;\n function handleTouchStart(e) {\n if (isTouched || !(sheet.params.swipeToClose || sheet.params.swipeToStep) || !e.isTrusted) return;\n if (sheet.params.swipeHandler && $(e.target).closest(sheet.params.swipeHandler).length === 0) {\n return;\n }\n if ($(e.target).closest('.sortable-handler').length > 0) return;\n isTouched = true;\n isMoved = false;\n startTouch = {\n x: e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY\n };\n touchStartTime = now();\n isScrolling = undefined;\n isTopSheetModal = $el.hasClass('sheet-modal-top');\n if (!sheet.params.swipeHandler && e.type === 'touchstart') {\n sheetPageContentEl = $(e.target).closest('.page-content')[0];\n }\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n currentTouch = {\n x: e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY\n };\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(currentTouch.x - startTouch.x) > Math.abs(currentTouch.y - startTouch.y));\n }\n if (isScrolling) {\n isTouched = false;\n isMoved = false;\n return;\n }\n touchesDiff = startTouch.y - currentTouch.y;\n const direction = touchesDiff < 0 ? 'to-bottom' : 'to-top';\n if (!isMoved) {\n if (sheetPageContentEl && !$el.hasClass('modal-in-swipe-step')) {\n sheetPageContentScrollTop = sheetPageContentEl.scrollTop;\n sheetPageContentScrollHeight = sheetPageContentEl.scrollHeight;\n sheetPageContentOffsetHeight = sheetPageContentEl.offsetHeight;\n if (!(sheetPageContentScrollHeight === sheetPageContentOffsetHeight) && !(direction === 'to-bottom' && sheetPageContentScrollTop === 0) && !(direction === 'to-top' && sheetPageContentScrollTop === sheetPageContentScrollHeight - sheetPageContentOffsetHeight)) {\n $el.transform('');\n isTouched = false;\n isMoved = false;\n return;\n }\n }\n if (sheet.push && pushOffset) {\n $pushViewEl = app.$el.children('.view, .views');\n }\n sheetElOffsetHeight = $el[0].offsetHeight;\n startTranslate = getTranslate($el[0], 'y');\n if (isTopSheetModal) {\n minTranslate = sheet.params.swipeToClose ? -sheetElOffsetHeight : -swipeStepTranslate;\n maxTranslate = 0;\n } else {\n minTranslate = 0;\n maxTranslate = sheet.params.swipeToClose ? sheetElOffsetHeight : useBreakpoints ? breakpointsTranslate[0] : swipeStepTranslate;\n }\n isMoved = true;\n }\n currentTranslate = startTranslate - touchesDiff;\n currentTranslate = Math.min(Math.max(currentTranslate, minTranslate), maxTranslate);\n e.preventDefault();\n if (useBreakpoints) {\n let progress = isTopSheetModal ? 1 + currentTranslate / sheetElOffsetHeight : 1 - currentTranslate / sheetElOffsetHeight;\n progress = Math.abs(progress);\n progress = Math.min(Math.max(progress, 0), 1);\n // eslint-disable-next-line\n setBackdropBreakpoint(progress);\n // eslint-disable-next-line\n setPushBreakpoint(progress);\n }\n if (sheet.push && pushOffset && !useBreakpoints) {\n let progress = (currentTranslate - startTranslate) / sheetElOffsetHeight;\n if (sheet.params.swipeToStep) {\n if (isTopSheetModal) {\n progress = currentTranslate / swipeStepTranslate;\n } else {\n progress = 1 - (swipeStepTranslate - currentTranslate) / swipeStepTranslate;\n }\n }\n progress = Math.abs(progress);\n progress = Math.min(Math.max(progress, 0), 1);\n const pushProgress = 1 - progress;\n const scale = 1 - (1 - pushViewScale(pushOffset)) * pushProgress;\n $pushViewEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${scale})`, 'important');\n });\n if (sheet.params.swipeToStep) {\n $pushViewEl.css('border-radius', `${pushBorderRadius * pushProgress}px`);\n }\n }\n $el.transition(0).transform(`translate3d(0,${currentTranslate}px,0)`);\n if (sheet.params.swipeToStep) {\n let progress;\n if (isTopSheetModal) {\n progress = 1 - currentTranslate / swipeStepTranslate;\n } else {\n progress = (swipeStepTranslate - currentTranslate) / swipeStepTranslate;\n }\n progress = Math.min(Math.max(progress, 0), 1);\n $el.trigger('sheet:stepprogress', progress);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, progress);\n }\n }\n function handleTouchEnd() {\n isTouched = false;\n if (!isMoved) {\n return;\n }\n isMoved = false;\n $el.transform('').transition('');\n if (sheet.push && pushOffset) {\n $pushViewEl.transition('');\n if (!useBreakpoints) {\n $pushViewEl.transform('');\n $pushViewEl.css('border-radius', '');\n }\n }\n const direction = touchesDiff < 0 ? 'to-bottom' : 'to-top';\n const diff = Math.abs(touchesDiff);\n if (diff === 0 || currentTranslate === startTranslate) return;\n const timeDiff = new Date().getTime() - touchStartTime;\n if (!sheet.params.swipeToStep && !useBreakpoints) {\n if (direction !== (isTopSheetModal ? 'to-top' : 'to-bottom')) {\n return;\n }\n if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > sheetElOffsetHeight / 2) {\n sheet.close();\n }\n return;\n }\n const openDirection = isTopSheetModal ? 'to-bottom' : 'to-top';\n const closeDirection = isTopSheetModal ? 'to-top' : 'to-bottom';\n const absCurrentTranslate = Math.abs(currentTranslate);\n const absSwipeStepTranslate = Math.abs(swipeStepTranslate);\n if (timeDiff < 300 && diff > 10 && useBreakpoints) {\n // SHORT SWIPES BREAKPOINTS\n if (direction === openDirection && typeof currentBreakpointIndex !== 'undefined') {\n if (currentBreakpointIndex === params.breakpoints.length - 1) {\n // open\n sheet.setBreakpoint(1);\n } else {\n // move to next breakpoint\n currentBreakpointIndex = Math.min(breakpointsTranslate.length - 1, currentBreakpointIndex + 1);\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n }\n if (direction === closeDirection) {\n if (currentBreakpointIndex === 0) {\n // close\n sheet.close();\n } else {\n // move to prev breakpoint\n if (typeof currentBreakpointIndex === 'undefined') {\n currentBreakpointIndex = params.breakpoints.length - 1;\n } else {\n currentBreakpointIndex = Math.max(0, currentBreakpointIndex - 1);\n }\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n }\n } else if (timeDiff < 300 && diff > 10) {\n // SHORT SWIPES SWIPE STEP\n if (direction === openDirection && absCurrentTranslate < absSwipeStepTranslate) {\n // open step\n $el.removeClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 1);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 1);\n sheet.emit('local::_swipeStep', false);\n $el.trigger('sheet:stepopen');\n sheet.emit('local::stepOpen sheetStepOpen', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n $pushViewEl.css('border-radius', '');\n }\n }\n if (direction === closeDirection && absCurrentTranslate > absSwipeStepTranslate) {\n // close sheet\n if (sheet.params.swipeToClose) {\n sheet.close();\n } else {\n // close step\n $el.addClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 0);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 0);\n sheet.emit('local::_swipeStep', true);\n $el.trigger('sheet:stepclose');\n sheet.emit('local::stepClose sheetStepClose', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n $pushViewEl.css('border-radius', '0px');\n }\n }\n }\n if (direction === closeDirection && absCurrentTranslate <= absSwipeStepTranslate) {\n // close step\n $el.addClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 0);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 0);\n sheet.emit('local::_swipeStep', true);\n $el.trigger('sheet:stepclose');\n sheet.emit('local::stepClose sheetStepClose', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n $pushViewEl.css('border-radius', '0px');\n }\n }\n return;\n }\n if (timeDiff >= 300 && useBreakpoints) {\n // LONG SWIPES BREAKPOINTS\n const allBreakpoints = [sheetElOffsetHeight, ...breakpointsTranslate, 0];\n const closestTranslate = allBreakpoints.reduce((prev, curr) => {\n return Math.abs(curr - currentTranslate) < Math.abs(prev - currentTranslate) ? curr : prev;\n });\n const closestIndex = allBreakpoints.indexOf(closestTranslate);\n if (closestTranslate === 0) {\n // open\n sheet.setBreakpoint(1);\n } else if (closestIndex === 0) {\n // close\n sheet.close();\n } else {\n // set bp\n currentBreakpointIndex = closestIndex - 1;\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n } else if (timeDiff >= 300) {\n // LONG SWIPES SWIPE STEP\n const stepOpened = !$el.hasClass('modal-in-swipe-step');\n if (!stepOpened) {\n if (absCurrentTranslate < absSwipeStepTranslate / 2) {\n // open step\n $el.removeClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 1);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 1);\n sheet.emit('local::_swipeStep', false);\n $el.trigger('sheet:stepopen');\n sheet.emit('local::stepOpen sheetStepOpen', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n $pushViewEl.css('border-radius', '');\n }\n } else if (absCurrentTranslate - absSwipeStepTranslate > (sheetElOffsetHeight - absSwipeStepTranslate) / 2) {\n // close sheet\n if (sheet.params.swipeToClose) sheet.close();\n }\n } else if (stepOpened) {\n if (absCurrentTranslate > absSwipeStepTranslate + (sheetElOffsetHeight - absSwipeStepTranslate) / 2) {\n // close sheet\n if (sheet.params.swipeToClose) sheet.close();\n } else if (absCurrentTranslate > absSwipeStepTranslate / 2) {\n // close step\n $el.addClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 0);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 0);\n sheet.emit('local::_swipeStep', true);\n $el.trigger('sheet:stepclose');\n sheet.emit('local::stepClose sheetStepClose', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n $pushViewEl.css('border-radius', '0px');\n }\n }\n }\n }\n }\n const setPushBreakpoint = breakpoint => {\n const {\n pushBreakpoint\n } = params;\n if (pushBreakpoint === null || typeof pushBreakpoint === 'undefined' || !sheet.push || !pushOffset) return;\n if (breakpoint >= pushBreakpoint) {\n sheet.$htmlEl.addClass('with-modal-sheet-push').removeClass('with-modal-sheet-push-closing');\n $pushViewEl.transition('').forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${pushViewScale(pushOffset)})`, 'important');\n });\n $pushViewEl.css('border-radius', `${pushBorderRadius * 1}px`);\n } else {\n const pushBreakpoints = [0, ...params.breakpoints, 1];\n const pushTransparentBreakpoint = pushBreakpoints[pushBreakpoints.indexOf(pushBreakpoint) - 1];\n if (breakpoint <= pushTransparentBreakpoint) {\n $pushViewEl.transition('').css('transform', '');\n $pushViewEl.css('border-radius', '');\n sheet.$htmlEl.removeClass('with-modal-sheet-push');\n if (breakpoint === pushTransparentBreakpoint) {\n sheet.$htmlEl.addClass('with-modal-sheet-push-closing');\n }\n } else {\n const progress = (breakpoint - pushTransparentBreakpoint) / (pushBreakpoint - pushTransparentBreakpoint);\n sheet.$htmlEl.addClass('with-modal-sheet-push').removeClass('with-modal-sheet-push-closing');\n $pushViewEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${1 - (1 - pushViewScale(pushOffset)) * progress})`, 'important');\n });\n $pushViewEl.css('border-radius', `${pushBorderRadius * progress}px`);\n }\n }\n };\n const setBackdropBreakpoint = breakpoint => {\n const {\n backdrop,\n backdropBreakpoint\n } = params;\n if (!backdropBreakpoint || !backdrop || !$backdropEl.length) return;\n if (breakpoint >= backdropBreakpoint) {\n if (!backdropBreakpointSet) {\n $backdropEl.transition('').css({\n opacity: '',\n pointerEvents: ''\n });\n }\n backdropBreakpointSet = true;\n } else {\n const backdropBreakpoints = [0, ...params.breakpoints, 1];\n const backdropTransparentBreakpoint = backdropBreakpoints[backdropBreakpoints.indexOf(backdropBreakpoint) - 1];\n if (breakpoint <= backdropTransparentBreakpoint) {\n if (backdropBreakpointSet) {\n $backdropEl.transition('').css({\n opacity: 0,\n pointerEvents: 'none'\n });\n }\n backdropBreakpointSet = false;\n } else {\n const progress = (breakpoint - backdropTransparentBreakpoint) / (backdropBreakpoint - backdropTransparentBreakpoint);\n $backdropEl.transition(0).css({\n opacity: progress,\n pointerEvents: 'auto'\n });\n }\n }\n };\n sheet.calcBreakpoints = () => {\n if (!useBreakpoints) {\n return;\n }\n const fullSize = $el[0].offsetHeight;\n // eslint-disable-next-line\n const isTopSheetModal = $el.hasClass('sheet-modal-top');\n breakpointsTranslate = [];\n sheet.params.breakpoints.forEach(ratio => {\n breakpointsTranslate.push((fullSize - fullSize * ratio) * (isTopSheetModal ? -1 : 1));\n });\n };\n sheet.setBreakpoint = value => {\n if (!useBreakpoints) {\n return sheet;\n }\n if (value === 1) {\n // open\n if (!sheet.opened) {\n sheet.open();\n }\n $el.removeClass('modal-in-breakpoint');\n currentBreakpointIndex = undefined;\n setBackdropBreakpoint(value);\n setPushBreakpoint(value);\n $el.trigger('sheet:breakpoint', value);\n sheet.emit('local::breakpoint sheetBreakpoint', sheet, value);\n } else if (value === 0) {\n // close\n $el.trigger('sheet:breakpoint', value);\n sheet.emit('local::breakpoint sheetBreakpoint', sheet, value);\n sheet.close();\n } else {\n const index = params.breakpoints.indexOf(value);\n if (index < 0) return sheet;\n if (!sheet.opened) {\n sheet.open();\n }\n setBackdropBreakpoint(value);\n setPushBreakpoint(value);\n $el.trigger('sheet:breakpoint', value);\n sheet.emit('local::breakpoint sheetBreakpoint', sheet, value);\n currentBreakpointIndex = index;\n $el[0].style.setProperty('--f7-sheet-breakpoint', `${breakpointsTranslate[index]}px`);\n $el.addClass('modal-in-breakpoint');\n }\n return sheet;\n };\n const setBreakpointsOnResize = () => {\n sheet.calcBreakpoints();\n if (typeof currentBreakpointIndex !== 'undefined') {\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n };\n sheet.setSwipeStep = function setSwipeStep(byResize) {\n if (byResize === void 0) {\n byResize = true;\n }\n const $swipeStepEl = $el.find('.sheet-modal-swipe-step').eq(0);\n if (!$swipeStepEl.length) return;\n\n // eslint-disable-next-line\n if ($el.hasClass('sheet-modal-top')) {\n swipeStepTranslate = -($swipeStepEl.offset().top - $el.offset().top + $swipeStepEl[0].offsetHeight);\n } else {\n swipeStepTranslate = $el[0].offsetHeight - ($swipeStepEl.offset().top - $el.offset().top + $swipeStepEl[0].offsetHeight);\n }\n $el[0].style.setProperty('--f7-sheet-swipe-step', `${swipeStepTranslate}px`);\n if (!byResize) {\n $el.addClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', true);\n }\n };\n function onResize() {\n if (useBreakpoints) {\n setBreakpointsOnResize();\n } else {\n sheet.setSwipeStep(true);\n }\n }\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (sheet.params.swipeToClose || sheet.params.swipeToStep || useBreakpoints) {\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n sheet.once('sheetDestroy', () => {\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n });\n }\n sheet.on('open', () => {\n if (sheet.params.closeOnEscape) {\n $(document).on('keydown', onKeyDown);\n }\n $el.prevAll('.popup.modal-in').addClass('popup-behind');\n app.on('resize', onResize);\n if (sheet.params.scrollToEl) {\n scrollToElementOnOpen();\n }\n if (sheet.push) {\n pushOffset = parseInt($el.css('--f7-sheet-push-offset'), 10);\n if (Number.isNaN(pushOffset)) pushOffset = 0;\n if (!pushOffset) pushOffset = app.theme === 'ios' ? 44 : 48;\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-offset', `${pushOffset}px`);\n $el.addClass('sheet-modal-push');\n if (!useBreakpoints) {\n sheet.$htmlEl.addClass('with-modal-sheet-push');\n }\n if (!sheet.params.swipeToStep && !useBreakpoints) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n } else {\n $pushViewEl = app.$el.children('.view, .views');\n pushBorderRadius = app.theme === 'ios' ? 10 : 16;\n $pushViewEl.css('border-radius', '0px');\n }\n }\n if (useBreakpoints) {\n sheet.calcBreakpoints();\n sheet.setBreakpoint(params.breakpoints[0]);\n } else if (sheet.params.swipeToStep) {\n sheet.setSwipeStep(false);\n }\n });\n sheet.on('opened', () => {\n if (sheet.params.closeByOutsideClick || sheet.params.closeByBackdropClick) {\n app.on('click', handleClick);\n }\n });\n sheet.on('close', () => {\n currentBreakpointIndex = undefined;\n if (sheet.params.swipeToStep || useBreakpoints) {\n $el.removeClass('modal-in-swipe-step modal-in-breakpoint');\n sheet.emit('local::_swipeStep', false);\n }\n app.off('resize', onResize);\n if (sheet.params.closeOnEscape) {\n $(document).off('keydown', onKeyDown);\n }\n if (sheet.params.scrollToEl) {\n scrollToElementOnClose();\n }\n if (sheet.params.closeByOutsideClick || sheet.params.closeByBackdropClick) {\n app.off('click', handleClick);\n }\n $el.prevAll('.popup.modal-in').eq(0).removeClass('popup-behind');\n if (sheet.push && pushOffset) {\n sheet.$htmlEl.removeClass('with-modal-sheet-push');\n sheet.$htmlEl.addClass('with-modal-sheet-push-closing');\n if ($pushViewEl) {\n $pushViewEl.transform('');\n $pushViewEl.css('border-radius', '');\n }\n }\n });\n sheet.on('closed', () => {\n if (sheet.push && pushOffset) {\n sheet.$htmlEl.removeClass('with-modal-sheet-push-closing');\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-offset');\n }\n });\n sheet.stepOpen = function stepOpen() {\n $el.removeClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', false);\n if (sheet.push) {\n if (!pushOffset) {\n pushOffset = parseInt($el.css('--f7-sheet-push-offset'), 10);\n if (Number.isNaN(pushOffset)) pushOffset = 0;\n }\n if (pushOffset) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n }\n }\n };\n sheet.stepClose = function stepClose() {\n $el.addClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', true);\n if (sheet.push) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n }\n };\n sheet.stepToggle = function stepToggle() {\n $el.toggleClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', $el.hasClass('modal-in-swipe-step'));\n };\n $el[0].f7Modal = sheet;\n return sheet;\n }\n}\nexport default Sheet;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Sheet from './sheet-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'sheet',\n params: {\n sheet: {\n push: false,\n backdrop: undefined,\n backdropEl: undefined,\n backdropUnique: false,\n closeByBackdropClick: true,\n closeByOutsideClick: false,\n closeOnEscape: false,\n swipeToClose: false,\n swipeToStep: false,\n breakpoints: [],\n backdropBreakpoint: 0,\n pushBreakpoint: 0,\n swipeHandler: null,\n containerEl: null\n }\n },\n static: {\n Sheet\n },\n create() {\n const app = this;\n app.sheet = extend({}, ModalMethods({\n app,\n constructor: Sheet,\n defaultSelector: '.sheet-modal.modal-in'\n }), {\n stepOpen(sheet) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.stepOpen) return sheetInstance.stepOpen();\n return undefined;\n },\n stepClose(sheet) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.stepClose) return sheetInstance.stepClose();\n return undefined;\n },\n stepToggle(sheet) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.stepToggle) return sheetInstance.stepToggle();\n return undefined;\n },\n setBreakpoint(sheet, breakpoint) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.setBreakpoint) return sheetInstance.setBreakpoint(breakpoint);\n return undefined;\n }\n });\n },\n clicks: {\n '.sheet-open': function openSheet($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n if ($('.sheet-modal.modal-in').length > 0 && data.sheet && $(data.sheet)[0] !== $('.sheet-modal.modal-in')[0]) {\n app.sheet.close('.sheet-modal.modal-in');\n }\n app.sheet.open(data.sheet, data.animate, $clickedEl);\n },\n '.sheet-close': function closeSheet($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sheet.close(data.sheet, data.animate, $clickedEl);\n }\n }\n};", "import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, nextTick } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Toast extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.toast, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const toast = this;\n const window = getWindow();\n toast.app = app;\n toast.params = extendedParams;\n const {\n closeButton,\n closeTimeout\n } = toast.params;\n let $el;\n if (!toast.params.el) {\n // Find Element\n const toastHtml = toast.render();\n $el = $(toastHtml);\n } else {\n $el = $(toast.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return toast.destroy();\n }\n extend(toast, {\n $el,\n el: $el[0],\n type: 'toast'\n });\n $el[0].f7Modal = toast;\n if (closeButton) {\n $el.find('.toast-button').on('click', () => {\n toast.emit('local::closeButtonClick toastCloseButtonClick', toast);\n toast.close();\n });\n toast.on('beforeDestroy', () => {\n $el.find('.toast-button').off('click');\n });\n }\n let timeoutId;\n toast.on('open', () => {\n $('.toast.modal-in').each(openedEl => {\n const toastInstance = app.toast.get(openedEl);\n if (openedEl !== toast.el && toastInstance) {\n toastInstance.close();\n }\n });\n if (closeTimeout) {\n timeoutId = nextTick(() => {\n toast.close();\n }, closeTimeout);\n }\n });\n toast.on('close', () => {\n window.clearTimeout(timeoutId);\n });\n if (toast.params.destroyOnClose) {\n toast.once('closed', () => {\n setTimeout(() => {\n toast.destroy();\n }, 0);\n });\n }\n return toast;\n }\n render() {\n const toast = this;\n if (toast.params.render) return toast.params.render.call(toast, toast);\n const {\n position,\n horizontalPosition,\n cssClass,\n icon,\n text,\n closeButton,\n closeButtonColor,\n closeButtonText\n } = toast.params;\n const horizontalClass = position === 'top' || position === 'bottom' ? `toast-horizontal-${horizontalPosition}` : '';\n return $jsx(\"div\", {\n class: `toast toast-${position} ${horizontalClass} ${cssClass || ''} ${icon ? 'toast-with-icon' : ''}`\n }, $jsx(\"div\", {\n class: \"toast-content\"\n }, icon && $jsx(\"div\", {\n class: \"toast-icon\"\n }, icon), $jsx(\"div\", {\n class: \"toast-text\"\n }, text), closeButton && !icon && $jsx(\"a\", {\n class: `toast-button button ${closeButtonColor ? `color-${closeButtonColor}` : ''}`\n }, closeButtonText)));\n }\n}\nexport default Toast;", "import { extend } from '../../shared/utils.js';\nimport Toast from './toast-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'toast',\n static: {\n Toast\n },\n create() {\n const app = this;\n app.toast = extend({}, ModalMethods({\n app,\n constructor: Toast,\n defaultSelector: '.toast.modal-in'\n }), {\n // Shortcuts\n show(params) {\n extend(params, {\n destroyOnClose: true\n });\n return new Toast(app, params).open();\n }\n });\n },\n params: {\n toast: {\n icon: null,\n text: null,\n position: 'bottom',\n horizontalPosition: 'left',\n closeButton: false,\n closeButtonColor: null,\n closeButtonText: 'Ok',\n closeTimeout: null,\n cssClass: null,\n render: null,\n containerEl: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nconst Preloader = {\n init(el) {\n const app = this;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const $el = $(el);\n if ($el.length === 0 || $el.children('.preloader-inner').length > 0 || $el.children('.preloader-inner-line').length > 0) return;\n $el.append(preloaders[`${app.theme}PreloaderContent`]);\n },\n // Modal\n visible: false,\n show(color) {\n if (color === void 0) {\n color = 'white';\n }\n const app = this;\n if (Preloader.visible) return;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || '';\n $('html').addClass('with-modal-preloader');\n // prettier-ignore\n app.$el.append(`\n \n \n `);\n Preloader.visible = true;\n },\n showIn(el, color) {\n if (color === void 0) {\n color = 'white';\n }\n const app = this;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || '';\n $(el || 'html').addClass('with-modal-preloader');\n // prettier-ignore\n $(el || app.$el).append(`\n \n \n `);\n },\n hide() {\n const app = this;\n if (!Preloader.visible) return;\n $('html').removeClass('with-modal-preloader');\n app.$el.find('.preloader-backdrop, .preloader-modal').remove();\n Preloader.visible = false;\n },\n hideIn(el) {\n const app = this;\n $(el || 'html').removeClass('with-modal-preloader');\n $(el || app.$el).find('.preloader-backdrop, .preloader-modal').remove();\n }\n};\nexport default {\n name: 'preloader',\n create() {\n const app = this;\n bindMethods(app, {\n preloader: Preloader\n });\n },\n on: {\n photoBrowserOpen(pb) {\n const app = this;\n pb.$el.find('.preloader').each(preloaderEl => {\n app.preloader.init(preloaderEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.preloader').each(preloaderEl => {\n app.preloader.init(preloaderEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.preloader').each(preloaderEl => {\n app.preloader.init(preloaderEl);\n });\n }\n },\n vnode: {\n preloader: {\n insert(vnode) {\n const app = this;\n const preloaderEl = vnode.elm;\n app.preloader.init(preloaderEl);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nconst Progressbar = {\n set() {\n const app = this;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [el, progress, duration] = args;\n if (typeof args[0] === 'number') {\n [progress, duration] = args;\n el = app.$el;\n }\n if (typeof progress === 'undefined' || progress === null) return el;\n if (!progress) progress = 0;\n const $el = $(el || app.$el);\n if ($el.length === 0) {\n return el;\n }\n const progressNormalized = Math.min(Math.max(progress, 0), 100);\n let $progressbarEl;\n if ($el.hasClass('progressbar')) $progressbarEl = $el.eq(0);else {\n $progressbarEl = $el.children('.progressbar');\n }\n if ($progressbarEl.length === 0 || $progressbarEl.hasClass('progressbar-infinite')) {\n return $progressbarEl;\n }\n let $progressbarLine = $progressbarEl.children('span');\n if ($progressbarLine.length === 0) {\n $progressbarLine = $('');\n $progressbarEl.append($progressbarLine);\n }\n $progressbarLine.transition(typeof duration !== 'undefined' ? duration : '').transform(`translate3d(${(-100 + progressNormalized) * (app.rtl ? -1 : 1)}%,0,0)`);\n return $progressbarEl[0];\n },\n show() {\n const app = this;\n\n // '.page', 50, 'multi'\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n let [el, progress, color] = args;\n let type = 'determined';\n if (args.length === 2) {\n if ((typeof args[0] === 'string' || typeof args[0] === 'object') && typeof args[1] === 'string') {\n // '.page', 'multi'\n [el, color, progress] = args;\n type = 'infinite';\n } else if (typeof args[0] === 'number' && typeof args[1] === 'string') {\n // 50, 'multi'\n [progress, color] = args;\n el = app.$el;\n }\n } else if (args.length === 1) {\n if (typeof args[0] === 'number') {\n el = app.$el;\n progress = args[0];\n } else if (typeof args[0] === 'string') {\n type = 'infinite';\n el = app.$el;\n color = args[0];\n }\n } else if (args.length === 0) {\n type = 'infinite';\n el = app.$el;\n }\n const $el = $(el);\n if ($el.length === 0) return undefined;\n let $progressbarEl;\n if ($el.hasClass('progressbar') || $el.hasClass('progressbar-infinite')) {\n $progressbarEl = $el;\n } else {\n $progressbarEl = $el.children('.progressbar:not(.progressbar-out), .progressbar-infinite:not(.progressbar-out)');\n if ($progressbarEl.length === 0) {\n $progressbarEl = $(`\n \n ${type === 'infinite' ? '' : ''}\n `);\n $el.append($progressbarEl);\n }\n }\n if (typeof progress !== 'undefined') {\n app.progressbar.set($progressbarEl, progress);\n }\n return $progressbarEl[0];\n },\n hide(el, removeAfterHide) {\n if (removeAfterHide === void 0) {\n removeAfterHide = true;\n }\n const app = this;\n const $el = $(el || app.$el);\n if ($el.length === 0) return undefined;\n let $progressbarEl;\n if ($el.hasClass('progressbar') || $el.hasClass('progressbar-infinite')) {\n $progressbarEl = $el;\n } else {\n $progressbarEl = $el.children('.progressbar, .progressbar-infinite');\n }\n if ($progressbarEl.length === 0 || !$progressbarEl.hasClass('progressbar-in') || $progressbarEl.hasClass('progressbar-out')) {\n return $progressbarEl;\n }\n $progressbarEl.removeClass('progressbar-in').addClass('progressbar-out').animationEnd(() => {\n if (removeAfterHide) {\n $progressbarEl.remove();\n }\n });\n return $progressbarEl;\n }\n};\nexport default {\n name: 'progressbar',\n create() {\n const app = this;\n bindMethods(app, {\n progressbar: Progressbar\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.progressbar').each(progressbarEl => {\n const $progressbarEl = $(progressbarEl);\n app.progressbar.set($progressbarEl, $progressbarEl.attr('data-progress'));\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.progressbar').each(progressbarEl => {\n const $progressbarEl = $(progressbarEl);\n app.progressbar.set($progressbarEl, $progressbarEl.attr('data-progress'));\n });\n }\n },\n vnode: {\n progressbar: {\n insert(vnode) {\n const app = this;\n const el = vnode.elm;\n app.progressbar.set(el, el.getAttribute('data-progress'));\n },\n update(vnode) {\n const app = this;\n const el = vnode.elm;\n app.progressbar.set(el, el.getAttribute('data-progress'));\n }\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nconst Sortable = {\n init() {\n const app = this;\n const document = getDocument();\n let isTouched;\n let isMoved;\n let touchStartY;\n let touchesDiff;\n let $sortingEl;\n let $sortingItems;\n let $sortableContainer;\n let sortingElHeight;\n let minTop;\n let maxTop;\n let $insertAfterEl;\n let $insertBeforeEl;\n let indexFrom;\n let $pageEl;\n let $pageContentEl;\n let pageHeight;\n let pageOffset;\n let sortingElOffsetLocal;\n let sortingElOffsetTop;\n let initialScrollTop;\n let wasTapHold;\n function handleTouchStart(e, isTapHold) {\n isMoved = false;\n isTouched = true;\n wasTapHold = false;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n $sortingEl = $(e.target).closest('li').eq(0);\n indexFrom = $sortingEl.index();\n $sortableContainer = $sortingEl.parents('.sortable');\n const $listGroup = $sortingEl.parents('.list-group');\n if ($listGroup.length && $listGroup.parents($sortableContainer).length) {\n $sortableContainer = $listGroup;\n }\n $sortingItems = $sortableContainer.children('ul').children('li:not(.disallow-sorting):not(.no-sorting)');\n if (app.panel) app.panel.allowOpen = false;\n if (app.swipeout) app.swipeout.allow = false;\n if (isTapHold) {\n $sortingEl.addClass('sorting');\n $sortableContainer.addClass('sortable-sorting');\n wasTapHold = true;\n }\n }\n function handleTouchMove(e) {\n if (!isTouched || !$sortingEl) return;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (!isMoved) {\n $pageEl = $sortingEl.parents('.page');\n $pageContentEl = $sortingEl.parents('.page-content');\n const paddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const paddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n initialScrollTop = $pageContentEl[0].scrollTop;\n pageOffset = $pageEl.offset().top + paddingTop;\n pageHeight = $pageEl.height() - paddingTop - paddingBottom;\n $sortingEl.addClass('sorting');\n $sortableContainer.addClass('sortable-sorting');\n sortingElOffsetLocal = $sortingEl[0].offsetTop;\n minTop = $sortingEl[0].offsetTop;\n maxTop = $sortingEl.parent().height() - sortingElOffsetLocal - $sortingEl.height();\n sortingElHeight = $sortingEl[0].offsetHeight;\n sortingElOffsetTop = $sortingEl.offset().top;\n }\n isMoved = true;\n e.preventDefault();\n e.f7PreventSwipePanel = true;\n touchesDiff = pageY - touchStartY;\n const translateScrollOffset = $pageContentEl[0].scrollTop - initialScrollTop;\n const translate = Math.min(Math.max(touchesDiff + translateScrollOffset, -minTop), maxTop);\n $sortingEl.transform(`translate3d(0,${translate}px,0)`);\n const scrollAddition = 44;\n let allowScroll = true;\n if (touchesDiff + translateScrollOffset + scrollAddition < -minTop) {\n allowScroll = false;\n }\n if (touchesDiff + translateScrollOffset - scrollAddition > maxTop) {\n allowScroll = false;\n }\n $insertBeforeEl = undefined;\n $insertAfterEl = undefined;\n let scrollDiff;\n if (allowScroll) {\n if (sortingElOffsetTop + touchesDiff + sortingElHeight + scrollAddition > pageOffset + pageHeight) {\n // To Bottom\n scrollDiff = sortingElOffsetTop + touchesDiff + sortingElHeight + scrollAddition - (pageOffset + pageHeight);\n }\n if (sortingElOffsetTop + touchesDiff < pageOffset + scrollAddition) {\n // To Top\n scrollDiff = sortingElOffsetTop + touchesDiff - pageOffset - scrollAddition;\n }\n if (scrollDiff) {\n $pageContentEl[0].scrollTop += scrollDiff;\n }\n }\n $sortingItems.each(el => {\n const $currentEl = $(el);\n if ($currentEl[0] === $sortingEl[0]) return;\n const currentElOffset = $currentEl[0].offsetTop;\n const currentElHeight = $currentEl.height();\n const sortingElOffset = sortingElOffsetLocal + translate;\n let currentTranslate;\n const prevTranslate = $currentEl[0].f7Translate;\n if (sortingElOffset >= currentElOffset - currentElHeight / 2 && $sortingEl.index() < $currentEl.index()) {\n currentTranslate = -sortingElHeight;\n $currentEl.transform(`translate3d(0, ${currentTranslate}px,0)`);\n $insertAfterEl = $currentEl;\n $insertBeforeEl = undefined;\n } else if (sortingElOffset <= currentElOffset + currentElHeight / 2 && $sortingEl.index() > $currentEl.index()) {\n currentTranslate = sortingElHeight;\n $currentEl[0].f7Translate = currentTranslate;\n $currentEl.transform(`translate3d(0, ${currentTranslate}px,0)`);\n $insertAfterEl = undefined;\n if (!$insertBeforeEl) $insertBeforeEl = $currentEl;\n } else {\n currentTranslate = undefined;\n $currentEl.transform('translate3d(0, 0%,0)');\n }\n if (prevTranslate !== currentTranslate) {\n $currentEl.trigger('sortable:move');\n app.emit('sortableMove', $currentEl[0], $sortableContainer[0]);\n }\n $currentEl[0].f7Translate = currentTranslate;\n });\n }\n function handleTouchEnd() {\n if (!isTouched || !isMoved) {\n if (isTouched && !isMoved) {\n if (app.panel) app.panel.allowOpen = true;\n if (app.swipeout) app.swipeout.allow = true;\n if (wasTapHold) {\n $sortingEl.removeClass('sorting');\n $sortableContainer.removeClass('sortable-sorting');\n }\n }\n isTouched = false;\n isMoved = false;\n return;\n }\n if (app.panel) app.panel.allowOpen = true;\n if (app.swipeout) app.swipeout.allow = true;\n $sortingItems.transform('');\n $sortingEl.removeClass('sorting');\n $sortableContainer.removeClass('sortable-sorting');\n let indexTo;\n if ($insertAfterEl) indexTo = $insertAfterEl.index();else if ($insertBeforeEl) indexTo = $insertBeforeEl.index();\n let moveElements = $sortableContainer.dataset().sortableMoveElements;\n if (typeof moveElements === 'undefined') {\n moveElements = app.params.sortable.moveElements;\n }\n if (moveElements) {\n if ($insertAfterEl) {\n $sortingEl.insertAfter($insertAfterEl);\n }\n if ($insertBeforeEl) {\n $sortingEl.insertBefore($insertBeforeEl);\n }\n }\n if (($insertAfterEl || $insertBeforeEl) && $sortableContainer.hasClass('virtual-list')) {\n indexFrom = $sortingEl[0].f7VirtualListIndex;\n if (typeof indexFrom === 'undefined') indexFrom = $sortingEl.attr('data-virtual-list-index');\n if ($insertBeforeEl) {\n indexTo = $insertBeforeEl[0].f7VirtualListIndex;\n if (typeof indexTo === 'undefined') indexTo = $insertBeforeEl.attr('data-virtual-list-index');\n } else {\n indexTo = $insertAfterEl[0].f7VirtualListIndex;\n if (typeof indexTo === 'undefined') indexTo = $insertAfterEl.attr('data-virtual-list-index');\n }\n if (indexTo !== null) indexTo = parseInt(indexTo, 10);else indexTo = undefined;\n const virtualList = $sortableContainer[0].f7VirtualList;\n if (indexFrom) indexFrom = parseInt(indexFrom, 10);\n if (indexTo) indexTo = parseInt(indexTo, 10);\n if (virtualList) virtualList.moveItem(indexFrom, indexTo);\n }\n if (typeof indexTo !== 'undefined' && !Number.isNaN(indexTo) && indexTo !== indexFrom) {\n $sortingEl.trigger('sortable:sort', {\n from: indexFrom,\n to: indexTo\n });\n app.emit('sortableSort', $sortingEl[0], {\n from: indexFrom,\n to: indexTo,\n el: $sortingEl[0]\n }, $sortableContainer[0]);\n }\n $insertBeforeEl = undefined;\n $insertAfterEl = undefined;\n isTouched = false;\n isMoved = false;\n }\n const activeListener = getSupport().passiveListener ? {\n passive: false,\n capture: false\n } : false;\n $(document).on(app.touchEvents.start, '.list.sortable .sortable-handler', handleTouchStart, activeListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n $(document).on('taphold', '.sortable-tap-hold', (e, pointerEvent) => {\n handleTouchStart(pointerEvent, true);\n });\n },\n enable(el) {\n if (el === void 0) {\n el = '.list.sortable';\n }\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n $el.addClass('sortable-enabled');\n $el.trigger('sortable:enable');\n app.emit('sortableEnable', $el[0]);\n },\n disable(el) {\n if (el === void 0) {\n el = '.list.sortable';\n }\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n $el.removeClass('sortable-enabled');\n $el.trigger('sortable:disable');\n app.emit('sortableDisable', $el[0]);\n },\n toggle(el) {\n if (el === void 0) {\n el = '.list.sortable';\n }\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n if ($el.hasClass('sortable-enabled')) {\n app.sortable.disable($el);\n } else {\n app.sortable.enable($el);\n }\n }\n};\nexport default {\n name: 'sortable',\n params: {\n sortable: {\n moveElements: true\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n sortable: Sortable\n });\n },\n on: {\n init() {\n const app = this;\n if (!app.params.sortable) return;\n app.sortable.init();\n }\n },\n clicks: {\n '.sortable-enable': function enable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sortable.enable(data.sortable);\n },\n '.sortable-disable': function disable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sortable.disable(data.sortable);\n },\n '.sortable-toggle': function toggle($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sortable.toggle(data.sortable);\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nconst Swipeout = {\n init() {\n const app = this;\n const document = getDocument();\n const touchesStart = {};\n let isTouched;\n let isMoved;\n let isScrolling;\n let touchStartTime;\n let touchesDiff;\n let $swipeoutEl;\n let $swipeoutContent;\n let $actionsRight;\n let $actionsLeft;\n let actionsLeftWidth;\n let actionsRightWidth;\n let translate;\n let opened;\n let openedActionsSide;\n let $leftButtons;\n let $rightButtons;\n let direction;\n let $overswipeLeftButton;\n let $overswipeRightButton;\n let overswipeLeft;\n let overswipeRight;\n function handleTouchStart(e) {\n if (!app.swipeout.allow) return;\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = new Date().getTime();\n $swipeoutEl = $(this);\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!isMoved) {\n if ($('.list.sortable-opened').length > 0) return;\n $swipeoutContent = $swipeoutEl.find('.swipeout-content');\n $actionsRight = $swipeoutEl.find('.swipeout-actions-right');\n $actionsLeft = $swipeoutEl.find('.swipeout-actions-left');\n actionsLeftWidth = null;\n actionsRightWidth = null;\n $leftButtons = null;\n $rightButtons = null;\n $overswipeRightButton = null;\n $overswipeLeftButton = null;\n if ($actionsLeft.length > 0) {\n actionsLeftWidth = $actionsLeft.outerWidth();\n $leftButtons = $actionsLeft.children('a');\n $overswipeLeftButton = $actionsLeft.find('.swipeout-overswipe');\n }\n if ($actionsRight.length > 0) {\n actionsRightWidth = $actionsRight.outerWidth();\n $rightButtons = $actionsRight.children('a');\n $overswipeRightButton = $actionsRight.find('.swipeout-overswipe');\n }\n opened = $swipeoutEl.hasClass('swipeout-opened');\n if (opened) {\n openedActionsSide = $swipeoutEl.find('.swipeout-actions-left.swipeout-actions-opened').length > 0 ? 'left' : 'right';\n }\n $swipeoutEl.removeClass('swipeout-transitioning');\n if (!app.params.swipeout.noFollow) {\n $swipeoutEl.find('.swipeout-actions-opened').removeClass('swipeout-actions-opened');\n $swipeoutEl.removeClass('swipeout-opened');\n }\n }\n isMoved = true;\n if (e.cancelable) {\n e.preventDefault();\n }\n touchesDiff = pageX - touchesStart.x;\n translate = touchesDiff;\n if (opened) {\n if (openedActionsSide === 'right') translate -= actionsRightWidth;else translate += actionsLeftWidth;\n }\n if (translate > 0 && $actionsLeft.length === 0 || translate < 0 && $actionsRight.length === 0) {\n if (!opened) {\n isTouched = false;\n isMoved = false;\n $swipeoutContent.transform('');\n if ($rightButtons && $rightButtons.length > 0) {\n $rightButtons.transform('');\n }\n if ($leftButtons && $leftButtons.length > 0) {\n $leftButtons.transform('');\n }\n return;\n }\n translate = 0;\n }\n if (translate < 0) direction = 'to-left';else if (translate > 0) direction = 'to-right';else if (!direction) direction = 'to-left';\n let buttonOffset;\n let progress;\n e.f7PreventSwipePanel = true;\n if (app.params.swipeout.noFollow) {\n if (opened) {\n if (openedActionsSide === 'right' && touchesDiff > 0) {\n app.swipeout.close($swipeoutEl);\n }\n if (openedActionsSide === 'left' && touchesDiff < 0) {\n app.swipeout.close($swipeoutEl);\n }\n } else {\n if (touchesDiff < 0 && $actionsRight.length > 0) {\n app.swipeout.open($swipeoutEl, 'right');\n }\n if (touchesDiff > 0 && $actionsLeft.length > 0) {\n app.swipeout.open($swipeoutEl, 'left');\n }\n }\n isTouched = false;\n isMoved = false;\n return;\n }\n overswipeLeft = false;\n overswipeRight = false;\n if ($actionsRight.length > 0) {\n // Show right actions\n let buttonTranslate = translate;\n progress = buttonTranslate / actionsRightWidth;\n if (buttonTranslate < -actionsRightWidth) {\n const ratio = buttonTranslate / -actionsRightWidth;\n buttonTranslate = -actionsRightWidth - (-buttonTranslate - actionsRightWidth) ** 0.8;\n translate = buttonTranslate;\n if ($overswipeRightButton.length > 0 && ratio > app.params.swipeout.overswipeRatio) {\n overswipeRight = true;\n }\n }\n if (direction !== 'to-left') {\n progress = 0;\n buttonTranslate = 0;\n }\n $rightButtons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n if (typeof buttonEl.f7SwipeoutButtonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = buttonEl.offsetLeft;\n }\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if ($overswipeRightButton.length > 0 && $buttonEl.hasClass('swipeout-overswipe') && direction === 'to-left') {\n $buttonEl.css({\n left: `${overswipeRight ? -buttonOffset : 0}px`\n });\n if (overswipeRight) {\n if (!$buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeenter');\n app.emit('swipeoutOverswipeEnter', $swipeoutEl[0]);\n }\n $buttonEl.addClass('swipeout-overswipe-active');\n } else {\n if ($buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeexit');\n app.emit('swipeoutOverswipeExit', $swipeoutEl[0]);\n }\n $buttonEl.removeClass('swipeout-overswipe-active');\n }\n }\n $buttonEl.transform(`translate3d(${buttonTranslate - buttonOffset * (1 + Math.max(progress, -1))}px,0,0)`);\n });\n }\n if ($actionsLeft.length > 0) {\n // Show left actions\n let buttonTranslate = translate;\n progress = buttonTranslate / actionsLeftWidth;\n if (buttonTranslate > actionsLeftWidth) {\n const ratio = buttonTranslate / actionsRightWidth;\n buttonTranslate = actionsLeftWidth + (buttonTranslate - actionsLeftWidth) ** 0.8;\n translate = buttonTranslate;\n if ($overswipeLeftButton.length > 0 && ratio > app.params.swipeout.overswipeRatio) {\n overswipeLeft = true;\n }\n }\n if (direction !== 'to-right') {\n buttonTranslate = 0;\n progress = 0;\n }\n $leftButtons.each((buttonEl, index) => {\n const $buttonEl = $(buttonEl);\n if (typeof buttonEl.f7SwipeoutButtonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;\n }\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if ($overswipeLeftButton.length > 0 && $buttonEl.hasClass('swipeout-overswipe') && direction === 'to-right') {\n $buttonEl.css({\n left: `${overswipeLeft ? buttonOffset : 0}px`\n });\n if (overswipeLeft) {\n if (!$buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeenter');\n app.emit('swipeoutOverswipeEnter', $swipeoutEl[0]);\n }\n $buttonEl.addClass('swipeout-overswipe-active');\n } else {\n if ($buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeexit');\n app.emit('swipeoutOverswipeExit', $swipeoutEl[0]);\n }\n $buttonEl.removeClass('swipeout-overswipe-active');\n }\n }\n if ($leftButtons.length > 1) {\n $buttonEl.css('z-index', $leftButtons.length - index);\n }\n $buttonEl.transform(`translate3d(${buttonTranslate + buttonOffset * (1 - Math.min(progress, 1))}px,0,0)`);\n });\n }\n $swipeoutEl.trigger('swipeout', progress);\n app.emit('swipeout', $swipeoutEl[0], progress);\n $swipeoutContent.transform(`translate3d(${translate}px,0,0)`);\n }\n function handleTouchEnd() {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n const timeDiff = new Date().getTime() - touchStartTime;\n const $actions = direction === 'to-left' ? $actionsRight : $actionsLeft;\n const actionsWidth = direction === 'to-left' ? actionsRightWidth : actionsLeftWidth;\n let action;\n let $buttons;\n let i;\n if (timeDiff < 300 && (touchesDiff < -10 && direction === 'to-left' || touchesDiff > 10 && direction === 'to-right') || timeDiff >= 300 && Math.abs(translate) > actionsWidth / 2) {\n action = 'open';\n } else {\n action = 'close';\n }\n if (timeDiff < 300) {\n if (Math.abs(translate) === 0) action = 'close';\n if (Math.abs(translate) === actionsWidth) action = 'open';\n }\n if (action === 'open') {\n Swipeout.el = $swipeoutEl[0];\n $swipeoutEl.trigger('swipeout:open');\n app.emit('swipeoutOpen', $swipeoutEl[0]);\n $swipeoutEl.addClass('swipeout-opened swipeout-transitioning');\n const newTranslate = direction === 'to-left' ? -actionsWidth : actionsWidth;\n $swipeoutContent.transform(`translate3d(${newTranslate}px,0,0)`);\n $actions.addClass('swipeout-actions-opened');\n $buttons = direction === 'to-left' ? $rightButtons : $leftButtons;\n if ($buttons) {\n for (i = 0; i < $buttons.length; i += 1) {\n $($buttons[i]).transform(`translate3d(${newTranslate}px,0,0)`);\n }\n }\n if (overswipeRight) {\n $actionsRight.find('.swipeout-overswipe').trigger('click', 'f7Overswipe');\n }\n if (overswipeLeft) {\n $actionsLeft.find('.swipeout-overswipe').trigger('click', 'f7Overswipe');\n }\n } else {\n $swipeoutEl.trigger('swipeout:close');\n app.emit('swipeoutClose', $swipeoutEl[0]);\n Swipeout.el = undefined;\n $swipeoutEl.addClass('swipeout-transitioning').removeClass('swipeout-opened');\n $swipeoutContent.transform('');\n $actions.removeClass('swipeout-actions-opened');\n }\n let buttonOffset;\n if ($leftButtons && $leftButtons.length > 0 && $leftButtons !== $buttons) {\n $leftButtons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if (typeof buttonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;\n }\n $buttonEl.transform(`translate3d(${buttonOffset}px,0,0)`);\n });\n }\n if ($rightButtons && $rightButtons.length > 0 && $rightButtons !== $buttons) {\n $rightButtons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if (typeof buttonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = buttonEl.offsetLeft;\n }\n $buttonEl.transform(`translate3d(${-buttonOffset}px,0,0)`);\n });\n }\n $swipeoutContent.transitionEnd(() => {\n if (opened && action === 'open' || !opened && action === 'close') return;\n $swipeoutEl.trigger(action === 'open' ? 'swipeout:opened' : 'swipeout:closed');\n app.emit(action === 'open' ? 'swipeoutOpened' : 'swipeoutClosed', $swipeoutEl[0]);\n $swipeoutEl.removeClass('swipeout-transitioning');\n if (opened && action === 'close') {\n if ($actionsRight.length > 0) {\n $rightButtons.transform('');\n }\n if ($actionsLeft.length > 0) {\n $leftButtons.transform('');\n }\n }\n });\n }\n const passiveListener = getSupport().passiveListener ? {\n passive: true\n } : false;\n app.on('touchstart', e => {\n if (Swipeout.el) {\n const $targetEl = $(e.target);\n if (!($(Swipeout.el).is($targetEl[0]) || $targetEl.parents('.swipeout').is(Swipeout.el) || $targetEl.hasClass('modal-in') || ($targetEl.attr('class') || '').indexOf('-backdrop') > 0 || $targetEl.hasClass('actions-modal') || $targetEl.parents('.actions-modal.modal-in, .dialog.modal-in').length > 0)) {\n app.swipeout.close(Swipeout.el);\n }\n }\n });\n $(document).on(app.touchEvents.start, 'li.swipeout', handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n },\n allow: true,\n el: undefined,\n open() {\n const app = this;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [el, side, callback] = args;\n if (typeof args[1] === 'function') {\n [el, callback, side] = args;\n }\n const $el = $(el).eq(0);\n if ($el.length === 0) return;\n if (!$el.hasClass('swipeout') || $el.hasClass('swipeout-opened')) return;\n if (!side) {\n if ($el.find('.swipeout-actions-right').length > 0) side = 'right';else side = 'left';\n }\n const $swipeoutActions = $el.find(`.swipeout-actions-${side}`);\n const $swipeoutContent = $el.find('.swipeout-content');\n if ($swipeoutActions.length === 0) return;\n $el.trigger('swipeout:open').addClass('swipeout-opened').removeClass('swipeout-transitioning');\n app.emit('swipeoutOpen', $el[0]);\n $swipeoutActions.addClass('swipeout-actions-opened');\n const $buttons = $swipeoutActions.children('a');\n const swipeoutActionsWidth = $swipeoutActions.outerWidth();\n const translate = side === 'right' ? -swipeoutActionsWidth : swipeoutActionsWidth;\n if ($buttons.length > 1) {\n $buttons.each((buttonEl, buttonIndex) => {\n const $buttonEl = $(buttonEl);\n if (side === 'right') {\n $buttonEl.transform(`translate3d(${-buttonEl.offsetLeft}px,0,0)`);\n } else {\n $buttonEl.css('z-index', $buttons.length - buttonIndex).transform(`translate3d(${swipeoutActionsWidth - buttonEl.offsetWidth - buttonEl.offsetLeft}px,0,0)`);\n }\n });\n }\n $el.addClass('swipeout-transitioning');\n $swipeoutContent.transitionEnd(() => {\n $el.trigger('swipeout:opened');\n app.emit('swipeoutOpened', $el[0]);\n if (callback) callback.call($el[0]);\n });\n nextFrame(() => {\n $buttons.transform(`translate3d(${translate}px,0,0)`);\n $swipeoutContent.transform(`translate3d(${translate}px,0,0)`);\n });\n Swipeout.el = $el[0];\n },\n close(el, callback) {\n const app = this;\n const $el = $(el).eq(0);\n if ($el.length === 0) return;\n if (!$el.hasClass('swipeout-opened')) return;\n const side = $el.find('.swipeout-actions-opened').hasClass('swipeout-actions-right') ? 'right' : 'left';\n const $swipeoutActions = $el.find('.swipeout-actions-opened').removeClass('swipeout-actions-opened');\n const $buttons = $swipeoutActions.children('a');\n const swipeoutActionsWidth = $swipeoutActions.outerWidth();\n app.swipeout.allow = false;\n $el.trigger('swipeout:close');\n app.emit('swipeoutClose', $el[0]);\n $el.removeClass('swipeout-opened').addClass('swipeout-transitioning');\n let closeTimeout;\n function onSwipeoutClose() {\n app.swipeout.allow = true;\n if ($el.hasClass('swipeout-opened')) return;\n $el.removeClass('swipeout-transitioning');\n $buttons.transform('');\n $el.trigger('swipeout:closed');\n app.emit('swipeoutClosed', $el[0]);\n if (callback) callback.call($el[0]);\n if (closeTimeout) clearTimeout(closeTimeout);\n }\n $el.find('.swipeout-content').transform('').transitionEnd(onSwipeoutClose);\n closeTimeout = setTimeout(onSwipeoutClose, 500);\n $buttons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n if (side === 'right') {\n $buttonEl.transform(`translate3d(${-buttonEl.offsetLeft}px,0,0)`);\n } else {\n $buttonEl.transform(`translate3d(${swipeoutActionsWidth - buttonEl.offsetWidth - buttonEl.offsetLeft}px,0,0)`);\n }\n $buttonEl.css({\n left: '0px'\n }).removeClass('swipeout-overswipe-active');\n });\n if (Swipeout.el && Swipeout.el === $el[0]) Swipeout.el = undefined;\n },\n delete(el, callback) {\n const app = this;\n const $el = $(el).eq(0);\n if ($el.length === 0) return;\n Swipeout.el = undefined;\n $el.trigger('swipeout:delete');\n app.emit('swipeoutDelete', $el[0]);\n $el.css({\n height: `${$el.outerHeight()}px`\n });\n $el.transitionEnd(() => {\n $el.trigger('swipeout:deleted');\n app.emit('swipeoutDeleted', $el[0]);\n if (callback) callback.call($el[0]);\n if ($el.parents('.virtual-list').length > 0) {\n const virtualList = $el.parents('.virtual-list')[0].f7VirtualList;\n const virtualIndex = $el[0].f7VirtualListIndex;\n if (virtualList && typeof virtualIndex !== 'undefined') virtualList.deleteItem(virtualIndex);\n } else if (app.params.swipeout.removeElements) {\n if (app.params.swipeout.removeElementsWithTimeout) {\n setTimeout(() => {\n $el.remove();\n }, app.params.swipeout.removeElementsTimeout);\n } else {\n $el.remove();\n }\n } else {\n $el.removeClass('swipeout-deleting swipeout-transitioning');\n }\n });\n // eslint-disable-next-line\n // $el[0]._clientLeft = $el[0].clientLeft;\n nextFrame(() => {\n $el.addClass('swipeout-deleting swipeout-transitioning').css({\n height: '0px'\n }).find('.swipeout-content').transform('translate3d(-100%,0,0)');\n });\n }\n};\nexport default {\n name: 'swipeout',\n params: {\n swipeout: {\n actionsNoFold: false,\n noFollow: false,\n removeElements: true,\n removeElementsWithTimeout: false,\n removeElementsTimeout: 0,\n overswipeRatio: 1.2\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n swipeout: Swipeout\n });\n },\n clicks: {\n '.swipeout-open': function openSwipeout($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.swipeout.open(data.swipeout, data.side);\n },\n '.swipeout-close': function closeSwipeout($clickedEl) {\n const app = this;\n const $swipeoutEl = $clickedEl.closest('.swipeout');\n if ($swipeoutEl.length === 0) return;\n app.swipeout.close($swipeoutEl);\n },\n '.swipeout-delete': function deleteSwipeout($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const $swipeoutEl = $clickedEl.closest('.swipeout');\n if ($swipeoutEl.length === 0) return;\n const {\n confirm,\n confirmTitle\n } = data;\n if (data.confirm) {\n app.dialog.confirm(confirm, confirmTitle, () => {\n app.swipeout.delete($swipeoutEl);\n });\n } else {\n app.swipeout.delete($swipeoutEl);\n }\n }\n },\n on: {\n init() {\n const app = this;\n if (!app.params.swipeout) return;\n app.swipeout.init();\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\nconst Accordion = {\n toggleClicked($clickedEl) {\n const app = this;\n let $accordionItemEl = $clickedEl.closest('.accordion-item').eq(0);\n if (!$accordionItemEl.length) $accordionItemEl = $clickedEl.parents('li').eq(0);\n const $accordionContent = $clickedEl.parents('.accordion-item-content').eq(0);\n if ($accordionContent.length) {\n if ($accordionContent.parents($accordionItemEl).length) return;\n }\n if ($clickedEl.parents('li').length > 1 && $clickedEl.parents('li')[0] !== $accordionItemEl[0]) return;\n app.accordion.toggle($accordionItemEl);\n },\n open(el) {\n const app = this;\n const $el = $(el);\n let prevented = false;\n function prevent() {\n prevented = true;\n }\n $el.trigger('accordion:beforeopen', {\n prevent\n }, prevent);\n app.emit('accordionBeforeOpen', $el[0], prevent);\n if (prevented) return;\n const $list = $el.parents('.accordion-list').eq(0);\n let $contentEl = $el.children('.accordion-item-content');\n $contentEl.removeAttr('aria-hidden');\n if ($contentEl.length === 0) $contentEl = $el.find('.accordion-item-content');\n if ($contentEl.length === 0) return;\n const $openedItem = $list.length > 0 && $el.parent().children('.accordion-item-opened');\n if ($openedItem.length > 0) {\n app.accordion.close($openedItem);\n }\n $contentEl.transitionEnd(() => {\n if ($el.hasClass('accordion-item-opened')) {\n $contentEl.transition(0);\n $contentEl.css('height', 'auto');\n nextFrame(() => {\n $contentEl.transition('');\n $el.trigger('accordion:opened');\n app.emit('accordionOpened', $el[0]);\n });\n } else {\n $contentEl.css('height', '');\n $el.trigger('accordion:closed');\n app.emit('accordionClosed', $el[0]);\n }\n });\n $contentEl.css('height', `${$contentEl[0].scrollHeight}px`);\n $el.trigger('accordion:open');\n $el.addClass('accordion-item-opened');\n app.emit('accordionOpen', $el[0]);\n },\n close(el) {\n const app = this;\n const $el = $(el);\n let prevented = false;\n function prevent() {\n prevented = true;\n }\n $el.trigger('accordion:beforeclose', {\n prevent\n }, prevent);\n app.emit('accordionBeforeClose', $el[0], prevent);\n if (prevented) return;\n let $contentEl = $el.children('.accordion-item-content');\n if ($contentEl.length === 0) $contentEl = $el.find('.accordion-item-content');\n $el.removeClass('accordion-item-opened');\n $contentEl.attr('aria-hidden', true);\n $contentEl.transition(0);\n $contentEl.css('height', `${$contentEl[0].scrollHeight}px`);\n // Close\n $contentEl.transitionEnd(() => {\n if ($el.hasClass('accordion-item-opened')) {\n $contentEl.transition(0);\n $contentEl.css('height', 'auto');\n nextFrame(() => {\n $contentEl.transition('');\n $el.trigger('accordion:opened');\n app.emit('accordionOpened', $el[0]);\n });\n } else {\n $contentEl.css('height', '');\n $el.trigger('accordion:closed');\n app.emit('accordionClosed', $el[0]);\n }\n });\n nextFrame(() => {\n $contentEl.transition('');\n $contentEl.css('height', '');\n $el.trigger('accordion:close');\n app.emit('accordionClose', $el[0]);\n });\n },\n toggle(el) {\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n if ($el.hasClass('accordion-item-opened')) app.accordion.close(el);else app.accordion.open(el);\n }\n};\nexport default {\n name: 'accordion',\n create() {\n const app = this;\n bindMethods(app, {\n accordion: Accordion\n });\n },\n clicks: {\n '.accordion-item .item-link, .accordion-item-toggle, .links-list.accordion-list > ul > li > a': function open($clickedEl) {\n const app = this;\n Accordion.toggleClicked.call(app, $clickedEl);\n }\n }\n};", "export default {\n name: 'contactsList'\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nclass VirtualList extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const vl = this;\n const device = getDevice();\n const document = getDocument();\n let defaultHeight;\n if (app.theme === 'md') {\n defaultHeight = 48;\n } else if (app.theme === 'ios') {\n defaultHeight = 44;\n }\n const defaults = {\n cols: 1,\n height: defaultHeight,\n cache: true,\n dynamicHeightBufferSize: 1,\n showFilteredItemsOnly: false,\n renderExternal: undefined,\n setListHeight: true,\n searchByItem: undefined,\n searchAll: undefined,\n ul: null,\n createUl: true,\n scrollableParentEl: undefined,\n renderItem(item) {\n return `\n \n \n \n `.trim();\n },\n on: {}\n };\n\n // Extend defaults with modules params\n vl.useModulesParams(defaults);\n vl.params = extend(defaults, params);\n if (vl.params.height === undefined || !vl.params.height) {\n vl.params.height = defaultHeight;\n }\n vl.$el = $(params.el);\n vl.el = vl.$el[0];\n if (vl.$el.length === 0) return undefined;\n vl.$el[0].f7VirtualList = vl;\n vl.items = vl.params.items;\n if (vl.params.showFilteredItemsOnly) {\n vl.filteredItems = [];\n }\n if (vl.params.renderItem) {\n vl.renderItem = vl.params.renderItem;\n }\n vl.$pageContentEl = vl.$el.parents('.page-content');\n vl.pageContentEl = vl.$pageContentEl[0];\n vl.$scrollableParentEl = vl.params.scrollableParentEl ? $(vl.params.scrollableParentEl).eq(0) : vl.$pageContentEl;\n if (!vl.$scrollableParentEl.length && vl.$pageContentEl.length) {\n vl.$scrollableParentEl = vl.$pageContentEl;\n }\n vl.scrollableParentEl = vl.$scrollableParentEl[0];\n\n // Bad scroll\n if (typeof vl.params.updatableScroll !== 'undefined') {\n vl.updatableScroll = vl.params.updatableScroll;\n } else {\n vl.updatableScroll = true;\n if (device.ios && device.osVersion.split('.')[0] < 8) {\n vl.updatableScroll = false;\n }\n }\n\n // Append \n const ul = vl.params.ul;\n vl.$ul = ul ? $(vl.params.ul) : vl.$el.children('ul');\n if (vl.$ul.length === 0 && vl.params.createUl) {\n vl.$el.append('');\n vl.$ul = vl.$el.children('ul');\n }\n vl.ul = vl.$ul[0];\n let $itemsWrapEl;\n if (!vl.ul && !vl.params.createUl) $itemsWrapEl = vl.$el;else $itemsWrapEl = vl.$ul;\n extend(vl, {\n $itemsWrapEl,\n itemsWrapEl: $itemsWrapEl[0],\n // DOM cached items\n domCache: {},\n // Temporary DOM Element\n tempDomElement: document.createElement('ul'),\n // Last repain position\n lastRepaintY: null,\n // Fragment\n fragment: document.createDocumentFragment(),\n // Props\n pageHeight: undefined,\n rowsPerScreen: undefined,\n rowsBefore: undefined,\n rowsAfter: undefined,\n rowsToRender: undefined,\n maxBufferHeight: 0,\n listHeight: undefined,\n dynamicHeight: typeof vl.params.height === 'function',\n autoHeight: vl.params.height === 'auto'\n });\n\n // Install Modules\n vl.useModules();\n\n // Attach events\n const handleScrollBound = vl.handleScroll.bind(vl);\n const handleResizeBound = vl.handleResize.bind(vl);\n let $pageEl;\n let $tabEl;\n let $panelEl;\n let $popupEl;\n vl.attachEvents = function attachEvents() {\n $pageEl = vl.$el.parents('.page').eq(0);\n $tabEl = vl.$el.parents('.tab').filter(tabEl => {\n return $(tabEl).parent('.tabs').parent('.tabs-animated-wrap, swiper-container.tabs').length === 0;\n }).eq(0);\n $panelEl = vl.$el.parents('.panel').eq(0);\n $popupEl = vl.$el.parents('.popup').eq(0);\n vl.$scrollableParentEl.on('scroll', handleScrollBound);\n if ($pageEl.length) $pageEl.on('page:reinit', handleResizeBound);\n if ($tabEl.length) $tabEl.on('tab:show', handleResizeBound);\n if ($panelEl.length) $panelEl.on('panel:open', handleResizeBound);\n if ($popupEl.length) $popupEl.on('popup:open', handleResizeBound);\n app.on('resize', handleResizeBound);\n };\n vl.detachEvents = function attachEvents() {\n vl.$scrollableParentEl.off('scroll', handleScrollBound);\n if ($pageEl.length) $pageEl.off('page:reinit', handleResizeBound);\n if ($tabEl.length) $tabEl.off('tab:show', handleResizeBound);\n if ($panelEl.length) $panelEl.off('panel:open', handleResizeBound);\n if ($popupEl.length) $popupEl.off('popup:open', handleResizeBound);\n app.off('resize', handleResizeBound);\n };\n // Init\n vl.init();\n return vl;\n }\n setListSize(autoHeightRerender) {\n const vl = this;\n const items = vl.filteredItems || vl.items;\n if (!autoHeightRerender) {\n vl.pageHeight = vl.$scrollableParentEl[0].offsetHeight;\n }\n if (vl.dynamicHeight) {\n vl.listHeight = 0;\n vl.heights = [];\n for (let i = 0; i < items.length; i += 1) {\n const itemHeight = vl.params.height(items[i]);\n vl.listHeight += itemHeight;\n vl.heights.push(itemHeight);\n }\n } else if (vl.autoHeight) {\n vl.listHeight = 0;\n if (!vl.heights) vl.heights = [];\n if (!vl.heightsCalculated) vl.heightsCalculated = [];\n const renderedItems = {};\n vl.$itemsWrapEl.find(`[data-virtual-list-index]`).forEach(el => {\n renderedItems[parseInt(el.getAttribute('data-virtual-list-index'), 10)] = el;\n });\n for (let i = 0; i < items.length; i += 1) {\n const itemIndex = vl.items.indexOf(items[i]);\n const renderedItem = renderedItems[itemIndex];\n if (renderedItem) {\n if (!vl.heightsCalculated.includes(itemIndex)) {\n vl.heights[itemIndex] = renderedItem.offsetHeight;\n vl.heightsCalculated.push(itemIndex);\n }\n }\n if (typeof vl.heights[i] === 'undefined') {\n vl.heights[itemIndex] = 40;\n }\n vl.listHeight += vl.heights[itemIndex];\n }\n } else {\n vl.listHeight = Math.ceil(items.length / vl.params.cols) * vl.params.height;\n vl.rowsPerScreen = Math.ceil(vl.pageHeight / vl.params.height);\n vl.rowsBefore = vl.params.rowsBefore || vl.rowsPerScreen * 2;\n vl.rowsAfter = vl.params.rowsAfter || vl.rowsPerScreen;\n vl.rowsToRender = vl.rowsPerScreen + vl.rowsBefore + vl.rowsAfter;\n vl.maxBufferHeight = vl.rowsBefore / 2 * vl.params.height;\n }\n if (vl.updatableScroll || vl.params.setListHeight) {\n vl.$itemsWrapEl.css({\n height: `${vl.listHeight}px`\n });\n }\n }\n render(force, forceScrollTop) {\n const vl = this;\n if (force) vl.lastRepaintY = null;\n let scrollTop = -(vl.$el[0].getBoundingClientRect().top - vl.$scrollableParentEl[0].getBoundingClientRect().top);\n if (typeof forceScrollTop !== 'undefined') scrollTop = forceScrollTop;\n if (vl.lastRepaintY === null || Math.abs(scrollTop - vl.lastRepaintY) > vl.maxBufferHeight || !vl.updatableScroll && vl.$scrollableParentEl[0].scrollTop + vl.pageHeight >= vl.$scrollableParentEl[0].scrollHeight) {\n vl.lastRepaintY = scrollTop;\n } else {\n return;\n }\n const items = vl.filteredItems || vl.items;\n let fromIndex;\n let toIndex;\n let heightBeforeFirstItem = 0;\n let heightBeforeLastItem = 0;\n if (vl.dynamicHeight || vl.autoHeight) {\n let itemTop = 0;\n let itemHeight;\n vl.maxBufferHeight = vl.pageHeight;\n for (let j = 0; j < vl.heights.length; j += 1) {\n itemHeight = vl.heights[j];\n if (typeof fromIndex === 'undefined') {\n if (itemTop + itemHeight >= scrollTop - vl.pageHeight * 2 * vl.params.dynamicHeightBufferSize) fromIndex = j;else heightBeforeFirstItem += itemHeight;\n }\n if (typeof toIndex === 'undefined') {\n if (itemTop + itemHeight >= scrollTop + vl.pageHeight * 2 * vl.params.dynamicHeightBufferSize || j === vl.heights.length - 1) toIndex = j + 1;\n heightBeforeLastItem += itemHeight;\n }\n itemTop += itemHeight;\n }\n toIndex = Math.min(toIndex, items.length);\n } else {\n fromIndex = (parseInt(scrollTop / vl.params.height, 10) - vl.rowsBefore) * vl.params.cols;\n if (fromIndex < 0) {\n fromIndex = 0;\n }\n toIndex = Math.min(fromIndex + vl.rowsToRender * vl.params.cols, items.length);\n }\n let topPosition;\n const renderExternalItems = [];\n vl.reachEnd = false;\n let i;\n for (i = fromIndex; i < toIndex; i += 1) {\n let itemEl;\n // Define real item index\n const index = vl.items.indexOf(items[i]);\n if (i === fromIndex) vl.currentFromIndex = index;\n if (i === toIndex - 1) vl.currentToIndex = index;\n if (vl.filteredItems) {\n if (vl.items[index] === vl.filteredItems[vl.filteredItems.length - 1]) vl.reachEnd = true;\n } else if (index === vl.items.length - 1) vl.reachEnd = true;\n\n // Find items\n if (vl.params.renderExternal) {\n renderExternalItems.push(items[i]);\n } else if (vl.domCache[index]) {\n itemEl = vl.domCache[index];\n itemEl.f7VirtualListIndex = index;\n } else {\n if (vl.renderItem) {\n vl.tempDomElement.innerHTML = vl.renderItem(items[i], index).trim();\n } else {\n vl.tempDomElement.innerHTML = items[i].toString().trim();\n }\n itemEl = vl.tempDomElement.childNodes[0];\n if (vl.params.cache) vl.domCache[index] = itemEl;\n itemEl.f7VirtualListIndex = index;\n }\n\n // Set item top position\n if (i === fromIndex) {\n if (vl.dynamicHeight || vl.autoHeight) {\n topPosition = heightBeforeFirstItem;\n } else {\n topPosition = i * vl.params.height / vl.params.cols;\n }\n }\n if (!vl.params.renderExternal) {\n itemEl.style.top = `${topPosition}px`;\n\n // Before item insert\n vl.emit('local::itemBeforeInsert vlItemBeforeInsert', vl, itemEl, items[i]);\n\n // Append item to fragment\n vl.fragment.appendChild(itemEl);\n }\n }\n\n // Update list height with not updatable scroll\n if (!vl.updatableScroll) {\n if (vl.dynamicHeight || vl.autoHeight) {\n vl.itemsWrapEl.style.height = `${heightBeforeLastItem}px`;\n } else {\n vl.itemsWrapEl.style.height = `${i * vl.params.height / vl.params.cols}px`;\n }\n }\n\n // Update list html\n if (vl.params.renderExternal) {\n if (items && items.length === 0) {\n vl.reachEnd = true;\n }\n } else {\n vl.emit('local::beforeClear vlBeforeClear', vl, vl.fragment);\n vl.itemsWrapEl.innerHTML = '';\n vl.emit('local::itemsBeforeInsert vlItemsBeforeInsert', vl, vl.fragment);\n if (items && items.length === 0) {\n vl.reachEnd = true;\n if (vl.params.emptyTemplate) vl.itemsWrapEl.innerHTML = vl.params.emptyTemplate;\n } else {\n vl.itemsWrapEl.appendChild(vl.fragment);\n }\n vl.emit('local::itemsAfterInsert vlItemsAfterInsert', vl, vl.fragment);\n }\n if (typeof forceScrollTop !== 'undefined' && force) {\n vl.$scrollableParentEl.scrollTop(forceScrollTop, 0);\n }\n if (vl.params.renderExternal) {\n vl.params.renderExternal(vl, {\n fromIndex,\n toIndex,\n listHeight: vl.listHeight,\n topPosition,\n items: renderExternalItems\n });\n }\n if (vl.autoHeight) {\n requestAnimationFrame(() => {\n vl.setListSize(true);\n });\n }\n }\n\n // Filter\n filterItems(indexes, resetScrollTop) {\n if (resetScrollTop === void 0) {\n resetScrollTop = true;\n }\n const vl = this;\n vl.filteredItems = [];\n for (let i = 0; i < indexes.length; i += 1) {\n vl.filteredItems.push(vl.items[indexes[i]]);\n }\n if (resetScrollTop) {\n vl.$scrollableParentEl[0].scrollTop = 0;\n }\n vl.update();\n }\n resetFilter() {\n const vl = this;\n if (vl.params.showFilteredItemsOnly) {\n vl.filteredItems = [];\n } else {\n vl.filteredItems = null;\n delete vl.filteredItems;\n }\n vl.update();\n }\n scrollToItem(index) {\n const vl = this;\n if (index > vl.items.length) return false;\n let itemTop = 0;\n if (vl.dynamicHeight || vl.autoHeight) {\n for (let i = 0; i < index; i += 1) {\n itemTop += vl.heights[i];\n }\n } else {\n itemTop = index * vl.params.height;\n }\n const listTop = vl.$el[0].offsetTop;\n vl.render(true, listTop + itemTop - parseInt(vl.$scrollableParentEl.css('padding-top'), 10));\n return true;\n }\n handleScroll() {\n const vl = this;\n vl.render();\n }\n\n // Handle resize event\n isVisible() {\n const vl = this;\n return !!(vl.el.offsetWidth || vl.el.offsetHeight || vl.el.getClientRects().length);\n }\n handleResize() {\n const vl = this;\n if (vl.isVisible()) {\n vl.heightsCalculated = [];\n vl.setListSize();\n vl.render(true);\n }\n }\n\n // Append\n appendItems(items) {\n const vl = this;\n for (let i = 0; i < items.length; i += 1) {\n vl.items.push(items[i]);\n }\n vl.update();\n }\n appendItem(item) {\n const vl = this;\n vl.appendItems([item]);\n }\n\n // Replace\n replaceAllItems(items) {\n const vl = this;\n vl.items = items;\n delete vl.filteredItems;\n vl.domCache = {};\n vl.update();\n }\n replaceItem(index, item) {\n const vl = this;\n vl.items[index] = item;\n if (vl.params.cache) delete vl.domCache[index];\n vl.update();\n }\n\n // Prepend\n prependItems(items) {\n const vl = this;\n for (let i = items.length - 1; i >= 0; i -= 1) {\n vl.items.unshift(items[i]);\n }\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n newCache[parseInt(cached, 10) + items.length] = vl.domCache[cached];\n });\n vl.domCache = newCache;\n }\n vl.update();\n }\n prependItem(item) {\n const vl = this;\n vl.prependItems([item]);\n }\n\n // Move\n moveItem(from, to) {\n const vl = this;\n const fromIndex = from;\n let toIndex = to;\n if (fromIndex === toIndex) return;\n // remove item from array\n const item = vl.items.splice(fromIndex, 1)[0];\n if (toIndex >= vl.items.length) {\n // Add item to the end\n vl.items.push(item);\n toIndex = vl.items.length - 1;\n } else {\n // Add item to new index\n vl.items.splice(toIndex, 0, item);\n }\n // Update cache\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n const cachedIndex = parseInt(cached, 10);\n const leftIndex = fromIndex < toIndex ? fromIndex : toIndex;\n const rightIndex = fromIndex < toIndex ? toIndex : fromIndex;\n const indexShift = fromIndex < toIndex ? -1 : 1;\n if (cachedIndex < leftIndex || cachedIndex > rightIndex) newCache[cachedIndex] = vl.domCache[cachedIndex];\n if (cachedIndex === leftIndex) newCache[rightIndex] = vl.domCache[cachedIndex];\n if (cachedIndex > leftIndex && cachedIndex <= rightIndex) newCache[cachedIndex + indexShift] = vl.domCache[cachedIndex];\n });\n vl.domCache = newCache;\n }\n vl.update();\n }\n\n // Insert before\n insertItemBefore(index, item) {\n const vl = this;\n if (index === 0) {\n vl.prependItem(item);\n return;\n }\n if (index >= vl.items.length) {\n vl.appendItem(item);\n return;\n }\n vl.items.splice(index, 0, item);\n // Update cache\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n const cachedIndex = parseInt(cached, 10);\n if (cachedIndex >= index) {\n newCache[cachedIndex + 1] = vl.domCache[cachedIndex];\n }\n });\n vl.domCache = newCache;\n }\n vl.update();\n }\n\n // Delete\n deleteItems(indexes) {\n const vl = this;\n let prevIndex;\n let indexShift = 0;\n for (let i = 0; i < indexes.length; i += 1) {\n let index = indexes[i];\n if (typeof prevIndex !== 'undefined') {\n if (index > prevIndex) {\n indexShift = -i;\n }\n }\n index += indexShift;\n prevIndex = indexes[i];\n // Delete item\n const deletedItem = vl.items.splice(index, 1)[0];\n\n // Delete from filtered\n if (vl.filteredItems && vl.filteredItems.indexOf(deletedItem) >= 0) {\n vl.filteredItems.splice(vl.filteredItems.indexOf(deletedItem), 1);\n }\n // Update cache\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n const cachedIndex = parseInt(cached, 10);\n if (cachedIndex === index) {\n delete vl.domCache[index];\n } else if (parseInt(cached, 10) > index) {\n newCache[cachedIndex - 1] = vl.domCache[cached];\n } else {\n newCache[cachedIndex] = vl.domCache[cached];\n }\n });\n vl.domCache = newCache;\n }\n }\n vl.update();\n }\n deleteAllItems() {\n const vl = this;\n vl.items = [];\n delete vl.filteredItems;\n if (vl.params.cache) vl.domCache = {};\n vl.update();\n }\n deleteItem(index) {\n const vl = this;\n vl.deleteItems([index]);\n }\n\n // Clear cache\n clearCache() {\n const vl = this;\n vl.domCache = {};\n }\n\n // Update Virtual List\n update(deleteCache) {\n const vl = this;\n if (deleteCache && vl.params.cache) {\n vl.domCache = {};\n }\n vl.heightsCalculated = [];\n vl.setListSize();\n vl.render(true);\n }\n init() {\n const vl = this;\n vl.attachEvents();\n vl.setListSize();\n vl.render();\n }\n destroy() {\n let vl = this;\n vl.detachEvents();\n vl.$el[0].f7VirtualList = null;\n delete vl.$el[0].f7VirtualList;\n deleteProps(vl);\n vl = null;\n }\n}\nexport default VirtualList;", "import VirtualList from './virtual-list-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'virtualList',\n static: {\n VirtualList\n },\n create() {\n const app = this;\n app.virtualList = ConstructorMethods({\n defaultSelector: '.virtual-list',\n constructor: VirtualList,\n app,\n domProp: 'f7VirtualList'\n });\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nclass ListIndex extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const index = this;\n const defaults = {\n el: null,\n // where to render indexes\n listEl: null,\n // list el to generate indexes\n indexes: 'auto',\n // or array of indexes\n iosItemHeight: 14,\n mdItemHeight: 14,\n scrollList: true,\n label: false,\n // eslint-disable-next-line\n renderItem(itemContent, itemIndex) {\n return `\n - ${itemContent}
\n `.trim();\n },\n renderSkipPlaceholder() {\n return '';\n },\n on: {}\n };\n\n // Extend defaults with modules params\n index.useModulesParams(defaults);\n index.params = extend(defaults, params);\n let $el;\n let $listEl;\n let $pageContentEl;\n let $ul;\n if (index.params.el) {\n $el = $(index.params.el);\n } else {\n return index;\n }\n if ($el[0].f7ListIndex) {\n return $el[0].f7ListIndex;\n }\n $ul = $el.find('ul');\n if ($ul.length === 0) {\n $ul = $('');\n $el.append($ul);\n }\n if (index.params.listEl) {\n $listEl = $(index.params.listEl);\n }\n if (index.params.indexes === 'auto' && !$listEl) {\n return index;\n }\n if ($listEl) {\n $pageContentEl = $listEl.parents('.page-content').eq(0);\n } else {\n $pageContentEl = $el.siblings('.page-content').eq(0);\n if ($pageContentEl.length === 0) {\n $pageContentEl = $el.parents('.page').eq(0).find('.page-content').eq(0);\n }\n }\n $el[0].f7ListIndex = index;\n extend(index, {\n app,\n $el,\n el: $el && $el[0],\n $ul,\n ul: $ul && $ul[0],\n $listEl,\n listEl: $listEl && $listEl[0],\n $pageContentEl,\n pageContentEl: $pageContentEl && $pageContentEl[0],\n indexes: params.indexes,\n height: 0,\n skipRate: 0\n });\n\n // Install Modules\n index.useModules();\n\n // Attach events\n function handleResize() {\n const height = {\n index\n };\n index.calcSize();\n if (height !== index.height) {\n index.render();\n }\n }\n function handleClick(e) {\n const $clickedLi = $(e.target).closest('li');\n if (!$clickedLi.length) return;\n let itemIndex = $clickedLi.index();\n if (index.skipRate > 0) {\n const percentage = itemIndex / ($clickedLi.siblings('li').length - 1);\n itemIndex = Math.round((index.indexes.length - 1) * percentage);\n }\n const itemContent = index.indexes[itemIndex];\n index.$el.trigger('listindex:click', {\n content: itemContent,\n index: itemIndex\n });\n index.emit('local::click listIndexClick', index, itemContent, itemIndex);\n index.$el.trigger('listindex:select', {\n content: itemContent,\n index: itemIndex\n });\n index.emit('local::select listIndexSelect', index, itemContent, itemIndex);\n if (index.$listEl && index.params.scrollList) {\n index.scrollListToIndex(itemContent, itemIndex);\n }\n }\n const touchesStart = {};\n let isTouched;\n let isMoved;\n let topPoint;\n let bottomPoint;\n let $labelEl;\n let previousIndex = null;\n function handleTouchStart(e) {\n const $children = $ul.children();\n if (!$children.length) return;\n topPoint = $children[0].getBoundingClientRect().top;\n bottomPoint = $children[$children.length - 1].getBoundingClientRect().top + $children[0].offsetHeight;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isTouched = true;\n isMoved = false;\n previousIndex = null;\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n if (!isMoved && index.params.label) {\n $labelEl = $('');\n $el.append($labelEl);\n }\n isMoved = true;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n let percentage = (pageY - topPoint) / (bottomPoint - topPoint);\n percentage = Math.min(Math.max(percentage, 0), 1);\n const itemIndex = Math.round((index.indexes.length - 1) * percentage);\n const itemContent = index.indexes[itemIndex];\n const ulHeight = bottomPoint - topPoint;\n const bubbleBottom = (index.height - ulHeight) / 2 + (1 - percentage) * ulHeight;\n if (itemIndex !== previousIndex) {\n if (index.params.label) {\n $labelEl.html(itemContent).transform(`translateY(-${bubbleBottom}px)`);\n }\n if (index.$listEl && index.params.scrollList) {\n index.scrollListToIndex(itemContent, itemIndex);\n }\n }\n previousIndex = itemIndex;\n index.$el.trigger('listindex:select');\n index.emit('local::select listIndexSelect', index, itemContent, itemIndex);\n }\n function handleTouchEnd() {\n if (!isTouched) return;\n isTouched = false;\n isMoved = false;\n if (index.params.label) {\n if ($labelEl) $labelEl.remove();\n $labelEl = undefined;\n }\n }\n const passiveListener = getSupport().passiveListener ? {\n passive: true\n } : false;\n index.attachEvents = function attachEvents() {\n $el.parents('.tab').on('tab:show', handleResize);\n $el.parents('.page').on('page:reinit', handleResize);\n $el.parents('.panel').on('panel:open', handleResize);\n $el.parents('.sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast').on('modal:open', handleResize);\n app.on('resize', handleResize);\n $el.on('click', handleClick);\n $el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n };\n index.detachEvents = function attachEvents() {\n $el.parents('.tab').off('tab:show', handleResize);\n $el.parents('.page').off('page:reinit', handleResize);\n $el.parents('.panel').off('panel:open', handleResize);\n $el.parents('.sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast').off('modal:open', handleResize);\n app.off('resize', handleResize);\n $el.off('click', handleClick);\n $el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n };\n // Init\n index.init();\n return index;\n }\n // eslint-disable-next-line\n scrollListToIndex(itemContent, itemIndex) {\n const index = this;\n const {\n $listEl,\n $pageContentEl,\n app\n } = index;\n if (!$listEl || !$pageContentEl || $pageContentEl.length === 0) return index;\n let $scrollToEl;\n $listEl.find('.list-group-title').each(el => {\n if ($scrollToEl) return;\n const $el = $(el);\n if ($el.text() === itemContent) {\n $scrollToEl = $el;\n }\n });\n if (!$scrollToEl || $scrollToEl.length === 0) return index;\n const parentTop = $scrollToEl.parent().offset().top;\n let paddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const scrollTop = $pageContentEl[0].scrollTop;\n const scrollToElTop = $scrollToEl.offset().top;\n if ($pageContentEl.parents('.page-with-navbar-large').length) {\n const navbarInnerEl = app.navbar.getElByPage($pageContentEl.parents('.page-with-navbar-large').eq(0));\n const $titleLargeEl = $(navbarInnerEl).find('.title-large');\n if ($titleLargeEl.length) {\n paddingTop -= $titleLargeEl[0].offsetHeight || 0;\n }\n }\n if (parentTop <= paddingTop) {\n $pageContentEl.scrollTop(parentTop + scrollTop - paddingTop);\n } else {\n $pageContentEl.scrollTop(scrollToElTop + scrollTop - paddingTop);\n }\n return index;\n }\n renderSkipPlaceholder() {\n const index = this;\n return index.params.renderSkipPlaceholder.call(index);\n }\n renderItem(itemContent, itemIndex) {\n const index = this;\n return index.params.renderItem.call(index, itemContent, itemIndex);\n }\n render() {\n const index = this;\n const {\n $ul,\n indexes,\n skipRate\n } = index;\n let wasSkipped;\n const html = indexes.map((itemContent, itemIndex) => {\n if (itemIndex % skipRate !== 0 && skipRate > 0) {\n wasSkipped = true;\n return '';\n }\n let itemHtml = index.renderItem(itemContent, itemIndex);\n if (wasSkipped) {\n itemHtml = index.renderSkipPlaceholder() + itemHtml;\n }\n wasSkipped = false;\n return itemHtml;\n }).join('');\n $ul.html(html);\n return index;\n }\n calcSize() {\n const index = this;\n const {\n app,\n params,\n el,\n indexes\n } = index;\n const height = el.offsetHeight;\n const itemHeight = params[`${app.theme}ItemHeight`];\n const maxItems = Math.floor(height / itemHeight);\n const items = indexes.length;\n let skipRate = 0;\n if (items > maxItems) {\n skipRate = Math.ceil((items * 2 - 1) / maxItems);\n }\n index.height = height;\n index.skipRate = skipRate;\n return index;\n }\n calcIndexes() {\n const index = this;\n if (index.params.indexes === 'auto') {\n index.indexes = [];\n index.$listEl.find('.list-group-title').each(el => {\n const elContent = $(el).text();\n if (index.indexes.indexOf(elContent) < 0) {\n index.indexes.push(elContent);\n }\n });\n } else {\n index.indexes = index.params.indexes;\n }\n return index;\n }\n update() {\n const index = this;\n index.calcIndexes();\n index.calcSize();\n index.render();\n return index;\n }\n init() {\n const index = this;\n index.calcIndexes();\n index.calcSize();\n index.render();\n index.attachEvents();\n }\n destroy() {\n let index = this;\n index.$el.trigger('listindex:beforedestroy', index);\n index.emit('local::beforeDestroy listIndexBeforeDestroy');\n index.detachEvents();\n if (index.$el[0]) {\n index.$el[0].f7ListIndex = null;\n delete index.$el[0].f7ListIndex;\n }\n deleteProps(index);\n index = null;\n }\n}\nexport default ListIndex;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport ListIndex from './list-index-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'listIndex',\n static: {\n ListIndex\n },\n create() {\n const app = this;\n app.listIndex = ConstructorMethods({\n defaultSelector: '.list-index',\n constructor: ListIndex,\n app,\n domProp: 'f7ListIndex'\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.list-index-init').each(listIndexEl => {\n const params = extend($(listIndexEl).dataset(), {\n el: listIndexEl\n });\n app.listIndex.create(params);\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.list-index-init').each(listIndexEl => {\n if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.list-index-init').each(listIndexEl => {\n const params = extend($(listIndexEl).dataset(), {\n el: listIndexEl\n });\n app.listIndex.create(params);\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.list-index-init').each(listIndexEl => {\n if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();\n });\n }\n },\n vnode: {\n 'list-index-init': {\n insert(vnode) {\n const app = this;\n const listIndexEl = vnode.elm;\n const params = extend($(listIndexEl).dataset(), {\n el: listIndexEl\n });\n app.listIndex.create(params);\n },\n destroy(vnode) {\n const listIndexEl = vnode.elm;\n if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();\n }\n }\n }\n};", "export default {\n name: 'timeline'\n};", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nconst Tab = {\n show() {\n const app = this;\n let tabEl;\n let tabLinkEl;\n let animate;\n let tabRoute;\n let animatedInit;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0] && args[0].constructor === Object) {\n tabEl = args[0].tabEl;\n tabLinkEl = args[0].tabLinkEl;\n animate = args[0].animate;\n tabRoute = args[0].tabRoute;\n animatedInit = args[0].animatedInit;\n } else {\n [tabEl, tabLinkEl, animate, tabRoute] = args;\n if (typeof args[1] === 'boolean') {\n [tabEl, animate, tabLinkEl, tabRoute] = args;\n if (args.length > 2 && tabLinkEl.constructor === Object) {\n [tabEl, animate, tabRoute, tabLinkEl] = args;\n }\n }\n }\n if (typeof animate === 'undefined') animate = true;\n const $newTabEl = $(tabEl);\n if (tabRoute && $newTabEl[0]) {\n $newTabEl[0].f7TabRoute = tabRoute;\n }\n if (!animatedInit && ($newTabEl.length === 0 || $newTabEl.hasClass('tab-active'))) {\n return {\n $newTabEl,\n newTabEl: $newTabEl[0]\n };\n }\n let $tabLinkEl;\n if (tabLinkEl) $tabLinkEl = $(tabLinkEl);\n const $tabsEl = $newTabEl.parent('.tabs');\n if ($tabsEl.length === 0) {\n return {\n $newTabEl,\n newTabEl: $newTabEl[0]\n };\n }\n\n // Release swipeouts in hidden tabs\n if (app.swipeout) app.swipeout.allowOpen = true;\n\n // Animated tabs\n const tabsChangedCallbacks = [];\n function onTabsChanged(callback) {\n tabsChangedCallbacks.push(callback);\n }\n function tabsChanged() {\n tabsChangedCallbacks.forEach(callback => {\n callback();\n });\n }\n let animated = false;\n if ($tabsEl.parent().hasClass('tabs-animated-wrap')) {\n $tabsEl.parent()[animate ? 'removeClass' : 'addClass']('not-animated');\n const transitionDuration = parseFloat($tabsEl.css('transition-duration').replace(',', '.'));\n if (animate && transitionDuration) {\n $tabsEl.transitionEnd(tabsChanged);\n animated = true;\n }\n const tabsTranslate = (app.rtl ? $newTabEl.index() : -$newTabEl.index()) * 100;\n $tabsEl.transform(`translate3d(${tabsTranslate}%,0,0)`);\n }\n\n // Swipeable tabs\n let swiper;\n if ($tabsEl[0].nodeName.toLowerCase() === 'swiper-container' && app.swiper) {\n swiper = $tabsEl[0].swiper;\n const newTabIndex = swiper.slides.indexOf($newTabEl[0]);\n if (swiper && swiper.activeIndex !== newTabIndex) {\n animated = true;\n swiper.once('slideChangeTransitionEnd', () => {\n tabsChanged();\n }).slideTo(newTabIndex, animate ? undefined : 0);\n } else if (swiper && swiper.animating) {\n animated = true;\n swiper.once('slideChangeTransitionEnd', () => {\n tabsChanged();\n });\n }\n }\n\n // Remove active class from old tabs\n const $oldTabEl = $tabsEl.children('.tab-active');\n $oldTabEl.removeClass('tab-active');\n if (!animatedInit && (!swiper || swiper && !swiper.animating || swiper && tabRoute)) {\n if ($oldTabEl.hasClass('view') && $oldTabEl.children('.page').length) {\n $oldTabEl.children('.page').each(pageEl => {\n $(pageEl).trigger('page:tabhide');\n app.emit('pageTabHide', pageEl);\n });\n }\n $oldTabEl.trigger('tab:hide');\n app.emit('tabHide', $oldTabEl[0]);\n }\n\n // Trigger 'show' event on new tab\n $newTabEl.addClass('tab-active');\n if (!animatedInit && (!swiper || swiper && !swiper.animating || swiper && tabRoute)) {\n if ($newTabEl.hasClass('view') && $newTabEl.children('.page').length) {\n $newTabEl.children('.page').each(pageEl => {\n $(pageEl).trigger('page:tabshow');\n app.emit('pageTabShow', pageEl);\n });\n }\n $newTabEl.trigger('tab:show');\n app.emit('tabShow', $newTabEl[0]);\n }\n\n // Find related link for new tab\n if (!$tabLinkEl) {\n // Search by id\n if (typeof tabEl === 'string') $tabLinkEl = $(`.tab-link[href=\"${tabEl}\"]`);else $tabLinkEl = $(`.tab-link[href=\"#${$newTabEl.attr('id')}\"]`);\n // Search by data-tab\n if (!$tabLinkEl || $tabLinkEl && $tabLinkEl.length === 0) {\n $('[data-tab]').each(el => {\n if ($newTabEl.is($(el).attr('data-tab'))) $tabLinkEl = $(el);\n });\n }\n if (tabRoute && (!$tabLinkEl || $tabLinkEl && $tabLinkEl.length === 0)) {\n $tabLinkEl = $(`[data-route-tab-id=\"${tabRoute.route.tab.id}\"]`);\n if ($tabLinkEl.length === 0) {\n $tabLinkEl = $(`.tab-link[href=\"${tabRoute.url}\"]`);\n }\n }\n if ($tabLinkEl.length > 1 && $newTabEl.parents('.page').length) {\n // eslint-disable-next-line\n $tabLinkEl = $tabLinkEl.filter(tabLinkElement => {\n return $(tabLinkElement).parents('.page')[0] === $newTabEl.parents('.page')[0];\n });\n if (app.theme === 'ios' && $tabLinkEl.length === 0 && tabRoute) {\n const $pageEl = $newTabEl.parents('.page');\n const $navbarEl = $(app.navbar.getElByPage($pageEl));\n $tabLinkEl = $navbarEl.find(`[data-route-tab-id=\"${tabRoute.route.tab.id}\"]`);\n if ($tabLinkEl.length === 0) {\n $tabLinkEl = $navbarEl.find(`.tab-link[href=\"${tabRoute.url}\"]`);\n }\n }\n }\n }\n if ($tabLinkEl.length > 0) {\n // Find related link for old tab\n let $oldTabLinkEl;\n if ($oldTabEl && $oldTabEl.length > 0) {\n // Search by id\n const oldTabId = $oldTabEl.attr('id');\n if (oldTabId) {\n $oldTabLinkEl = $(`.tab-link[href=\"#${oldTabId}\"]`);\n // Search by data-route-tab-id\n if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {\n $oldTabLinkEl = $(`.tab-link[data-route-tab-id=\"${oldTabId}\"]`);\n }\n }\n // Search by data-tab\n if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {\n $('[data-tab]').each(tabLinkElement => {\n if ($oldTabEl.is($(tabLinkElement).attr('data-tab'))) $oldTabLinkEl = $(tabLinkElement);\n });\n }\n if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {\n $oldTabLinkEl = $tabLinkEl.siblings('.tab-link-active');\n }\n } else if (tabRoute) {\n $oldTabLinkEl = $tabLinkEl.siblings('.tab-link-active');\n }\n if ($oldTabLinkEl && $oldTabLinkEl.length > 1 && $oldTabEl && $oldTabEl.parents('.page').length) {\n // eslint-disable-next-line\n $oldTabLinkEl = $oldTabLinkEl.filter(tabLinkElement => {\n return $(tabLinkElement).parents('.page')[0] === $oldTabEl.parents('.page')[0];\n });\n }\n if ($oldTabLinkEl && $oldTabLinkEl.length > 0) $oldTabLinkEl.removeClass('tab-link-active');\n\n // Update links' classes\n if ($tabLinkEl && $tabLinkEl.length > 0) {\n $tabLinkEl.addClass('tab-link-active');\n // Material Highlight\n const $tabbarEl = $tabLinkEl.parents('.tabbar, .tabbar-icons');\n const hasHighlight = app.toolbar && $tabbarEl.length > 0 && ($tabbarEl.hasClass('tabbar-highlight') || app.theme !== 'ios');\n if (hasHighlight) {\n app.toolbar.setHighlight($tabbarEl);\n }\n }\n }\n return {\n $newTabEl,\n newTabEl: $newTabEl[0],\n $oldTabEl,\n oldTabEl: $oldTabEl[0],\n onTabsChanged,\n animated\n };\n }\n};\nexport default {\n name: 'tabs',\n create() {\n const app = this;\n extend(app, {\n tab: {\n show: Tab.show.bind(app)\n }\n });\n },\n on: {\n 'pageInit tabMounted': function onInit(pageOrTabEl) {\n const $el = $(pageOrTabEl.el || pageOrTabEl);\n const animatedTabEl = $el.find('.tabs-animated-wrap > .tabs > .tab-active')[0];\n if (!animatedTabEl) return;\n const app = this;\n app.tab.show({\n tabEl: animatedTabEl,\n animatedInit: true,\n animate: false\n });\n }\n },\n clicks: {\n '.tab-link': function tabLinkClick($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n if ($clickedEl.attr('href') && $clickedEl.attr('href').indexOf('#') === 0 || $clickedEl.attr('data-tab')) {\n const app = this;\n app.tab.show({\n tabEl: data.tab || $clickedEl.attr('href'),\n tabLinkEl: $clickedEl,\n animate: data.animate\n });\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, now, nextFrame } from '../../shared/utils.js';\nfunction swipePanel(panel) {\n const app = panel.app;\n if (panel.swipeInitialized) {\n return;\n }\n extend(panel, {\n swipeable: true,\n swipeInitialized: true\n });\n const params = panel.params;\n const {\n $el,\n $backdropEl,\n side,\n effect\n } = panel;\n let otherPanel;\n let isTouched;\n let isGestureStarted;\n let isMoved;\n let isScrolling;\n let isInterrupted;\n const touchesStart = {};\n let touchStartTime;\n let touchesDiff;\n let translate;\n let backdropOpacity;\n let panelWidth;\n let direction;\n let $viewEl;\n let touchMoves = 0;\n function handleTouchStart(e) {\n if (!panel.swipeable || isGestureStarted) return;\n if (!app.panel.allowOpen || !params.swipe && !params.swipeOnlyClose || isTouched) return;\n if ($('.modal-in:not(.toast):not(.notification), .photo-browser-in').length > 0) return;\n otherPanel = app.panel.get(side === 'left' ? 'right' : 'left') || {};\n const otherPanelOpened = otherPanel.opened && otherPanel.$el && !otherPanel.$el.hasClass('panel-in-breakpoint');\n if (!panel.opened && otherPanelOpened) {\n return;\n }\n if (!params.swipeOnlyClose) {\n if (otherPanelOpened) return;\n }\n if (e.target && e.target.nodeName.toLowerCase() === 'input' && e.target.type === 'range') return;\n if ($(e.target).closest('.range-slider, swiper-container.tabs, .calendar-months, .no-swipe-panel, .card-opened').length > 0) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n if (params.swipeOnlyClose && !panel.opened) {\n return;\n }\n if (params.swipeActiveArea && !panel.opened) {\n if (side === 'left') {\n if (touchesStart.x > params.swipeActiveArea) return;\n }\n if (side === 'right') {\n if (touchesStart.x < app.width - params.swipeActiveArea) return;\n }\n }\n touchMoves = 0;\n $viewEl = $(panel.getViewEl());\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n isInterrupted = false;\n touchStartTime = now();\n direction = undefined;\n }\n function handleTouchMove(e) {\n if (!isTouched || isGestureStarted || isInterrupted) return;\n touchMoves += 1;\n if (touchMoves < 2) return;\n if (e.f7PreventSwipePanel || app.preventSwipePanelBySwipeBack || app.preventSwipePanel) {\n isTouched = false;\n return;\n }\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!direction) {\n if (pageX > touchesStart.x) {\n direction = 'to-right';\n } else {\n direction = 'to-left';\n }\n if (params.swipeActiveArea > 0 && !panel.opened) {\n if (side === 'left' && touchesStart.x > params.swipeActiveArea) {\n isTouched = false;\n return;\n }\n if (side === 'right' && touchesStart.x < app.width - params.swipeActiveArea) {\n isTouched = false;\n return;\n }\n }\n if ($el.hasClass('panel-in-breakpoint')) {\n isTouched = false;\n return;\n }\n if (side === 'left' && direction === 'to-left' && !$el.hasClass('panel-in') || side === 'right' && direction === 'to-right' && !$el.hasClass('panel-in')) {\n isTouched = false;\n return;\n }\n }\n let threshold = panel.opened ? 0 : -params.swipeThreshold;\n if (side === 'right') threshold = -threshold;\n if (!isMoved) {\n if (!panel.opened) {\n panel.insertToRoot();\n $el.addClass('panel-in-swipe');\n if ($backdropEl) $backdropEl.css('visibility', 'visible');\n $el.trigger('panel:swipeopen');\n panel.emit('local::swipeOpen panelSwipeOpen', panel);\n }\n panelWidth = $el[0].offsetWidth;\n if (effect === 'reveal' && $el.hasClass('panel-in-collapsed')) {\n panelWidth -= parseFloat($viewEl.css(`margin-${side}`));\n }\n $el.transition(0);\n }\n isMoved = true;\n if (e.cancelable) {\n e.preventDefault();\n }\n touchesDiff = pageX - touchesStart.x + threshold;\n const startTranslate = effect === 'floating' ? 8 : 0;\n if (side === 'right') {\n if (effect === 'cover' || effect === 'push' || effect === 'floating') {\n translate = touchesDiff + (panel.opened ? startTranslate : panelWidth);\n if (translate < 0 - startTranslate) translate = -startTranslate;\n if (translate > panelWidth) {\n translate = panelWidth;\n }\n } else {\n translate = touchesDiff - (panel.opened ? panelWidth : 0);\n if (translate > 0) translate = 0;\n if (translate < -panelWidth) {\n translate = -panelWidth;\n }\n }\n } else {\n translate = touchesDiff + (panel.opened ? panelWidth : startTranslate);\n if (translate < 0) translate = 0;\n if (translate > panelWidth + startTranslate) {\n translate = panelWidth + startTranslate;\n }\n }\n const noFollowProgress = Math.abs(translate / panelWidth);\n if (effect === 'reveal') {\n if (!params.swipeNoFollow) {\n $viewEl.transform(`translate3d(${translate}px,0,0)`).transition(0);\n if ($backdropEl) $backdropEl.transform(`translate3d(${translate}px,0,0)`).transition(0);\n }\n $el.trigger('panel:swipe', Math.abs(translate / panelWidth));\n panel.emit('local::swipe panelSwipe', panel, Math.abs(translate / panelWidth));\n } else {\n if (side === 'left') translate -= panelWidth;\n if (!params.swipeNoFollow) {\n backdropOpacity = 1 - Math.abs(translate / panelWidth);\n if ($backdropEl) {\n $backdropEl.transition(0);\n $backdropEl.css({\n opacity: backdropOpacity\n });\n }\n $el.transform(`translate3d(${translate}px,0,0)`).transition(0);\n if (effect === 'push') {\n const viewTranslate = side === 'left' ? translate + panelWidth : translate - panelWidth;\n $viewEl.transform(`translate3d(${viewTranslate}px,0,0)`).transition(0);\n if ($backdropEl) {\n $backdropEl.transform(`translate3d(${viewTranslate}px,0,0)`).transition(0);\n }\n }\n }\n $el.trigger('panel:swipe', Math.abs(translate / panelWidth));\n panel.emit('local::swipe panelSwipe', panel, Math.abs(translate / panelWidth));\n }\n if (params.swipeNoFollow) {\n const stateChanged = panel.opened && noFollowProgress === 0 || !panel.opened && noFollowProgress === 1;\n if (stateChanged) {\n isInterrupted = true;\n // eslint-disable-next-line\n handleTouchEnd(e);\n }\n }\n }\n function handleTouchEnd(e) {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n const isGesture = e.type === 'gesturestart' || isGestureStarted;\n isTouched = false;\n isMoved = false;\n const timeDiff = new Date().getTime() - touchStartTime;\n let action;\n const startTranslate = effect === 'floating' ? side === 'left' ? 8 : -8 : 0;\n const edge = (translate === startTranslate || Math.abs(translate) === panelWidth) && !params.swipeNoFollow;\n const threshold = params.swipeThreshold || 0;\n if (isGesture) {\n action = 'reset';\n } else if (!panel.opened) {\n if (Math.abs(touchesDiff) < threshold) {\n action = 'reset';\n } else if (effect === 'cover' || effect === 'push' || effect === 'floating') {\n if (translate === 0 + startTranslate) {\n action = 'swap'; // open\n } else if (timeDiff < 300 && Math.abs(translate) > 0) {\n action = 'swap'; // open\n } else if (timeDiff >= 300 && Math.abs(translate) < panelWidth / 2) {\n action = 'swap'; // open\n } else {\n action = 'reset'; // close\n }\n } else if (translate === 0) {\n action = 'reset';\n } else if (timeDiff < 300 && Math.abs(translate) > 0 || timeDiff >= 300 && Math.abs(translate) >= panelWidth / 2) {\n action = 'swap';\n } else {\n action = 'reset';\n }\n } else if (effect === 'cover' || effect === 'push' || effect === 'floating') {\n if (translate === 0) {\n action = 'reset'; // open\n } else if (timeDiff < 300 && Math.abs(translate) > 0) {\n action = 'swap'; // open\n } else if (timeDiff >= 300 && Math.abs(translate) < panelWidth / 2) {\n action = 'reset'; // open\n } else {\n action = 'swap'; // close\n }\n } else if (translate === -panelWidth) {\n action = 'reset';\n } else if (timeDiff < 300 && Math.abs(translate) >= 0 || timeDiff >= 300 && Math.abs(translate) <= panelWidth / 2) {\n if (side === 'left' && translate === panelWidth) action = 'reset';else action = 'swap';\n } else {\n action = 'reset';\n }\n if (action === 'swap') {\n if (panel.opened) {\n panel.close(!edge);\n } else {\n panel.open(!edge);\n }\n }\n let removePanelInClass = true;\n if (action === 'reset') {\n if (!panel.opened) {\n if (edge) {\n // edge position\n $el.removeClass('panel-in-swipe');\n } else {\n removePanelInClass = false;\n const target = effect === 'reveal' ? $viewEl : $el;\n panel.setStateClasses('before-closing');\n target.transitionEnd(() => {\n if ($el.hasClass('panel-in')) return;\n $el.removeClass('panel-in-swipe');\n panel.setStateClasses('after-closing');\n });\n }\n }\n }\n if (effect === 'reveal' || effect === 'push') {\n nextFrame(() => {\n $viewEl.transition('');\n $viewEl.transform('');\n });\n }\n if (removePanelInClass) {\n $el.removeClass('panel-in-swipe');\n }\n $el.transition('').transform('');\n if ($backdropEl) {\n $backdropEl.transform('').transition('').css({\n opacity: '',\n visibility: ''\n });\n }\n }\n function handleGestureStart(e) {\n isGestureStarted = true;\n handleTouchEnd(e);\n }\n function handleGestureEnd() {\n isGestureStarted = false;\n }\n\n // Add Events\n app.on('touchstart:passive', handleTouchStart);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('gesturestart', handleGestureStart);\n app.on('gestureend', handleGestureEnd);\n panel.on('panelDestroy', () => {\n app.off('touchstart:passive', handleTouchStart);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('gesturestart', handleGestureStart);\n app.off('gestureend', handleGestureEnd);\n });\n}\nexport default swipePanel;", "import $ from '../../shared/dom7.js';\nimport { extend, nextFrame } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nfunction resizablePanel(panel) {\n const app = panel.app;\n const support = getSupport();\n if (panel.resizableInitialized) return;\n extend(panel, {\n resizable: true,\n resizableWidth: null,\n resizableInitialized: true\n });\n const $htmlEl = $('html');\n const {\n $el,\n $backdropEl,\n side,\n effect\n } = panel;\n if (!$el) return;\n let isTouched;\n let isMoved;\n const touchesStart = {};\n let touchesDiff;\n let panelWidth;\n let $viewEl;\n let panelMinWidth;\n let panelMaxWidth;\n let visibleByBreakpoint;\n const isPushingPanel = effect !== 'cover' && effect !== 'floating';\n function transformCSSWidth(v) {\n if (!v) return null;\n if (v.indexOf('%') >= 0 || v.indexOf('vw') >= 0) {\n return parseInt(v, 10) / 100 * app.width;\n }\n const newV = parseInt(v, 10);\n if (Number.isNaN(newV)) return null;\n return newV;\n }\n function isResizable() {\n return panel.resizable && $el.hasClass('panel-resizable');\n }\n function handleTouchStart(e) {\n if (!isResizable()) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isMoved = false;\n isTouched = true;\n panelMinWidth = transformCSSWidth($el.css('min-width'));\n panelMaxWidth = transformCSSWidth($el.css('max-width'));\n visibleByBreakpoint = $el.hasClass('panel-in-breakpoint');\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n if (!isMoved) {\n panelWidth = $el[0].offsetWidth;\n $el.transition(0);\n $el.addClass('panel-resizing');\n $htmlEl.css('cursor', 'col-resize');\n if (isPushingPanel || visibleByBreakpoint) {\n $viewEl = $(panel.getViewEl());\n if (panel.$containerEl && panel.$containerEl.hasClass('page')) {\n $viewEl.add(panel.$containerEl.children('.page-content, .tabs, .fab'));\n }\n }\n if (isPushingPanel && !visibleByBreakpoint) {\n $backdropEl.transition(0);\n $viewEl.transition(0);\n }\n }\n isMoved = true;\n e.preventDefault();\n touchesDiff = pageX - touchesStart.x;\n let newPanelWidth = side === 'left' ? panelWidth + touchesDiff : panelWidth - touchesDiff;\n if (panelMinWidth && !Number.isNaN(panelMinWidth)) {\n newPanelWidth = Math.max(newPanelWidth, panelMinWidth);\n }\n if (panelMaxWidth && !Number.isNaN(panelMaxWidth)) {\n newPanelWidth = Math.min(newPanelWidth, panelMaxWidth);\n }\n newPanelWidth = Math.min(Math.max(newPanelWidth, 0), app.width);\n panel.resizableWidth = newPanelWidth;\n $el[0].style.width = `${newPanelWidth}px`;\n if (isPushingPanel && !visibleByBreakpoint) {\n if ($viewEl) {\n $viewEl.transform(`translate3d(${side === 'left' ? newPanelWidth : -newPanelWidth}px, 0, 0)`);\n }\n if ($backdropEl) {\n $backdropEl.transform(`translate3d(${side === 'left' ? newPanelWidth : -newPanelWidth}px, 0, 0)`);\n }\n } else if (visibleByBreakpoint && $viewEl) {\n $viewEl.css(`margin-${side}`, `${newPanelWidth}px`);\n }\n $el.trigger('panel:resize', newPanelWidth);\n panel.emit('local::resize panelResize', panel, newPanelWidth);\n }\n function handleTouchEnd() {\n $('html').css('cursor', '');\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n $htmlEl[0].style.setProperty(`--f7-panel-${side}-width`, `${panel.resizableWidth}px`);\n $el[0].style.width = '';\n if (isPushingPanel && !visibleByBreakpoint) {\n $viewEl.transform('');\n $backdropEl.transform('');\n }\n $el.removeClass('panel-resizing');\n nextFrame(() => {\n $el.transition('');\n if (isPushingPanel) {\n $backdropEl.transition('');\n if ($viewEl) $viewEl.transition('');\n }\n });\n }\n function handleResize() {\n if (!panel.opened || !panel.resizableWidth) return;\n panelMinWidth = transformCSSWidth($el.css('min-width'));\n panelMaxWidth = transformCSSWidth($el.css('max-width'));\n if (panelMinWidth && !Number.isNaN(panelMinWidth) && panel.resizableWidth < panelMinWidth) {\n panel.resizableWidth = Math.max(panel.resizableWidth, panelMinWidth);\n }\n if (panelMaxWidth && !Number.isNaN(panelMaxWidth) && panel.resizableWidth > panelMaxWidth) {\n panel.resizableWidth = Math.min(panel.resizableWidth, panelMaxWidth);\n }\n panel.resizableWidth = Math.min(Math.max(panel.resizableWidth, 0), app.width);\n $htmlEl[0].style.setProperty(`--f7-panel-${side}-width`, `${panel.resizableWidth}px`);\n }\n if (panel.$el.find('.panel-resize-handler').length === 0) {\n panel.$el.append('');\n }\n panel.$resizeHandlerEl = panel.$el.children('.panel-resize-handler');\n $el.addClass('panel-resizable');\n\n // Add Events\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n panel.$el.on(app.touchEvents.start, '.panel-resize-handler', handleTouchStart, passive);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n panel.on('beforeOpen', handleResize);\n panel.once('panelDestroy', () => {\n $el.removeClass('panel-resizable');\n panel.$resizeHandlerEl.remove();\n panel.$el.off(app.touchEvents.start, '.panel-resize-handler', handleTouchStart, passive);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n panel.off('beforeOpen', handleResize);\n });\n}\nexport default resizablePanel;", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport swipePanel from './swipe-panel.js';\nimport resizablePanel from './resizable-panel.js';\nclass Panel extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n const extendedParams = extend({\n on: {}\n }, app.params.panel, params);\n super(extendedParams, [app]);\n const panel = this;\n panel.params = extendedParams;\n panel.$containerEl = panel.params.containerEl ? $(panel.params.containerEl).eq(0) : app.$el;\n panel.containerEl = panel.$containerEl[0];\n if (!panel.containerEl) {\n panel.$containerEl = app.$el;\n panel.containerEl = app.$el[0];\n }\n let $el;\n if (panel.params.el) {\n $el = $(panel.params.el).eq(0);\n } else if (panel.params.content) {\n $el = $(panel.params.content).filter(node => node.nodeType === 1).eq(0);\n }\n if ($el.length === 0) return panel;\n if ($el[0].f7Panel) return $el[0].f7Panel;\n $el[0].f7Panel = panel;\n let {\n side,\n effect,\n resizable\n } = panel.params;\n if (typeof side === 'undefined') side = $el.hasClass('panel-left') ? 'left' : 'right';\n if (typeof effect === 'undefined')\n // eslint-disable-next-line\n effect = $el.hasClass('panel-cover') ? 'cover' : $el.hasClass('panel-push') ? 'push' : $el.hasClass('panel-floating') ? 'floating' : 'reveal';\n if (typeof resizable === 'undefined') resizable = $el.hasClass('panel-resizable');\n let $backdropEl;\n if (panel.params.backdrop && panel.params.backdropEl) {\n $backdropEl = $(panel.params.backdropEl);\n } else if (panel.params.backdrop) {\n $backdropEl = panel.$containerEl.children('.panel-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n panel.$containerEl.prepend($backdropEl);\n }\n }\n extend(panel, {\n app,\n side,\n effect,\n resizable,\n $el,\n el: $el[0],\n opened: false,\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0]\n });\n\n // Install Modules\n panel.useModules();\n\n // Init\n panel.init();\n return panel;\n }\n getViewEl() {\n const panel = this;\n let viewEl;\n if (panel.$containerEl.children('.views').length > 0) {\n viewEl = panel.$containerEl.children('.views')[0];\n } else {\n viewEl = panel.$containerEl.children('.view')[0];\n }\n return viewEl;\n }\n setStateClasses(state) {\n const panel = this;\n const {\n side,\n el,\n effect\n } = panel;\n const viewEl = panel.getViewEl();\n const panelInView = viewEl && viewEl.contains(el);\n const $targetEl = !viewEl || panelInView ? panel.$containerEl : $('html');\n if (state === 'open') {\n $targetEl.addClass(`with-panel with-panel-${panel.side}-${panel.effect}`);\n }\n if (state === 'before-closing') {\n $targetEl.addClass('with-panel-closing');\n }\n if (state === 'closing') {\n $targetEl.addClass('with-panel-closing');\n $targetEl.removeClass(`with-panel with-panel-${panel.side}-${panel.effect}`);\n }\n if (state === 'after-closing') {\n $targetEl.removeClass('with-panel-closing');\n }\n if (state === 'closed') {\n $targetEl.removeClass(`with-panel-${side}-${effect}`);\n }\n }\n enableVisibleBreakpoint() {\n const panel = this;\n panel.visibleBreakpointDisabled = false;\n panel.setVisibleBreakpoint();\n return panel;\n }\n disableVisibleBreakpoint() {\n const panel = this;\n panel.visibleBreakpointDisabled = true;\n panel.setVisibleBreakpoint();\n return panel;\n }\n toggleVisibleBreakpoint() {\n const panel = this;\n panel.visibleBreakpointDisabled = !panel.visibleBreakpointDisabled;\n panel.setVisibleBreakpoint();\n return panel;\n }\n setVisibleBreakpoint(emitEvents) {\n if (emitEvents === void 0) {\n emitEvents = true;\n }\n const panel = this;\n const app = panel.app;\n if (!panel.visibleBreakpointResizeHandler) {\n panel.visibleBreakpointResizeHandler = function visibleBreakpointResizeHandler() {\n panel.setVisibleBreakpoint();\n };\n app.on('resize', panel.visibleBreakpointResizeHandler);\n }\n const {\n side,\n $el,\n $containerEl,\n params,\n visibleBreakpointDisabled\n } = panel;\n const breakpoint = params.visibleBreakpoint;\n const $viewEl = $(panel.getViewEl());\n const wasVisible = $el.hasClass('panel-in-breakpoint');\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs, .fab'));\n }\n if (app.width >= breakpoint && typeof breakpoint !== 'undefined' && breakpoint !== null && !visibleBreakpointDisabled) {\n if (!wasVisible) {\n panel.setStateClasses('closed');\n $el.addClass('panel-in-breakpoint').removeClass('panel-in panel-in-collapsed');\n panel.onOpen(false);\n panel.onOpened();\n $viewEl.css({\n [`margin-${side}`]: `${$el.width()}px`\n });\n app.allowPanelOpen = true;\n if (emitEvents) {\n panel.emit('local::breakpoint panelBreakpoint', panel);\n panel.$el.trigger('panel:breakpoint');\n }\n } else {\n $viewEl.css({\n [`margin-${side}`]: `${$el.width()}px`\n });\n }\n } else if (wasVisible) {\n $el.removeClass('panel-in-breakpoint panel-in');\n panel.onClose();\n panel.onClosed();\n $viewEl.css({\n [`margin-${side}`]: ''\n });\n if (emitEvents) {\n panel.emit('local::breakpoint panelBreakpoint', panel);\n panel.$el.trigger('panel:breakpoint');\n }\n }\n }\n enableCollapsedBreakpoint() {\n const panel = this;\n panel.collapsedBreakpointDisabled = false;\n panel.setCollapsedBreakpoint();\n return panel;\n }\n disableCollapsedBreakpoint() {\n const panel = this;\n panel.collapsedBreakpointDisabled = true;\n panel.setCollapsedBreakpoint();\n return panel;\n }\n toggleCollapsedBreakpoint() {\n const panel = this;\n panel.collapsedBreakpointDisabled = !panel.collapsedBreakpointDisabled;\n panel.setCollapsedBreakpoint();\n return panel;\n }\n setCollapsedBreakpoint(emitEvents) {\n if (emitEvents === void 0) {\n emitEvents = true;\n }\n const panel = this;\n const app = panel.app;\n if (!panel.collapsedBreakpointResizeHandler) {\n panel.collapsedBreakpointResizeHandler = function collapsedBreakpointResizeHandler() {\n panel.setCollapsedBreakpoint();\n };\n app.on('resize', panel.collapsedBreakpointResizeHandler);\n }\n const {\n $el,\n params,\n collapsedBreakpointDisabled\n } = panel;\n if ($el.hasClass('panel-in-breakpoint')) return;\n const breakpoint = params.collapsedBreakpoint;\n const wasVisible = $el.hasClass('panel-in-collapsed');\n if (app.width >= breakpoint && typeof breakpoint !== 'undefined' && breakpoint !== null && !collapsedBreakpointDisabled) {\n if (!wasVisible) {\n panel.setStateClasses('closed');\n $el.addClass('panel-in-collapsed').removeClass('panel-in');\n panel.collapsed = true;\n app.allowPanelOpen = true;\n if (emitEvents) {\n panel.emit('local::collapsedBreakpoint panelCollapsedBreakpoint', panel);\n panel.$el.trigger('panel:collapsedbreakpoint');\n }\n }\n } else if (wasVisible) {\n $el.removeClass('panel-in-collapsed panel-in');\n panel.collapsed = false;\n if (emitEvents) {\n panel.emit('local::collapsedBreakpoint panelCollapsedBreakpoint', panel);\n panel.$el.trigger('panel:collapsedbreakpoint');\n }\n }\n }\n enableResizable() {\n const panel = this;\n if (panel.resizableInitialized) {\n panel.resizable = true;\n panel.$el.addClass('panel-resizable');\n } else {\n resizablePanel(panel);\n }\n return panel;\n }\n disableResizable() {\n const panel = this;\n panel.resizable = false;\n panel.$el.removeClass('panel-resizable');\n return panel;\n }\n enableSwipe() {\n const panel = this;\n if (panel.swipeInitialized) {\n panel.swipeable = true;\n } else {\n swipePanel(panel);\n }\n return panel;\n }\n disableSwipe() {\n const panel = this;\n panel.swipeable = false;\n return panel;\n }\n onOpen(modifyHtmlClasses) {\n if (modifyHtmlClasses === void 0) {\n modifyHtmlClasses = true;\n }\n const panel = this;\n // eslint-disable-next-line\n panel._openTransitionStarted = false;\n const app = panel.app;\n panel.opened = true;\n app.panel.allowOpen = false;\n panel.$el.trigger('panel:beforeopen');\n panel.emit('local::beforeOpen panelBeforeOpen', panel);\n if (modifyHtmlClasses) {\n panel.setStateClasses('open');\n }\n panel.$el.trigger('panel:open');\n panel.emit('local::open panelOpen', panel);\n }\n onOpened() {\n const panel = this;\n const app = panel.app;\n app.panel.allowOpen = true;\n panel.$el.trigger('panel:opened');\n panel.emit('local::opened panelOpened', panel);\n }\n onClose() {\n const panel = this;\n const app = panel.app;\n panel.opened = false;\n app.panel.allowOpen = false;\n panel.$el.trigger('panel:beforeclose');\n panel.emit('local::beforeClose panelBeforeClose', panel);\n panel.setStateClasses('closing');\n panel.$el.trigger('panel:close');\n panel.emit('local::close panelClose', panel);\n }\n onClosed() {\n const panel = this;\n const app = panel.app;\n app.panel.allowOpen = true;\n panel.setStateClasses('after-closing');\n panel.$el.removeClass('panel-out');\n if (panel.$backdropEl) {\n const otherPanel = app.panel.get('.panel-in');\n const shouldHideBackdrop = !otherPanel || otherPanel && !otherPanel.$backdropEl;\n if (shouldHideBackdrop) {\n panel.$backdropEl.removeClass('panel-backdrop-in');\n }\n }\n panel.$el.trigger('panel:closed');\n panel.emit('local::closed panelClosed', panel);\n }\n toggle(animate) {\n if (animate === void 0) {\n animate = true;\n }\n const panel = this;\n const breakpoint = panel.params.visibleBreakpoint;\n const app = panel.app;\n if (app.width >= breakpoint && typeof breakpoint !== 'undefined' && breakpoint !== null) {\n return panel.toggleVisibleBreakpoint();\n }\n if (panel.opened) panel.close(animate);else panel.open(animate);\n return panel;\n }\n insertToRoot() {\n const panel = this;\n const document = getDocument();\n const {\n $el,\n $backdropEl,\n $containerEl\n } = panel;\n const $panelParentEl = $el.parent();\n const wasInDom = $el.parents(document).length > 0;\n if (!$panelParentEl.is($containerEl) || $el.prevAll('.views, .view').length) {\n const $insertBeforeEl = $containerEl.children('.panel, .views, .view').eq(0);\n const $insertAfterEl = $containerEl.children('.panel-backdrop').eq(0);\n if ($insertBeforeEl.length) {\n $el.insertBefore($insertBeforeEl);\n } else if ($insertAfterEl) {\n $el.insertBefore($insertAfterEl);\n } else {\n $containerEl.prepend($el);\n }\n if ($backdropEl && $backdropEl.length && (!$backdropEl.parent().is($containerEl) && $backdropEl.nextAll('.panel').length === 0 || $backdropEl.parent().is($containerEl) && $backdropEl.nextAll('.panel').length === 0)) {\n $backdropEl.insertBefore($el);\n }\n panel.once('panelClosed', () => {\n if (wasInDom) {\n $panelParentEl.append($el);\n } else {\n $el.remove();\n }\n });\n }\n }\n open(animate) {\n if (animate === void 0) {\n animate = true;\n }\n const panel = this;\n const app = panel.app;\n if (!app.panel.allowOpen) return false;\n const {\n effect,\n $el,\n $backdropEl,\n opened,\n $containerEl\n } = panel;\n if (!$el || $el.hasClass('panel-in')) {\n return panel;\n }\n panel.insertToRoot();\n\n // Ignore if opened\n if (opened || $el.hasClass('panel-in-breakpoint') || $el.hasClass('panel-in')) return false;\n\n // Close if some panel is opened\n const otherOpenedPanel = app.panel.get('.panel-in');\n if (otherOpenedPanel && otherOpenedPanel !== panel) {\n otherOpenedPanel.close(animate);\n }\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n $el.addClass('panel-in');\n if ($backdropEl) {\n $backdropEl.addClass('panel-backdrop-in');\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n }\n if (['cover', 'push', 'floating'].includes(panel.effect)) {\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n panel._clientLeft = $el[0].clientLeft;\n }\n\n // Transitionend\n const $viewEl = $(panel.getViewEl());\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs'));\n }\n const transitionEndTarget = effect === 'reveal' ? $viewEl : $el;\n function panelTransitionStart() {\n transitionEndTarget.transitionStart(() => {\n // eslint-disable-next-line\n panel._openTransitionStarted = true;\n });\n }\n function panelTransitionEnd() {\n transitionEndTarget.transitionEnd(e => {\n if ($(e.target).is(transitionEndTarget)) {\n if ($el.hasClass('panel-out')) {\n panel.onClosed();\n } else {\n panel.onOpened();\n }\n } else panelTransitionEnd();\n });\n }\n if (animate) {\n if ($backdropEl) {\n $backdropEl.removeClass('not-animated');\n }\n panelTransitionStart();\n panelTransitionEnd();\n $el.removeClass('panel-out not-animated').addClass('panel-in');\n panel.onOpen();\n } else {\n if ($backdropEl) {\n $backdropEl.addClass('not-animated');\n }\n $el.removeClass('panel-out').addClass('panel-in not-animated');\n panel.onOpen();\n panel.onOpened();\n // eslint-disable-next-line\n panel._openTransitionStarted = true;\n }\n return true;\n }\n close(animate) {\n if (animate === void 0) {\n animate = true;\n }\n const panel = this;\n const {\n effect,\n $el,\n $backdropEl,\n opened,\n $containerEl\n } = panel;\n if (!opened || $el.hasClass('panel-in-breakpoint') || !$el.hasClass('panel-in')) return panel;\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n if ($backdropEl) {\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n }\n const $viewEl = $(panel.getViewEl());\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs'));\n }\n const transitionEndTarget = effect === 'reveal' ? $viewEl : $el;\n // eslint-disable-next-line\n if (!panel._openTransitionStarted) {\n // eslint-disable-next-line\n animate = false;\n }\n function transitionEnd() {\n if ($el.hasClass('panel-out')) {\n panel.onClosed();\n } else if ($el.hasClass('panel-in')) {\n panel.onOpened();\n }\n panel.setStateClasses('after-closing');\n }\n if (animate) {\n transitionEndTarget.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('panel-in').addClass('panel-out');\n // Emit close\n panel.onClose();\n } else {\n $el.addClass('not-animated').removeClass('panel-in').addClass('panel-out');\n // Emit close\n panel.onClose();\n panel.onClosed();\n }\n return panel;\n }\n init() {\n const panel = this;\n // const app = panel.app;\n if (typeof panel.params.visibleBreakpoint !== 'undefined') {\n panel.setVisibleBreakpoint();\n }\n if (typeof panel.params.collapsedBreakpoint !== 'undefined') {\n panel.setCollapsedBreakpoint();\n }\n if (panel.params.swipe) {\n panel.enableSwipe();\n }\n if (panel.resizable) {\n panel.enableResizable();\n }\n }\n destroy() {\n let panel = this;\n const app = panel.app;\n const {\n $containerEl\n } = panel;\n if (!panel.$el) {\n // Panel already destroyed\n return;\n }\n panel.emit('local::beforeDestroy panelBeforeDestroy', panel);\n panel.$el.trigger('panel:beforedestroy');\n if (panel.visibleBreakpointResizeHandler) {\n app.off('resize', panel.visibleBreakpointResizeHandler);\n }\n if (panel.collapsedBreakpointResizeHandler) {\n app.off('resize', panel.collapsedBreakpointResizeHandler);\n }\n if (panel.$el.hasClass('panel-in-breakpoint') || panel.$el.hasClass('panel-in-collapsed')) {\n const $viewEl = $(panel.getViewEl());\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs'));\n }\n panel.$el.removeClass('panel-in-breakpoint panel-in-collapsed panel-in');\n $viewEl.css({\n [`margin-${panel.side}`]: ''\n });\n panel.emit('local::breakpoint panelBreakpoint', panel);\n panel.$el.trigger('panel:breakpoint');\n }\n panel.$el.trigger('panel:destroy');\n panel.emit('local::destroy panelDestroy', panel);\n if (panel.el) {\n panel.el.f7Panel = null;\n delete panel.el.f7Panel;\n }\n deleteProps(panel);\n panel = null;\n }\n}\nexport default Panel;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Panel from './panel-class.js';\nexport default {\n name: 'panel',\n params: {\n panel: {\n opened: undefined,\n // default based on panel-in class\n side: undefined,\n // default based on panel class\n effect: undefined,\n // default based on panel class\n resizable: undefined,\n // default based on panel-resizable class\n backdrop: true,\n backdropEl: undefined,\n visibleBreakpoint: undefined,\n collapsedBreakpoint: undefined,\n swipe: false,\n // or true\n swipeNoFollow: false,\n // or true\n swipeOnlyClose: false,\n swipeActiveArea: 0,\n swipeThreshold: 0,\n closeByBackdropClick: true,\n containerEl: undefined\n }\n },\n static: {\n Panel\n },\n create() {\n const app = this;\n extend(app, {\n panel: {\n allowOpen: true,\n create(params) {\n return new Panel(app, params);\n },\n get(el) {\n if (el === void 0) {\n el = '.panel';\n }\n if (el instanceof Panel) return el;\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n const $el = $(el);\n if ($el.length === 0 || $el.length > 1) return undefined;\n return $el[0].f7Panel;\n },\n destroy(el) {\n if (el === void 0) {\n el = '.panel';\n }\n const panel = app.panel.get(el);\n if (panel && panel.destroy) return panel.destroy();\n return undefined;\n },\n open(el, animate) {\n if (el === void 0) {\n el = '.panel';\n }\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n let panel = app.panel.get(el);\n if (panel && panel.open) return panel.open(animate);\n if (!panel) {\n panel = app.panel.create({\n el\n });\n return panel.open(animate);\n }\n return undefined;\n },\n close(el, animate) {\n if (el === void 0) {\n el = '.panel-in';\n }\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n let panel = app.panel.get(el);\n if (panel && panel.open) return panel.close(animate);\n if (!panel) {\n panel = app.panel.create({\n el\n });\n return panel.close(animate);\n }\n return undefined;\n },\n toggle(el, animate) {\n if (el === void 0) {\n el = '.panel';\n }\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n let panel = app.panel.get(el);\n if (panel && panel.toggle) return panel.toggle(animate);\n if (!panel) {\n panel = app.panel.create({\n el\n });\n return panel.toggle(animate);\n }\n return undefined;\n }\n }\n });\n },\n on: {\n init() {\n const app = this;\n $('.panel-init').each(panelEl => {\n const params = Object.assign({\n el: panelEl\n }, $(panelEl).dataset() || {});\n app.panel.create(params);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.panel-init').each(panelEl => {\n const params = Object.assign({\n el: panelEl\n }, $(panelEl).dataset() || {});\n app.panel.create(params);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.panel-init').each(panelEl => {\n const panel = app.panel.get(panelEl);\n if (panel && panel.destroy) panel.destroy();\n });\n }\n },\n vnode: {\n 'panel-init': {\n insert(vnode) {\n const app = this;\n const panelEl = vnode.elm;\n const params = Object.assign({\n el: panelEl\n }, $(panelEl).dataset() || {});\n app.panel.create(params);\n },\n destroy(vnode) {\n const app = this;\n const panelEl = vnode.elm;\n const panel = app.panel.get(panelEl);\n if (panel && panel.destroy) panel.destroy();\n }\n }\n },\n clicks: {\n '.panel-open': function open(clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.panel.open(data.panel, data.animate);\n },\n '.panel-close': function close(clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.panel.close(data.panel, data.animate);\n },\n '.panel-toggle': function close(clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.panel.toggle(data.panel, data.animate);\n },\n '.panel-backdrop': function close() {\n const app = this;\n const $panelEl = $('.panel-in:not(.panel-out)');\n if (!$panelEl.length) return;\n const instance = $panelEl[0] && $panelEl[0].f7Panel;\n $panelEl.trigger('panel:backdrop-click');\n if (instance) {\n instance.emit('backdropClick', instance);\n }\n app.emit('panelBackdropClick', instance || $panelEl[0]);\n if (instance && instance.params.closeByBackdropClick === false) return;\n if (app.params.panel.closeByBackdropClick) app.panel.close();\n }\n }\n};", "/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport $ from '../../shared/dom7.js';\nconst CardExpandable = {\n open(cardEl, animate) {\n if (cardEl === void 0) {\n cardEl = '.card-expandable';\n }\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const device = getDevice();\n const document = getDocument();\n const support = getSupport();\n const $cardEl = $(cardEl).eq(0);\n if (!$cardEl || !$cardEl.length) return;\n if ($cardEl.hasClass('card-opened') || $cardEl.hasClass('card-opening') || $cardEl.hasClass('card-closing')) return;\n const $pageEl = $cardEl.parents('.page').eq(0);\n if (!$pageEl.length) return;\n if ($pageEl.find('.card-opened').length) {\n return;\n }\n let prevented;\n function prevent() {\n prevented = true;\n }\n $cardEl.trigger('card:beforeopen', {\n prevent\n });\n app.emit('cardBeforeOpen', $cardEl[0], prevent);\n if (prevented) return;\n const cardParams = Object.assign({\n animate\n }, app.params.card, $cardEl.dataset());\n const $pageContentEl = $cardEl.parents('.page-content');\n let $backdropEl;\n if ($cardEl.attr('data-backdrop-el')) {\n $backdropEl = $($cardEl.attr('data-backdrop-el'));\n }\n if (!$backdropEl && cardParams.backdrop) {\n $backdropEl = $pageContentEl.find('.card-backdrop');\n if (!$backdropEl.length) {\n $backdropEl = $('');\n $pageContentEl.append($backdropEl);\n }\n }\n let $navbarEl;\n let $toolbarEl;\n if (cardParams.hideNavbarOnOpen) {\n $navbarEl = $pageEl.children('.navbar');\n if (!$navbarEl.length) {\n if ($pageEl[0].f7Page) $navbarEl = $pageEl[0].f7Page.$navbarEl;\n }\n }\n if (cardParams.hideToolbarOnOpen) {\n $toolbarEl = $pageEl.children('.toolbar');\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n }\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.views').children('.toolbar');\n }\n }\n const currTransform = $cardEl.css('transform');\n let hasTransform;\n if (currTransform && currTransform.match(/[2-9]/)) {\n hasTransform = true;\n }\n const $cardContentEl = $cardEl.children('.card-content');\n const $cardSizeEl = $(document.createElement('div')).addClass('card-expandable-size');\n $cardEl.append($cardSizeEl);\n let cardWidth = $cardEl[0].offsetWidth;\n let cardHeight = $cardEl[0].offsetHeight;\n let pageWidth = $pageEl[0].offsetWidth;\n let pageHeight = $pageEl[0].offsetHeight;\n let maxWidth = $cardSizeEl[0].offsetWidth || pageWidth;\n let maxHeight = $cardSizeEl[0].offsetHeight || pageHeight;\n let statusbarHeight;\n if ($navbarEl && !cardParams.hideStatusbarOnOpen && maxHeight === pageHeight) {\n statusbarHeight = parseInt($navbarEl.css('--f7-safe-area-top'), 10);\n if (Number.isNaN(statusbarHeight)) statusbarHeight = 0;\n }\n if (statusbarHeight) {\n maxHeight -= statusbarHeight;\n }\n let scaleX = maxWidth / cardWidth;\n let scaleY = maxHeight / cardHeight;\n let offset = $cardEl.offset();\n let pageOffset = $pageEl.offset();\n if (statusbarHeight) {\n pageOffset.top += statusbarHeight / 2;\n }\n offset.left -= pageOffset.left;\n let cardLeftOffset;\n let cardTopOffset;\n if (hasTransform) {\n const transformValues = currTransform.replace(/matrix\\(|\\)/g, '').split(',').map(el => el.trim());\n if (transformValues && transformValues.length > 1) {\n const scale = parseFloat(transformValues[0]);\n cardLeftOffset = offset.left - cardWidth * (1 - scale) / 2;\n cardTopOffset = offset.top - pageOffset.top - cardHeight * (1 - scale) / 2;\n if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;\n } else {\n cardLeftOffset = $cardEl[0].offsetLeft;\n cardTopOffset = $cardEl[0].offsetTop - ($pageContentEl.length ? $pageContentEl[0].scrollTop : 0);\n }\n } else {\n cardLeftOffset = offset.left;\n cardTopOffset = offset.top - pageOffset.top;\n if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;\n }\n cardLeftOffset -= (pageWidth - maxWidth) / 2;\n cardTopOffset -= (pageHeight - maxHeight) / 2;\n let cardRightOffset = maxWidth - cardWidth - cardLeftOffset;\n if (app.rtl) {\n [cardLeftOffset, cardRightOffset] = [cardRightOffset, cardLeftOffset];\n }\n let cardBottomOffset = maxHeight - cardHeight - cardTopOffset;\n let translateX = (cardRightOffset - cardLeftOffset) / 2;\n let translateY = (cardBottomOffset - cardTopOffset) / 2;\n if (cardParams.hideNavbarOnOpen && $navbarEl && $navbarEl.length) {\n if ($navbarEl.closest('.navbar-hidden').length) {\n // Was hidden\n $cardEl[0].f7KeepNavbarOnClose = true;\n } else {\n delete $cardEl[0].f7KeepNavbarOnClose;\n app.navbar.hide($navbarEl, cardParams.animate, cardParams.hideStatusbarOnOpen, true);\n }\n }\n if (cardParams.hideToolbarOnOpen && $toolbarEl && $toolbarEl.length) {\n if ($toolbarEl.closest('.toolbar-hidden').length) {\n // Was hidden\n $cardEl[0].f7KeepToolbarOnClose = true;\n } else {\n delete $cardEl[0].f7KeepToolbarOnClose;\n app.toolbar.hide($toolbarEl, cardParams.animate);\n }\n }\n if ($backdropEl) {\n $backdropEl.removeClass('card-backdrop-out').addClass('card-backdrop-in');\n }\n $cardEl.removeClass('card-transitioning');\n if (cardParams.animate) {\n $cardEl.addClass('card-opening');\n }\n $cardEl.trigger('card:open');\n app.emit('cardOpen', $cardEl[0]);\n function transitionEnd() {\n $pageEl.addClass('page-with-card-opened');\n if (device.ios && $pageContentEl.length) {\n $pageContentEl.css('height', `${$pageContentEl[0].offsetHeight + 1}px`);\n setTimeout(() => {\n $pageContentEl.css('height', '');\n });\n }\n $cardEl.addClass('card-opened');\n $cardEl.removeClass('card-opening');\n $cardEl.trigger('card:opened');\n app.emit('cardOpened', $cardEl[0], $pageEl[0]);\n }\n $cardContentEl.css({\n width: `${maxWidth}px`,\n height: `${maxHeight}px`\n }).transform(`translate3d(${app.rtl ? cardLeftOffset + translateX : -cardLeftOffset - translateX}px, 0px, 0) scale(${1 / scaleX}, ${1 / scaleY})`);\n $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);\n if (cardParams.animate) {\n $cardEl.transitionEnd(() => {\n transitionEnd();\n });\n } else {\n transitionEnd();\n }\n function onResize() {\n $cardEl.removeClass('card-transitioning');\n cardWidth = $cardEl[0].offsetWidth;\n cardHeight = $cardEl[0].offsetHeight;\n pageWidth = $pageEl[0].offsetWidth;\n pageHeight = $pageEl[0].offsetHeight;\n maxWidth = $cardSizeEl[0].offsetWidth || pageWidth;\n maxHeight = $cardSizeEl[0].offsetHeight || pageHeight;\n statusbarHeight = 0;\n if ($navbarEl && !cardParams.hideStatusbarOnOpen && maxHeight === pageHeight) {\n statusbarHeight = parseInt($navbarEl.css('--f7-safe-area-top'), 10);\n if (Number.isNaN(statusbarHeight)) statusbarHeight = 0;\n }\n if (statusbarHeight) {\n maxHeight -= statusbarHeight;\n }\n scaleX = maxWidth / cardWidth;\n scaleY = maxHeight / cardHeight;\n $cardEl.transform('translate3d(0px, 0px, 0) scale(1)');\n offset = $cardEl.offset();\n pageOffset = $pageEl.offset();\n if (statusbarHeight) {\n pageOffset.top += statusbarHeight / 2;\n }\n offset.left -= pageOffset.left;\n offset.top -= pageOffset.top;\n cardLeftOffset = offset.left - (pageWidth - maxWidth) / 2;\n if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;\n cardTopOffset = offset.top - (pageHeight - maxHeight) / 2;\n cardRightOffset = maxWidth - cardWidth - cardLeftOffset;\n cardBottomOffset = maxHeight - cardHeight - cardTopOffset;\n if (app.rtl) {\n [cardLeftOffset, cardRightOffset] = [cardRightOffset, cardLeftOffset];\n }\n translateX = (cardRightOffset - cardLeftOffset) / 2;\n translateY = (cardBottomOffset - cardTopOffset) / 2;\n $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);\n $cardContentEl.css({\n width: `${maxWidth}px`,\n height: `${maxHeight}px`\n }).transform(`translate3d(${app.rtl ? cardLeftOffset + translateX : -cardLeftOffset - translateX}px, 0px, 0) scale(${1 / scaleX}, ${1 / scaleY})`);\n }\n let cardScrollTop;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchEndX;\n let touchEndY;\n let isScrolling;\n let progress;\n let isV;\n let isH;\n let $cardScrollableEl;\n function onTouchStart(e) {\n if (!$(e.target).closest($cardEl).length || !e.isTrusted) return;\n if (!$cardEl.hasClass('card-opened')) return;\n $cardScrollableEl = $cardEl.find(cardParams.scrollableEl);\n if ($cardScrollableEl[0] && $cardScrollableEl[0] !== $cardContentEl[0] && !$cardScrollableEl[0].contains(e.target)) {\n cardScrollTop = 0;\n } else {\n cardScrollTop = $cardScrollableEl.scrollTop();\n }\n isTouched = true;\n touchStartX = e.targetTouches[0].pageX;\n touchStartY = e.targetTouches[0].pageY;\n isScrolling = undefined;\n isV = false;\n isH = false;\n }\n function onTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n touchEndX = e.targetTouches[0].pageX;\n touchEndY = e.targetTouches[0].pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(touchEndY - touchStartY) > Math.abs(touchEndX - touchStartX));\n }\n if (!isH && !isV) {\n if (!isScrolling && e.targetTouches[0].clientX <= 50) {\n isH = true;\n } else {\n isV = true;\n }\n }\n if (!(isH || isV) || isV && cardScrollTop !== 0) {\n isTouched = true;\n isMoved = true;\n return;\n }\n if (!isMoved) {\n $cardEl.removeClass('card-transitioning');\n }\n isMoved = true;\n progress = isV ? Math.max((touchEndY - touchStartY) / 150, 0) : Math.max((touchEndX - touchStartX) / (cardWidth / 2), 0);\n if (progress > 0 && isV || isH) {\n if (isV && device.ios && $cardScrollableEl[0] === $cardContentEl[0]) {\n $cardScrollableEl.css('-webkit-overflow-scrolling', 'auto');\n $cardScrollableEl.scrollTop(0);\n }\n e.preventDefault();\n }\n if (progress > 1) progress **= 0.3;\n if (progress > (isV ? 1.3 : 1.1)) {\n isTouched = false;\n isMoved = false;\n app.card.close($cardEl);\n } else {\n $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX * (1 - progress * 0.2)}, ${scaleY * (1 - progress * 0.2)})`);\n }\n }\n function onTouchEnd(e) {\n if (!isTouched || !isMoved || !e.isTrusted) return;\n isTouched = false;\n isMoved = false;\n if (device.ios) {\n $cardScrollableEl.css('-webkit-overflow-scrolling', '');\n }\n if (progress >= 0.8) {\n app.card.close($cardEl);\n } else {\n $cardEl.addClass('card-transitioning').transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);\n }\n }\n $cardEl[0].detachEventHandlers = function detachEventHandlers() {\n app.off('resize', onResize);\n if (support.touch && cardParams.swipeToClose) {\n app.off('touchstart:passive', onTouchStart);\n app.off('touchmove:active', onTouchMove);\n app.off('touchend:passive', onTouchEnd);\n }\n };\n app.on('resize', onResize);\n if (support.touch && cardParams.swipeToClose) {\n app.on('touchstart:passive', onTouchStart);\n app.on('touchmove:active', onTouchMove);\n app.on('touchend:passive', onTouchEnd);\n }\n },\n close(cardEl, animate) {\n if (cardEl === void 0) {\n cardEl = '.card-expandable.card-opened';\n }\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const device = getDevice();\n const $cardEl = $(cardEl).eq(0);\n if (!$cardEl || !$cardEl.length) return;\n if (!$cardEl.hasClass('card-opened') || $cardEl.hasClass('card-opening') || $cardEl.hasClass('card-closing')) return;\n const $cardContentEl = $cardEl.children('.card-content');\n const $pageContentEl = $cardEl.parents('.page-content');\n const $pageEl = $cardEl.parents('.page').eq(0);\n if (!$pageEl.length) return;\n const cardParams = Object.assign({\n animate\n }, app.params.card, $cardEl.dataset());\n const $cardScrollableEl = $cardEl.find(cardParams.scrollableEl);\n let $navbarEl;\n let $toolbarEl;\n let $backdropEl;\n if ($cardEl.attr('data-backdrop-el')) {\n $backdropEl = $($cardEl.attr('data-backdrop-el'));\n }\n if (cardParams.backdrop) {\n $backdropEl = $cardEl.parents('.page-content').find('.card-backdrop');\n }\n if (cardParams.hideNavbarOnOpen) {\n $navbarEl = $pageEl.children('.navbar');\n if (!$navbarEl.length) {\n if ($pageEl[0].f7Page) $navbarEl = $pageEl[0].f7Page.$navbarEl;\n }\n if ($navbarEl && $navbarEl.length && !$cardEl[0].f7KeepNavbarOnClose) {\n app.navbar.show($navbarEl, cardParams.animate, true);\n }\n }\n if (cardParams.hideToolbarOnOpen) {\n $toolbarEl = $pageEl.children('.toolbar');\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n }\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.views').children('.toolbar');\n }\n if ($toolbarEl && $toolbarEl.length && !$cardEl[0].f7KeepToolbarOnClose) {\n app.toolbar.show($toolbarEl, cardParams.animate);\n }\n }\n $pageEl.removeClass('page-with-card-opened');\n if (device.ios && $pageContentEl.length) {\n $pageContentEl.css('height', `${$pageContentEl[0].offsetHeight + 1}px`);\n setTimeout(() => {\n $pageContentEl.css('height', '');\n });\n }\n if ($backdropEl && $backdropEl.length) {\n $backdropEl.removeClass('card-backdrop-in').addClass('card-backdrop-out');\n }\n $cardEl.removeClass('card-opened card-transitioning');\n if (cardParams.animate) {\n $cardEl.addClass('card-closing');\n } else {\n $cardEl.addClass('card-no-transition');\n }\n $cardEl.transform('');\n $cardEl.trigger('card:close');\n app.emit('cardClose', $cardEl[0], $pageEl[0]);\n const animateWidth = $cardEl.hasClass('card-expandable-animate-width');\n function transitionEnd() {\n if (!animateWidth) {\n $cardContentEl.css({\n width: '',\n height: ''\n });\n }\n if ($backdropEl && $backdropEl.length) {\n $backdropEl.removeClass('card-backdrop-in card-backdrop-out');\n }\n $cardEl.removeClass('card-closing card-no-transition');\n $cardEl.trigger('card:closed');\n $cardEl.find('.card-expandable-size').remove();\n app.emit('cardClosed', $cardEl[0], $pageEl[0]);\n }\n if (animateWidth) {\n $cardContentEl.css({\n width: '',\n height: ''\n });\n }\n $cardContentEl.transform('').scrollTop(0, animate ? 300 : 0);\n if ($cardScrollableEl.length && $cardScrollableEl[0] !== $cardContentEl[0]) {\n $cardScrollableEl.scrollTop(0, animate ? 300 : 0);\n }\n if (animate) {\n $cardContentEl.transitionEnd(() => {\n transitionEnd();\n });\n } else {\n transitionEnd();\n }\n if ($cardEl[0].detachEventHandlers) {\n $cardEl[0].detachEventHandlers();\n delete $cardEl[0].detachEventHandlers;\n }\n },\n toggle(cardEl, animate) {\n if (cardEl === void 0) {\n cardEl = '.card-expandable';\n }\n const app = this;\n const $cardEl = $(cardEl).eq(0);\n if (!$cardEl.length) return;\n if ($cardEl.hasClass('card-opened')) {\n app.card.close($cardEl, animate);\n } else {\n app.card.open($cardEl, animate);\n }\n }\n};\nexport default {\n name: 'card',\n params: {\n card: {\n hideNavbarOnOpen: true,\n hideStatusbarOnOpen: true,\n hideToolbarOnOpen: true,\n scrollableEl: '.card-content',\n swipeToClose: true,\n closeByBackdropClick: true,\n backdrop: true\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n card: CardExpandable\n });\n },\n on: {\n pageBeforeIn(page) {\n const app = this;\n if (app.params.card.hideNavbarOnOpen && page.navbarEl && page.$el.find('.card-opened.card-expandable').length) {\n app.navbar.hide(page.navbarEl, true, app.params.card.hideStatusbarOnOpen, true);\n }\n if (app.params.card.hideToolbarOnOpen && page.$el.find('.card-opened.card-expandable').length) {\n let $toolbarEl = page.$el.children('.toolbar');\n if (!$toolbarEl.length) {\n $toolbarEl = page.$el.parents('.view').children('.toolbar');\n }\n if (!$toolbarEl.length) {\n $toolbarEl = page.$el.parents('.views').children('.toolbar');\n }\n if ($toolbarEl && $toolbarEl.length) {\n app.toolbar.hide($toolbarEl);\n }\n }\n }\n },\n clicks: {\n '.card-close': function closeCard($clickedEl, data) {\n const app = this;\n app.card.close(data.card, data.animate);\n },\n '.card-open': function closeCard($clickedEl, data) {\n const app = this;\n app.card.open(data.card, data.animate);\n },\n '.card-expandable': function toggleExpandableCard($clickedEl, data, e) {\n const app = this;\n if ($clickedEl.hasClass('card-opened') || $clickedEl.hasClass('card-opening') || $clickedEl.hasClass('card-closing')) return;\n if ($(e.target).closest('.card-prevent-open, .card-close').length) return;\n app.card.open($clickedEl);\n },\n '.card-backdrop-in': function onBackdropClick() {\n const app = this;\n let needToClose = false;\n if (app.params.card.closeByBackdropClick) needToClose = true;\n const $openedCardEl = $('.card-opened');\n if (!$openedCardEl.length) return;\n if ($openedCardEl.attr('data-close-by-backdrop-click') === 'true') {\n needToClose = true;\n } else if ($openedCardEl.attr('data-close-by-backdrop-click') === 'false') {\n needToClose = false;\n }\n if (needToClose) app.card.close($openedCardEl);\n }\n }\n};", "export default {\n name: 'chip'\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, serializeObject } from '../../shared/utils.js';\n\n// Form Data\nconst FormData = {\n store(form, data) {\n const app = this;\n const window = getWindow();\n let formId = form;\n const $formEl = $(form);\n if ($formEl.length && $formEl.is('form') && $formEl.attr('id')) {\n formId = $formEl.attr('id');\n }\n // Store form data in app.formsData\n app.form.data[`form-${formId}`] = data;\n\n // Store form data in local storage also\n window.localStorage[`f7form-${formId}`] = JSON.stringify(data);\n },\n get(form) {\n const app = this;\n const window = getWindow();\n let formId = form;\n const $formEl = $(form);\n if ($formEl.length && $formEl.is('form') && $formEl.attr('id')) {\n formId = $formEl.attr('id');\n }\n if (window.localStorage[`f7form-${formId}`]) {\n return JSON.parse(window.localStorage[`f7form-${formId}`]);\n }\n if (app.form.data[`form-${formId}`]) {\n return app.form.data[`form-${formId}`];\n }\n return undefined;\n },\n remove(form) {\n const app = this;\n const window = getWindow();\n let formId = form;\n const $formEl = $(form);\n if ($formEl.length && $formEl.is('form') && $formEl.attr('id')) {\n formId = $formEl.attr('id');\n }\n\n // Delete form data from app.formsData\n if (app.form.data[`form-${formId}`]) {\n app.form.data[`form-${formId}`] = '';\n delete app.form.data[`form-${formId}`];\n }\n\n // Delete form data from local storage also\n if (window.localStorage[`f7form-${formId}`]) {\n window.localStorage[`f7form-${formId}`] = '';\n window.localStorage.removeItem(`f7form-${formId}`);\n }\n }\n};\n\n// Form Storage\nconst FormStorage = {\n init(formEl) {\n const app = this;\n const $formEl = $(formEl);\n const formId = $formEl.attr('id');\n if (!formId) return;\n const initialData = app.form.getFormData(formId);\n if (initialData) {\n app.form.fillFromData($formEl, initialData);\n }\n function store() {\n const data = app.form.convertToData($formEl);\n if (!data) return;\n app.form.storeFormData(formId, data);\n $formEl.trigger('form:storedata', data);\n app.emit('formStoreData', $formEl[0], data);\n }\n $formEl.on('change submit', store);\n },\n destroy(formEl) {\n const $formEl = $(formEl);\n $formEl.off('change submit');\n }\n};\n\n// Form To/From Data\nfunction formToData(formEl) {\n const app = this;\n const $formEl = $(formEl).eq(0);\n if ($formEl.length === 0) return undefined;\n\n // Form data\n const data = {};\n\n // Skip input types\n const skipTypes = ['submit', 'image', 'button', 'file'];\n const skipNames = [];\n $formEl.find('input, select, textarea').each(inputEl => {\n const $inputEl = $(inputEl);\n if ($inputEl.hasClass('ignore-store-data') || $inputEl.hasClass('no-store-data')) {\n return;\n }\n const name = $inputEl.attr('name');\n const type = $inputEl.attr('type');\n const tag = inputEl.nodeName.toLowerCase();\n if (skipTypes.indexOf(type) >= 0) return;\n if (skipNames.indexOf(name) >= 0 || !name) return;\n if (tag === 'select' && $inputEl.prop('multiple')) {\n skipNames.push(name);\n data[name] = [];\n $formEl.find(`select[name=\"${name}\"] option`).each(el => {\n if (el.selected) data[name].push(el.value);\n });\n } else {\n switch (type) {\n case 'checkbox':\n skipNames.push(name);\n data[name] = [];\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n if (el.checked) data[name].push(el.value);\n });\n break;\n case 'radio':\n skipNames.push(name);\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n if (el.checked) data[name] = el.value;\n });\n break;\n default:\n data[name] = $inputEl.val();\n break;\n }\n }\n });\n $formEl.trigger('form:todata', data);\n app.emit('formToData', $formEl[0], data);\n return data;\n}\nfunction formFromData(formEl, formData) {\n const app = this;\n const $formEl = $(formEl).eq(0);\n if (!$formEl.length) return;\n let data = formData;\n const formId = $formEl.attr('id');\n if (!data && formId) {\n data = app.form.getFormData(formId);\n }\n if (!data) return;\n\n // Skip input types\n const skipTypes = ['submit', 'image', 'button', 'file'];\n const skipNames = [];\n $formEl.find('input, select, textarea').each(inputEl => {\n const $inputEl = $(inputEl);\n if ($inputEl.hasClass('ignore-store-data') || $inputEl.hasClass('no-store-data')) {\n return;\n }\n const name = $inputEl.attr('name');\n const type = $inputEl.attr('type');\n const tag = inputEl.nodeName.toLowerCase();\n if (typeof data[name] === 'undefined' || data[name] === null) return;\n if (skipTypes.indexOf(type) >= 0) return;\n if (skipNames.indexOf(name) >= 0 || !name) return;\n if (tag === 'select' && $inputEl.prop('multiple')) {\n skipNames.push(name);\n $formEl.find(`select[name=\"${name}\"] option`).each(el => {\n const selectEl = el;\n if (data[name].indexOf(el.value) >= 0) selectEl.selected = true;else selectEl.selected = false;\n });\n } else {\n switch (type) {\n case 'checkbox':\n skipNames.push(name);\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n const checkboxEl = el;\n if (data[name].indexOf(el.value) >= 0) checkboxEl.checked = true;else checkboxEl.checked = false;\n });\n break;\n case 'radio':\n skipNames.push(name);\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n const radioEl = el;\n if (data[name] === el.value) radioEl.checked = true;else radioEl.checked = false;\n });\n break;\n default:\n $inputEl.val(data[name]);\n break;\n }\n }\n if (tag === 'select' || tag === 'input' || tag === 'textarea') {\n $inputEl.trigger('change', 'fromdata');\n }\n });\n $formEl.trigger('form:fromdata', data);\n app.emit('formFromData', $formEl[0], data);\n}\nfunction initAjaxForm() {\n const app = this;\n const window = getWindow();\n const document = getDocument();\n function onSubmitChange(e, fromData) {\n const $formEl = $(this);\n if (e.type === 'change' && !$formEl.hasClass('form-ajax-submit-onchange')) return;\n if (e.type === 'submit') e.preventDefault();\n if (e.type === 'change' && fromData === 'fromdata') return;\n const method = ($formEl.attr('method') || 'GET').toUpperCase();\n const contentType = $formEl.attr('enctype') || $formEl.prop('enctype');\n let url = $formEl.attr('action');\n if (!url) return;\n let data;\n if (method === 'POST') {\n if (contentType === 'application/x-www-form-urlencoded' || contentType === 'application/json') {\n data = app.form.convertToData($formEl[0]);\n if (contentType === 'application/json') {\n data = JSON.stringify(data);\n }\n } else {\n data = new window.FormData($formEl[0]);\n }\n } else {\n data = serializeObject(app.form.convertToData($formEl[0]));\n if (url.includes('?')) {\n url += `&${data}`;\n } else {\n url += `?${data}`;\n }\n }\n $formEl.trigger('formajax:beforesend', {\n data\n });\n app.emit('formAjaxBeforeSend', $formEl[0], data);\n fetch(url, {\n method,\n headers: {\n 'Content-Type': contentType || 'application/x-www-form-urlencoded'\n },\n ...(method === 'POST' || method === 'PUT' ? {\n body: data\n } : {})\n }).then(response => {\n $formEl.trigger('formajax:complete', {\n data,\n response\n });\n app.emit('formAjaxComplete', $formEl[0], data, response);\n $formEl.trigger('formajax:success', {\n data,\n response\n });\n app.emit('formAjaxSuccess', $formEl[0], data, response);\n }).catch(error => {\n $formEl.trigger('formajax:error', {\n data,\n error\n });\n app.emit('formAjaxError', $formEl[0], data, error);\n });\n }\n $(document).on('submit change', 'form.form-ajax-submit, form.form-ajax-submit-onchange', onSubmitChange);\n}\nexport default {\n name: 'form',\n create() {\n const app = this;\n extend(app, {\n form: {\n data: {},\n storeFormData: FormData.store.bind(app),\n getFormData: FormData.get.bind(app),\n removeFormData: FormData.remove.bind(app),\n convertToData: formToData.bind(app),\n fillFromData: formFromData.bind(app),\n storage: {\n init: FormStorage.init.bind(app),\n destroy: FormStorage.destroy.bind(app)\n }\n }\n });\n },\n on: {\n init() {\n const app = this;\n initAjaxForm.call(app);\n },\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.form-store-data').each(formEl => {\n app.form.storage.destroy(formEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.form-store-data').each(formEl => {\n app.form.storage.init(formEl);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.form-store-data').each(formEl => {\n app.form.storage.destroy(formEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.form-store-data').each(formEl => {\n app.form.storage.init(formEl);\n });\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nconst Input = {\n ignoreTypes: ['checkbox', 'button', 'submit', 'range', 'radio', 'image'],\n createTextareaResizableShadow() {\n const document = getDocument();\n const $shadowEl = $(document.createElement('textarea'));\n $shadowEl.addClass('textarea-resizable-shadow');\n $shadowEl.prop({\n disabled: true,\n readonly: true\n });\n Input.textareaResizableShadow = $shadowEl;\n },\n textareaResizableShadow: undefined,\n resizeTextarea(textareaEl) {\n const app = this;\n const window = getWindow();\n const $textareaEl = $(textareaEl);\n if (!Input.textareaResizableShadow) {\n Input.createTextareaResizableShadow();\n }\n const $shadowEl = Input.textareaResizableShadow;\n if (!$textareaEl.length) return;\n if (!$textareaEl.hasClass('resizable')) return;\n if (Input.textareaResizableShadow.parents().length === 0) {\n app.$el.append($shadowEl);\n }\n const styles = window.getComputedStyle($textareaEl[0]);\n 'padding-top padding-bottom padding-left padding-right margin-left margin-right margin-top margin-bottom width font-size font-family font-style font-weight line-height font-variant text-transform letter-spacing border box-sizing display'.split(' ').forEach(style => {\n let styleValue = styles[style];\n if ('font-size line-height letter-spacing width'.split(' ').indexOf(style) >= 0) {\n styleValue = styleValue.replace(',', '.');\n }\n $shadowEl.css(style, styleValue);\n });\n const currentHeight = $textareaEl[0].clientHeight;\n $shadowEl.val('');\n const initialHeight = $shadowEl[0].scrollHeight;\n $shadowEl.val($textareaEl.val());\n $shadowEl.css('height', 0);\n const scrollHeight = $shadowEl[0].scrollHeight;\n if (currentHeight !== scrollHeight) {\n if (scrollHeight > initialHeight) {\n $textareaEl.css('height', `${scrollHeight}px`);\n } else if (scrollHeight < currentHeight) {\n $textareaEl.css('height', '');\n }\n if (scrollHeight > initialHeight || scrollHeight < currentHeight) {\n $textareaEl.trigger('textarea:resize', {\n initialHeight,\n currentHeight,\n scrollHeight\n });\n app.emit('textareaResize', {\n initialHeight,\n currentHeight,\n scrollHeight\n });\n }\n }\n },\n validate(inputEl) {\n const $inputEl = $(inputEl);\n if (!$inputEl.length) return true;\n const $itemInputEl = $inputEl.parents('.item-input');\n const $inputWrapEl = $inputEl.parents('.input');\n function unsetReadonly() {\n if ($inputEl[0].f7ValidateReadonly) {\n $inputEl[0].readOnly = false;\n }\n }\n function setReadonly() {\n if ($inputEl[0].f7ValidateReadonly) {\n $inputEl[0].readOnly = true;\n }\n }\n unsetReadonly();\n const validity = $inputEl[0].validity;\n const validationMessage = $inputEl.dataset().errorMessage || $inputEl[0].validationMessage || '';\n if (!validity) {\n setReadonly();\n return true;\n }\n if (!validity.valid) {\n let $errorEl = $inputEl.nextAll('.item-input-error-message, .input-error-message');\n if (validationMessage) {\n if ($errorEl.length === 0) {\n $errorEl = $(``);\n $errorEl.insertAfter($inputEl);\n }\n $errorEl.text(validationMessage);\n }\n if ($errorEl.length > 0) {\n $itemInputEl.addClass('item-input-with-error-message');\n $inputWrapEl.addClass('input-with-error-message');\n }\n $itemInputEl.addClass('item-input-invalid');\n $inputWrapEl.addClass('input-invalid');\n $inputEl.addClass('input-invalid');\n setReadonly();\n return false;\n }\n $itemInputEl.removeClass('item-input-invalid item-input-with-error-message');\n $inputWrapEl.removeClass('input-invalid input-with-error-message');\n $inputEl.removeClass('input-invalid');\n setReadonly();\n return true;\n },\n validateInputs(el) {\n const app = this;\n const validates = $(el).find('input, textarea, select').map(inputEl => app.input.validate(inputEl));\n return validates.indexOf(false) < 0;\n },\n focus(inputEl) {\n const $inputEl = $(inputEl);\n const type = $inputEl.attr('type');\n if (Input.ignoreTypes.indexOf(type) >= 0) return;\n $inputEl.parents('.item-input').addClass('item-input-focused');\n $inputEl.parents('.input').addClass('input-focused');\n $inputEl.addClass('input-focused');\n },\n blur(inputEl) {\n const $inputEl = $(inputEl);\n $inputEl.parents('.item-input').removeClass('item-input-focused');\n $inputEl.parents('.input').removeClass('input-focused');\n $inputEl.removeClass('input-focused');\n },\n checkEmptyState(inputEl) {\n const app = this;\n let $inputEl = $(inputEl);\n if (!$inputEl.is('input, select, textarea, .item-input [contenteditable]')) {\n $inputEl = $inputEl.find('input, select, textarea, .item-input [contenteditable]').eq(0);\n }\n if (!$inputEl.length) return;\n const isContentEditable = $inputEl[0].hasAttribute('contenteditable');\n let value;\n if (isContentEditable) {\n if ($inputEl.find('.text-editor-placeholder').length) value = '';else value = $inputEl.html();\n } else {\n value = $inputEl.val();\n }\n const $itemInputEl = $inputEl.parents('.item-input');\n const $inputWrapEl = $inputEl.parents('.input');\n if (value && typeof value === 'string' && value.trim() !== '' || Array.isArray(value) && value.length > 0) {\n $itemInputEl.addClass('item-input-with-value');\n $inputWrapEl.addClass('input-with-value');\n $inputEl.addClass('input-with-value');\n $inputEl.trigger('input:notempty');\n app.emit('inputNotEmpty', $inputEl[0]);\n } else {\n $itemInputEl.removeClass('item-input-with-value');\n $inputWrapEl.removeClass('input-with-value');\n $inputEl.removeClass('input-with-value');\n $inputEl.trigger('input:empty');\n app.emit('inputEmpty', $inputEl[0]);\n }\n },\n scrollIntoView(inputEl, duration, centered, force) {\n if (duration === void 0) {\n duration = 0;\n }\n const $inputEl = $(inputEl);\n const $scrollableEl = $inputEl.parents('.page-content, .panel, .card-expandable .card-content').eq(0);\n if (!$scrollableEl.length) {\n return false;\n }\n const contentHeight = $scrollableEl[0].offsetHeight;\n const contentScrollTop = $scrollableEl[0].scrollTop;\n const contentPaddingTop = parseInt($scrollableEl.css('padding-top'), 10);\n const contentPaddingBottom = parseInt($scrollableEl.css('padding-bottom'), 10);\n const contentOffsetTop = $scrollableEl.offset().top - contentScrollTop;\n const inputOffsetTop = $inputEl.offset().top - contentOffsetTop;\n const inputHeight = $inputEl[0].offsetHeight;\n const min = inputOffsetTop + contentScrollTop - contentPaddingTop;\n const max = inputOffsetTop + contentScrollTop - contentHeight + contentPaddingBottom + inputHeight;\n const centeredPosition = min + (max - min) / 2;\n if (contentScrollTop > min) {\n $scrollableEl.scrollTop(centered ? centeredPosition : min, duration);\n return true;\n }\n if (contentScrollTop < max) {\n $scrollableEl.scrollTop(centered ? centeredPosition : max, duration);\n return true;\n }\n if (force) {\n $scrollableEl.scrollTop(centered ? centeredPosition : max, duration);\n }\n return false;\n },\n init() {\n const app = this;\n const device = getDevice();\n const window = getWindow();\n const document = getDocument();\n Input.createTextareaResizableShadow();\n function onFocus() {\n const inputEl = this;\n if (app.params.input.scrollIntoViewOnFocus) {\n if (device.android) {\n $(window).once('resize', () => {\n if (document && document.activeElement === inputEl) {\n app.input.scrollIntoView(inputEl, app.params.input.scrollIntoViewDuration, app.params.input.scrollIntoViewCentered, app.params.input.scrollIntoViewAlways);\n }\n });\n } else {\n app.input.scrollIntoView(inputEl, app.params.input.scrollIntoViewDuration, app.params.input.scrollIntoViewCentered, app.params.input.scrollIntoViewAlways);\n }\n }\n app.input.focus(inputEl);\n }\n function onBlur() {\n const $inputEl = $(this);\n const tag = $inputEl[0].nodeName.toLowerCase();\n app.input.blur($inputEl);\n if ($inputEl.dataset().validate || $inputEl.attr('validate') !== null || $inputEl.attr('data-validate-on-blur') !== null) {\n app.input.validate($inputEl);\n }\n // Resize textarea\n if (tag === 'textarea' && $inputEl.hasClass('resizable')) {\n if (Input.textareaResizableShadow) Input.textareaResizableShadow.remove();\n }\n }\n function onChange() {\n const $inputEl = $(this);\n const type = $inputEl.attr('type');\n const tag = $inputEl[0].nodeName.toLowerCase();\n const isContentEditable = $inputEl[0].hasAttribute('contenteditable');\n if (Input.ignoreTypes.indexOf(type) >= 0) return;\n\n // Check Empty State\n app.input.checkEmptyState($inputEl);\n if (isContentEditable) return;\n\n // Check validation\n if ($inputEl.attr('data-validate-on-blur') === null && ($inputEl.dataset().validate || $inputEl.attr('validate') !== null)) {\n app.input.validate($inputEl);\n }\n\n // Resize textarea\n if (tag === 'textarea' && $inputEl.hasClass('resizable')) {\n app.input.resizeTextarea($inputEl);\n }\n }\n function onInvalid(e) {\n const $inputEl = $(this);\n if ($inputEl.attr('data-validate-on-blur') === null && ($inputEl.dataset().validate || $inputEl.attr('validate') !== null)) {\n e.preventDefault();\n app.input.validate($inputEl);\n }\n }\n function clearInput() {\n const $clicked = $(this);\n const $inputEl = $clicked.siblings('input, textarea').eq(0);\n const previousValue = $inputEl.val();\n $inputEl.val('').trigger('input change').focus().trigger('input:clear', previousValue);\n app.emit('inputClear', previousValue);\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n $(document).on('click', '.input-clear-button', clearInput);\n $(document).on('mousedown', '.input-clear-button', preventDefault);\n $(document).on('change input', 'input, textarea, select, .item-input [contenteditable]', onChange, true);\n $(document).on('focus', 'input, textarea, select, .item-input [contenteditable]', onFocus, true);\n $(document).on('blur', 'input, textarea, select, .item-input [contenteditable]', onBlur, true);\n $(document).on('invalid', 'input, textarea, select', onInvalid, true);\n }\n};\nexport default {\n name: 'input',\n params: {\n input: {\n scrollIntoViewOnFocus: undefined,\n scrollIntoViewCentered: false,\n scrollIntoViewDuration: 0,\n scrollIntoViewAlways: false\n }\n },\n create() {\n const app = this;\n if (typeof app.params.input.scrollIntoViewOnFocus === 'undefined') {\n app.params.input.scrollIntoViewOnFocus = getDevice().android;\n }\n bindMethods(app, {\n input: Input\n });\n },\n on: {\n init() {\n const app = this;\n app.input.init();\n },\n tabMounted(tabEl) {\n const app = this;\n const $tabEl = $(tabEl);\n $tabEl.find('.item-input, .input').each(itemInputEl => {\n const $itemInputEl = $(itemInputEl);\n $itemInputEl.find('input, select, textarea, [contenteditable]').each(inputEl => {\n const $inputEl = $(inputEl);\n if (Input.ignoreTypes.indexOf($inputEl.attr('type')) >= 0) return;\n app.input.checkEmptyState($inputEl);\n });\n });\n $tabEl.find('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n },\n pageInit(page) {\n const app = this;\n const $pageEl = page.$el;\n $pageEl.find('.item-input, .input').each(itemInputEl => {\n const $itemInputEl = $(itemInputEl);\n $itemInputEl.find('input, select, textarea, [contenteditable]').each(inputEl => {\n const $inputEl = $(inputEl);\n if (Input.ignoreTypes.indexOf($inputEl.attr('type')) >= 0) return;\n app.input.checkEmptyState($inputEl);\n });\n });\n $pageEl.find('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n },\n 'panelBreakpoint panelCollapsedBreakpoint panelResize panelOpen panelSwipeOpen resize viewMasterDetailBreakpoint': function onPanelOpen(instance) {\n const app = this;\n if (instance && instance.$el) {\n instance.$el.find('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n } else {\n $('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n }\n }\n }\n};", "export default {\n name: 'checkbox'\n};", "export default {\n name: 'radio'\n};", "import $ from '../../shared/dom7.js';\nimport { extend, now, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nclass Toggle extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const toggle = this;\n const support = getSupport();\n const defaults = {};\n\n // Extend defaults with modules params\n toggle.useModulesParams(defaults);\n toggle.params = extend(defaults, params);\n const el = toggle.params.el;\n if (!el) return toggle;\n const $el = $(el);\n if ($el.length === 0) return toggle;\n if ($el[0].f7Toggle) return $el[0].f7Toggle;\n const $inputEl = $el.children('input[type=\"checkbox\"]');\n extend(toggle, {\n app,\n $el,\n el: $el[0],\n $inputEl,\n inputEl: $inputEl[0],\n disabled: $el.hasClass('disabled') || $inputEl.hasClass('disabled') || $inputEl.attr('disabled') || $inputEl[0].disabled\n });\n Object.defineProperty(toggle, 'checked', {\n enumerable: true,\n configurable: true,\n set(checked) {\n if (!toggle || typeof toggle.$inputEl === 'undefined') return;\n if (toggle.checked === checked) return;\n $inputEl[0].checked = checked;\n toggle.$inputEl.trigger('change');\n },\n get() {\n return $inputEl[0].checked;\n }\n });\n $el[0].f7Toggle = toggle;\n let isTouched;\n const touchesStart = {};\n let isScrolling;\n let touchesDiff;\n let toggleWidth;\n let touchStartTime;\n let touchStartChecked;\n function handleTouchStart(e) {\n if (isTouched || toggle.disabled) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchesDiff = 0;\n isTouched = true;\n isScrolling = undefined;\n touchStartTime = now();\n touchStartChecked = toggle.checked;\n toggleWidth = $el[0].offsetWidth;\n nextTick(() => {\n if (isTouched) {\n $el.addClass('toggle-active-state');\n }\n });\n }\n function handleTouchMove(e) {\n if (!isTouched || toggle.disabled) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n const inverter = app.rtl ? -1 : 1;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n touchesDiff = pageX - touchesStart.x;\n let changed;\n if (touchesDiff * inverter < 0 && Math.abs(touchesDiff) > toggleWidth / 3 && touchStartChecked) {\n changed = true;\n }\n if (touchesDiff * inverter > 0 && Math.abs(touchesDiff) > toggleWidth / 3 && !touchStartChecked) {\n changed = true;\n }\n if (changed) {\n touchesStart.x = pageX;\n toggle.checked = !touchStartChecked;\n touchStartChecked = !touchStartChecked;\n }\n }\n function handleTouchEnd() {\n if (!isTouched || toggle.disabled) {\n if (isScrolling) $el.removeClass('toggle-active-state');\n isTouched = false;\n return;\n }\n const inverter = app.rtl ? -1 : 1;\n isTouched = false;\n $el.removeClass('toggle-active-state');\n let changed;\n if (now() - touchStartTime < 300) {\n if (touchesDiff * inverter < 0 && touchStartChecked) {\n changed = true;\n }\n if (touchesDiff * inverter > 0 && !touchStartChecked) {\n changed = true;\n }\n if (changed) {\n toggle.checked = !touchStartChecked;\n }\n }\n }\n function handleInputChange() {\n toggle.$el.trigger('toggle:change');\n toggle.emit('local::change toggleChange', toggle);\n }\n toggle.attachEvents = function attachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n toggle.$inputEl.on('change', handleInputChange);\n };\n toggle.detachEvents = function detachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n toggle.$inputEl.off('change', handleInputChange);\n };\n\n // Install Modules\n toggle.useModules();\n\n // Init\n toggle.init();\n }\n toggle() {\n const toggle = this;\n toggle.checked = !toggle.checked;\n }\n init() {\n const toggle = this;\n toggle.attachEvents();\n }\n destroy() {\n let toggle = this;\n toggle.$el.trigger('toggle:beforedestroy');\n toggle.emit('local::beforeDestroy toggleBeforeDestroy', toggle);\n delete toggle.$el[0].f7Toggle;\n toggle.detachEvents();\n deleteProps(toggle);\n toggle = null;\n }\n}\nexport default Toggle;", "import $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport Toggle from './toggle-class.js';\nexport default {\n name: 'toggle',\n create() {\n const app = this;\n app.toggle = ConstructorMethods({\n defaultSelector: '.toggle',\n constructor: Toggle,\n app,\n domProp: 'f7Toggle'\n });\n },\n static: {\n Toggle\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.toggle-init').each(toggleEl => app.toggle.create({\n el: toggleEl\n }));\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.toggle-init').each(toggleEl => {\n if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.toggle-init').each(toggleEl => app.toggle.create({\n el: toggleEl\n }));\n },\n pageBeforeRemove(page) {\n page.$el.find('.toggle-init').each(toggleEl => {\n if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();\n });\n }\n },\n vnode: {\n 'toggle-init': {\n insert(vnode) {\n const app = this;\n const toggleEl = vnode.elm;\n app.toggle.create({\n el: toggleEl\n });\n },\n destroy(vnode) {\n const toggleEl = vnode.elm;\n if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nclass Range extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const range = this;\n const support = getSupport();\n const defaults = {\n el: null,\n inputEl: null,\n dual: false,\n step: 1,\n label: false,\n min: 0,\n max: 100,\n value: 0,\n draggableBar: true,\n vertical: false,\n verticalReversed: false,\n formatLabel: null,\n scale: false,\n scaleSteps: 5,\n scaleSubSteps: 0,\n formatScaleLabel: null,\n limitKnobPosition: app.theme === 'ios'\n };\n\n // Extend defaults with modules params\n range.useModulesParams(defaults);\n range.params = extend(defaults, params);\n const el = range.params.el;\n if (!el) return range;\n const $el = $(el);\n if ($el.length === 0) return range;\n if ($el[0].f7Range) return $el[0].f7Range;\n const dataset = $el.dataset();\n 'step min max value scaleSteps scaleSubSteps'.split(' ').forEach(paramName => {\n if (typeof params[paramName] === 'undefined' && typeof dataset[paramName] !== 'undefined') {\n range.params[paramName] = parseFloat(dataset[paramName]);\n }\n });\n 'dual label vertical verticalReversed scale'.split(' ').forEach(paramName => {\n if (typeof params[paramName] === 'undefined' && typeof dataset[paramName] !== 'undefined') {\n range.params[paramName] = dataset[paramName];\n }\n });\n if (!range.params.value) {\n if (typeof dataset.value !== 'undefined') range.params.value = dataset.value;\n if (typeof dataset.valueLeft !== 'undefined' && typeof dataset.valueRight !== 'undefined') {\n range.params.value = [parseFloat(dataset.valueLeft), parseFloat(dataset.valueRight)];\n }\n }\n let $inputEl;\n if (!range.params.dual) {\n if (range.params.inputEl) {\n $inputEl = $(range.params.inputEl);\n } else if ($el.find('input[type=\"range\"]').length) {\n $inputEl = $el.find('input[type=\"range\"]').eq(0);\n }\n }\n const {\n dual,\n step,\n label,\n min,\n max,\n value,\n vertical,\n verticalReversed,\n scale,\n scaleSteps,\n scaleSubSteps,\n limitKnobPosition\n } = range.params;\n extend(range, {\n app,\n $el,\n el: $el[0],\n $inputEl,\n inputEl: $inputEl ? $inputEl[0] : undefined,\n dual,\n step,\n label,\n min,\n max,\n value,\n previousValue: value,\n vertical,\n verticalReversed,\n scale,\n scaleSteps,\n scaleSubSteps,\n limitKnobPosition\n });\n if ($inputEl) {\n 'step min max'.split(' ').forEach(paramName => {\n if (!params[paramName] && $inputEl.attr(paramName)) {\n range.params[paramName] = parseFloat($inputEl.attr(paramName));\n range[paramName] = parseFloat($inputEl.attr(paramName));\n }\n });\n if (typeof $inputEl.val() !== 'undefined') {\n range.params.value = parseFloat($inputEl.val());\n range.value = parseFloat($inputEl.val());\n }\n }\n\n // Dual\n if (range.dual) {\n $el.addClass('range-slider-dual');\n }\n if (range.label) {\n $el.addClass('range-slider-label');\n }\n\n // Vertical\n if (range.vertical) {\n $el.addClass('range-slider-vertical');\n if (range.verticalReversed) {\n $el.addClass('range-slider-vertical-reversed');\n }\n } else {\n $el.addClass('range-slider-horizontal');\n }\n\n // Check for layout\n const $barEl = $('');\n const $barActiveEl = $('');\n $barEl.append($barActiveEl);\n\n // Create Knobs\n // prettier-ignore\n const knobHTML = `\n \n
\n ${range.label ? '
' : ''}\n
\n `;\n const knobs = [$(knobHTML)];\n if (range.dual) {\n knobs.push($(knobHTML));\n }\n $el.append($barEl);\n knobs.forEach($knobEl => {\n $el.append($knobEl);\n });\n\n // Labels\n const labels = [];\n if (range.label) {\n labels.push(knobs[0].find('.range-knob-label'));\n if (range.dual) {\n labels.push(knobs[1].find('.range-knob-label'));\n }\n }\n\n // Scale\n let $scaleEl;\n if (range.scale && range.scaleSteps >= 1) {\n $scaleEl = $(`\n \n ${range.renderScale()}\n
\n `);\n $el.append($scaleEl);\n }\n extend(range, {\n knobs,\n labels,\n $barEl,\n $barActiveEl,\n $scaleEl\n });\n $el[0].f7Range = range;\n\n // Touch Events\n let isTouched;\n const touchesStart = {};\n let isScrolling;\n let rangeOffset;\n let rangeOffsetLeft;\n let rangeOffsetTop;\n let $touchedKnobEl;\n let dualValueIndex;\n let valueChangedByTouch;\n let targetTouchIdentifier;\n function onTouchChange() {\n valueChangedByTouch = true;\n }\n function handleTouchStart(e) {\n if (isTouched) return;\n if (!range.params.draggableBar) {\n if ($(e.target).closest('.range-knob').length === 0) {\n return;\n }\n }\n valueChangedByTouch = false;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n if (e.type === 'touchstart') {\n targetTouchIdentifier = e.targetTouches[0].identifier;\n }\n isTouched = true;\n isScrolling = undefined;\n rangeOffset = $el.offset();\n rangeOffsetLeft = rangeOffset.left;\n rangeOffsetTop = rangeOffset.top;\n let progress;\n if (range.vertical) {\n progress = (touchesStart.y - rangeOffsetTop) / range.rangeHeight;\n if (!range.verticalReversed) progress = 1 - progress;\n } else if (range.app.rtl) {\n progress = (rangeOffsetLeft + range.rangeWidth - touchesStart.x) / range.rangeWidth;\n } else {\n progress = (touchesStart.x - rangeOffsetLeft) / range.rangeWidth;\n }\n let newValue = progress * (range.max - range.min) + range.min;\n if (range.dual) {\n if (Math.abs(range.value[0] - newValue) < Math.abs(range.value[1] - newValue)) {\n dualValueIndex = 0;\n $touchedKnobEl = range.knobs[0];\n newValue = [newValue, range.value[1]];\n } else {\n dualValueIndex = 1;\n $touchedKnobEl = range.knobs[1];\n newValue = [range.value[0], newValue];\n }\n } else {\n $touchedKnobEl = range.knobs[0];\n newValue = progress * (range.max - range.min) + range.min;\n }\n nextTick(() => {\n if (isTouched) $touchedKnobEl.addClass('range-knob-active-state');\n }, 70);\n range.on('change', onTouchChange);\n range.setValue(newValue, true);\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n let pageX;\n let pageY;\n if (e.type === 'touchmove') {\n for (let i = 0; i < e.targetTouches.length; i += 1) {\n if (e.targetTouches[i].identifier === targetTouchIdentifier) {\n pageX = e.targetTouches[i].pageX;\n pageY = e.targetTouches[i].pageY;\n }\n }\n } else {\n pageX = e.pageX;\n pageY = e.pageY;\n }\n if (typeof pageX === 'undefined' && typeof pageY === 'undefined') return;\n if (typeof isScrolling === 'undefined' && !range.vertical) {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n let progress;\n if (range.vertical) {\n progress = (pageY - rangeOffsetTop) / range.rangeHeight;\n if (!range.verticalReversed) progress = 1 - progress;\n } else if (range.app.rtl) {\n progress = (rangeOffsetLeft + range.rangeWidth - pageX) / range.rangeWidth;\n } else {\n progress = (pageX - rangeOffsetLeft) / range.rangeWidth;\n }\n let newValue = progress * (range.max - range.min) + range.min;\n if (range.dual) {\n let leftValue;\n let rightValue;\n if (dualValueIndex === 0) {\n leftValue = newValue;\n rightValue = range.value[1];\n if (leftValue > rightValue) {\n rightValue = leftValue;\n }\n } else {\n leftValue = range.value[0];\n rightValue = newValue;\n if (rightValue < leftValue) {\n leftValue = rightValue;\n }\n }\n newValue = [leftValue, rightValue];\n }\n range.setValue(newValue, true);\n }\n function handleTouchEnd(e) {\n if (e.type === 'touchend') {\n let touchEnded;\n for (let i = 0; i < e.changedTouches.length; i += 1) {\n if (e.changedTouches[i].identifier === targetTouchIdentifier) touchEnded = true;\n }\n if (!touchEnded) return;\n }\n if (!isTouched) {\n if (isScrolling) $touchedKnobEl.removeClass('range-knob-active-state');\n isTouched = false;\n return;\n }\n range.off('change', onTouchChange);\n isTouched = false;\n $touchedKnobEl.removeClass('range-knob-active-state');\n if (valueChangedByTouch && range.$inputEl && !range.dual) {\n range.$inputEl.trigger('change');\n }\n valueChangedByTouch = false;\n if (typeof range.previousValue !== 'undefined') {\n if (range.dual && (range.previousValue[0] !== range.value[0] || range.previousValue[1] !== range.value[1]) || !range.dual && range.previousValue !== range.value) {\n range.$el.trigger('range:changed', range.value);\n range.emit('local::changed rangeChanged', range, range.value);\n }\n }\n }\n function handleResize() {\n range.calcSize();\n range.layout();\n }\n let parentModals;\n let parentPanel;\n let parentPage;\n range.attachEvents = function attachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n range.$el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('tabShow', handleResize);\n app.on('resize', handleResize);\n parentModals = range.$el.parents('.sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast');\n parentModals.on('modal:open', handleResize);\n parentPanel = range.$el.parents('.panel');\n parentPanel.on('panel:open panel:resize', handleResize);\n parentPage = range.$el.parents('.page').eq(0);\n parentPage.on('page:reinit', handleResize);\n };\n range.detachEvents = function detachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n range.$el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('tabShow', handleResize);\n app.off('resize', handleResize);\n if (parentModals) {\n parentModals.off('modal:open', handleResize);\n }\n if (parentPanel) {\n parentPanel.off('panel:open panel:resize', handleResize);\n }\n if (parentPage) {\n parentPage.off('page:reinit', handleResize);\n }\n parentModals = null;\n parentPanel = null;\n parentPage = null;\n };\n\n // Install Modules\n range.useModules();\n\n // Init\n range.init();\n return range;\n }\n calcSize() {\n const range = this;\n if (range.vertical) {\n const height = range.$el.outerHeight();\n if (height === 0) return;\n range.rangeHeight = height;\n range.knobHeight = range.knobs[0].outerHeight();\n } else {\n const width = range.$el.outerWidth();\n if (width === 0) return;\n range.rangeWidth = width;\n range.knobWidth = range.knobs[0].outerWidth();\n }\n }\n layout() {\n const range = this;\n const {\n app,\n knobWidth,\n knobHeight,\n rangeWidth,\n rangeHeight,\n min,\n max,\n knobs,\n $barActiveEl,\n value,\n label,\n labels,\n vertical,\n verticalReversed,\n limitKnobPosition\n } = range;\n const knobSize = vertical ? knobHeight : knobWidth;\n const rangeSize = vertical ? rangeHeight : rangeWidth;\n // eslint-disable-next-line\n const positionProperty = vertical ? verticalReversed ? 'top' : 'bottom' : app.rtl ? 'right' : 'left';\n if (range.dual) {\n const progress = [(value[0] - min) / (max - min), (value[1] - min) / (max - min)];\n $barActiveEl.css({\n [positionProperty]: `${progress[0] * 100}%`,\n [vertical ? 'height' : 'width']: `${(progress[1] - progress[0]) * 100}%`\n });\n knobs.forEach(($knobEl, knobIndex) => {\n let startPos = rangeSize * progress[knobIndex];\n if (limitKnobPosition) {\n const realStartPos = rangeSize * progress[knobIndex] - knobSize / 2;\n if (realStartPos < 0) startPos = knobSize / 2;\n if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;\n }\n $knobEl.css(positionProperty, `${startPos}px`);\n if (label) labels[knobIndex].text(range.formatLabel(value[knobIndex], labels[knobIndex][0]));\n });\n } else {\n const progress = (value - min) / (max - min);\n $barActiveEl.css(vertical ? 'height' : 'width', `${progress * 100}%`);\n let startPos = rangeSize * progress;\n if (limitKnobPosition) {\n const realStartPos = rangeSize * progress - knobSize / 2;\n if (realStartPos < 0) startPos = knobSize / 2;\n if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;\n }\n knobs[0].css(positionProperty, `${startPos}px`);\n if (label) labels[0].text(range.formatLabel(value, labels[0][0]));\n }\n if (range.dual && value.indexOf(min) >= 0 || !range.dual && value === min) {\n range.$el.addClass('range-slider-min');\n } else {\n range.$el.removeClass('range-slider-min');\n }\n if (range.dual && value.indexOf(max) >= 0 || !range.dual && value === max) {\n range.$el.addClass('range-slider-max');\n } else {\n range.$el.removeClass('range-slider-max');\n }\n }\n setValue(newValue, byTouchMove) {\n const range = this;\n const {\n step,\n min,\n max\n } = range;\n let valueChanged;\n let oldValue;\n if (range.dual) {\n oldValue = [range.value[0], range.value[1]];\n let newValues = newValue;\n if (!Array.isArray(newValues)) newValues = [newValue, newValue];\n if (newValue[0] > newValue[1]) {\n newValues = [newValues[0], newValues[0]];\n }\n newValues = newValues.map(value => Math.max(Math.min(Math.round(value / step) * step, max), min));\n if (newValues[0] === range.value[0] && newValues[1] === range.value[1]) {\n return range;\n }\n newValues.forEach((value, valueIndex) => {\n range.value[valueIndex] = value;\n });\n valueChanged = oldValue[0] !== newValues[0] || oldValue[1] !== newValues[1];\n range.layout();\n } else {\n oldValue = range.value;\n const value = Math.max(Math.min(Math.round(newValue / step) * step, max), min);\n range.value = value;\n range.layout();\n valueChanged = oldValue !== value;\n }\n if (valueChanged) {\n range.previousValue = oldValue;\n }\n // Events\n if (!valueChanged) return range;\n range.$el.trigger('range:change', range.value);\n if (range.$inputEl && !range.dual) {\n range.$inputEl.val(range.value);\n if (!byTouchMove) {\n range.$inputEl.trigger('input change');\n } else {\n range.$inputEl.trigger('input');\n }\n }\n if (!byTouchMove) {\n range.$el.trigger('range:changed', range.value);\n range.emit('local::changed rangeChanged', range, range.value);\n }\n range.emit('local::change rangeChange', range, range.value);\n return range;\n }\n getValue() {\n return this.value;\n }\n formatLabel(value, labelEl) {\n const range = this;\n if (range.params.formatLabel) return range.params.formatLabel.call(range, value, labelEl);\n return value;\n }\n formatScaleLabel(value) {\n const range = this;\n if (range.params.formatScaleLabel) return range.params.formatScaleLabel.call(range, value);\n return value;\n }\n renderScale() {\n const range = this;\n const {\n app,\n verticalReversed,\n vertical\n } = range;\n\n // eslint-disable-next-line\n const positionProperty = vertical ? verticalReversed ? 'top' : 'bottom' : app.rtl ? 'right' : 'left';\n let html = '';\n Array.from({\n length: range.scaleSteps + 1\n }).forEach((scaleEl, index) => {\n const scaleStepValue = (range.max - range.min) / range.scaleSteps;\n const scaleValue = range.min + scaleStepValue * index;\n const progress = (scaleValue - range.min) / (range.max - range.min);\n html += `${range.formatScaleLabel(scaleValue)}
`;\n if (range.scaleSubSteps && range.scaleSubSteps > 1 && index < range.scaleSteps) {\n Array.from({\n length: range.scaleSubSteps - 1\n }).forEach((subStepEl, subIndex) => {\n const subStep = scaleStepValue / range.scaleSubSteps;\n const scaleSubValue = scaleValue + subStep * (subIndex + 1);\n const subProgress = (scaleSubValue - range.min) / (range.max - range.min);\n html += ``;\n });\n }\n });\n return html;\n }\n updateScale() {\n const range = this;\n if (!range.scale || range.scaleSteps < 1) {\n if (range.$scaleEl) range.$scaleEl.remove();\n delete range.$scaleEl;\n return;\n }\n if (!range.$scaleEl) {\n range.$scaleEl = $('');\n range.$el.append(range.$scaleEl);\n }\n range.$scaleEl.html(range.renderScale());\n }\n init() {\n const range = this;\n range.calcSize();\n range.layout();\n range.attachEvents();\n return range;\n }\n destroy() {\n let range = this;\n range.$el.trigger('range:beforedestroy');\n range.emit('local::beforeDestroy rangeBeforeDestroy', range);\n delete range.$el[0].f7Range;\n range.detachEvents();\n deleteProps(range);\n range = null;\n }\n}\nexport default Range;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Range from './range-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'range',\n create() {\n const app = this;\n app.range = extend(ConstructorMethods({\n defaultSelector: '.range-slider',\n constructor: Range,\n app,\n domProp: 'f7Range'\n }), {\n getValue(el) {\n if (el === void 0) {\n el = '.range-slider';\n }\n const range = app.range.get(el);\n if (range) return range.getValue();\n return undefined;\n },\n setValue(el, value) {\n if (el === void 0) {\n el = '.range-slider';\n }\n const range = app.range.get(el);\n if (range) return range.setValue(value);\n return undefined;\n }\n });\n },\n static: {\n Range\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.range-slider-init').each(rangeEl => new Range(app, {\n el: rangeEl\n }));\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.range-slider-init').each(rangeEl => {\n if (rangeEl.f7Range) rangeEl.f7Range.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.range-slider-init').each(rangeEl => new Range(app, {\n el: rangeEl\n }));\n },\n pageBeforeRemove(page) {\n page.$el.find('.range-slider-init').each(rangeEl => {\n if (rangeEl.f7Range) rangeEl.f7Range.destroy();\n });\n }\n },\n vnode: {\n 'range-slider-init': {\n insert(vnode) {\n const rangeEl = vnode.elm;\n const app = this;\n app.range.create({\n el: rangeEl\n });\n },\n destroy(vnode) {\n const rangeEl = vnode.elm;\n if (rangeEl.f7Range) rangeEl.f7Range.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nclass Stepper extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const stepper = this;\n const defaults = {\n el: null,\n inputEl: null,\n valueEl: null,\n value: 0,\n formatValue: null,\n step: 1,\n min: 0,\n max: 100,\n watchInput: true,\n autorepeat: false,\n autorepeatDynamic: false,\n wraps: false,\n manualInputMode: false,\n decimalPoint: 4,\n buttonsEndInputMode: true\n };\n\n // Extend defaults with modules params\n stepper.useModulesParams(defaults);\n stepper.params = extend(defaults, params);\n if (stepper.params.value < stepper.params.min) {\n stepper.params.value = stepper.params.min;\n }\n if (stepper.params.value > stepper.params.max) {\n stepper.params.value = stepper.params.max;\n }\n const el = stepper.params.el;\n if (!el) return stepper;\n const $el = $(el);\n if ($el.length === 0) return stepper;\n if ($el[0].f7Stepper) return $el[0].f7Stepper;\n let $inputEl;\n if (stepper.params.inputEl) {\n $inputEl = $(stepper.params.inputEl);\n } else if ($el.find('.stepper-input-wrap').find('input, textarea').length) {\n $inputEl = $el.find('.stepper-input-wrap').find('input, textarea').eq(0);\n }\n if ($inputEl && $inputEl.length) {\n 'step min max'.split(' ').forEach(paramName => {\n if (!params[paramName] && $inputEl.attr(paramName)) {\n stepper.params[paramName] = parseFloat($inputEl.attr(paramName));\n }\n });\n const decimalPoint = parseInt(stepper.params.decimalPoint, 10);\n if (Number.isNaN(decimalPoint)) {\n stepper.params.decimalPoint = 0;\n } else {\n stepper.params.decimalPoint = decimalPoint;\n }\n const inputValue = parseFloat($inputEl.val());\n if (typeof params.value === 'undefined' && !Number.isNaN(inputValue) && (inputValue || inputValue === 0)) {\n stepper.params.value = inputValue;\n }\n }\n let $valueEl;\n if (stepper.params.valueEl) {\n $valueEl = $(stepper.params.valueEl);\n } else if ($el.find('.stepper-value').length) {\n $valueEl = $el.find('.stepper-value').eq(0);\n }\n const $buttonPlusEl = $el.find('.stepper-button-plus');\n const $buttonMinusEl = $el.find('.stepper-button-minus');\n const {\n step,\n min,\n max,\n value,\n decimalPoint\n } = stepper.params;\n extend(stepper, {\n app,\n $el,\n el: $el[0],\n $buttonPlusEl,\n buttonPlusEl: $buttonPlusEl[0],\n $buttonMinusEl,\n buttonMinusEl: $buttonMinusEl[0],\n $inputEl,\n inputEl: $inputEl ? $inputEl[0] : undefined,\n $valueEl,\n valueEl: $valueEl ? $valueEl[0] : undefined,\n step,\n min,\n max,\n value,\n decimalPoint,\n typeModeChanged: false\n });\n $el[0].f7Stepper = stepper;\n\n // Handle Events\n const touchesStart = {};\n let isTouched;\n let isScrolling;\n let preventButtonClick;\n let intervalId;\n let timeoutId;\n let autorepeatAction = null;\n let autorepeatInAction = false;\n let manualInput = false;\n function dynamicRepeat(current, progressions, startsIn, progressionStep, repeatEvery, action) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n if (current === 1) {\n preventButtonClick = true;\n autorepeatInAction = true;\n }\n clearInterval(intervalId);\n action();\n intervalId = setInterval(() => {\n action();\n }, repeatEvery);\n if (current < progressions) {\n dynamicRepeat(current + 1, progressions, startsIn, progressionStep, repeatEvery / 2, action);\n }\n }, current === 1 ? startsIn : progressionStep);\n }\n function onTouchStart(e) {\n if (isTouched) return;\n if (manualInput) {\n return;\n }\n if ($(e.target).closest($buttonPlusEl).length) {\n autorepeatAction = 'increment';\n } else if ($(e.target).closest($buttonMinusEl).length) {\n autorepeatAction = 'decrement';\n }\n if (!autorepeatAction) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isTouched = true;\n isScrolling = undefined;\n const progressions = stepper.params.autorepeatDynamic ? 4 : 1;\n dynamicRepeat(1, progressions, 500, 1000, 300, () => {\n stepper[autorepeatAction]();\n });\n }\n function onTouchMove(e) {\n if (!isTouched) return;\n if (manualInput) {\n return;\n }\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined' && !autorepeatInAction) {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n const distance = ((pageX - touchesStart.x) ** 2 + (pageY - touchesStart.y) ** 2) ** 0.5;\n if (isScrolling || distance > 20) {\n isTouched = false;\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n }\n }\n function onTouchEnd() {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n autorepeatAction = null;\n autorepeatInAction = false;\n isTouched = false;\n }\n function onMinusClick() {\n if (manualInput) {\n if (stepper.params.buttonsEndInputMode) {\n manualInput = false;\n stepper.endTypeMode(true);\n }\n return;\n }\n if (preventButtonClick) {\n preventButtonClick = false;\n return;\n }\n stepper.decrement(true);\n }\n function onPlusClick() {\n if (manualInput) {\n if (stepper.params.buttonsEndInputMode) {\n manualInput = false;\n stepper.endTypeMode(true);\n }\n return;\n }\n if (preventButtonClick) {\n preventButtonClick = false;\n return;\n }\n stepper.increment(true);\n }\n function onInputClick(e) {\n if (!e.target.readOnly && stepper.params.manualInputMode) {\n manualInput = true;\n if (typeof e.target.selectionStart === 'number') {\n e.target.selectionStart = e.target.value.length;\n e.target.selectionEnd = e.target.value.length;\n }\n }\n }\n function onInputKey(e) {\n if (e.keyCode === 13 || e.which === 13) {\n e.preventDefault();\n manualInput = false;\n stepper.endTypeMode();\n }\n }\n function onInputBlur() {\n manualInput = false;\n stepper.endTypeMode(true);\n }\n function onInput(e) {\n if (manualInput) {\n stepper.typeValue(e.target.value);\n return;\n }\n if (e.detail && e.detail.sentByF7Stepper) return;\n stepper.setValue(e.target.value, true);\n }\n stepper.attachEvents = function attachEvents() {\n $buttonMinusEl.on('click', onMinusClick);\n $buttonPlusEl.on('click', onPlusClick);\n if (stepper.params.watchInput && $inputEl && $inputEl.length) {\n $inputEl.on('input', onInput);\n $inputEl.on('click', onInputClick);\n $inputEl.on('blur', onInputBlur);\n $inputEl.on('keyup', onInputKey);\n }\n if (stepper.params.autorepeat) {\n app.on('touchstart:passive', onTouchStart);\n app.on('touchmove:active', onTouchMove);\n app.on('touchend:passive', onTouchEnd);\n }\n };\n stepper.detachEvents = function detachEvents() {\n $buttonMinusEl.off('click', onMinusClick);\n $buttonPlusEl.off('click', onPlusClick);\n if (stepper.params.watchInput && $inputEl && $inputEl.length) {\n $inputEl.off('input', onInput);\n $inputEl.off('click', onInputClick);\n $inputEl.off('blur', onInputBlur);\n $inputEl.off('keyup', onInputKey);\n }\n };\n\n // Install Modules\n stepper.useModules();\n\n // Init\n stepper.init();\n return stepper;\n }\n minus() {\n return this.decrement();\n }\n plus() {\n return this.increment();\n }\n decrement() {\n const stepper = this;\n return stepper.setValue(stepper.value - stepper.step, false, true);\n }\n increment() {\n const stepper = this;\n return stepper.setValue(stepper.value + stepper.step, false, true);\n }\n setValue(newValue, forceUpdate, withWraps) {\n const stepper = this;\n const {\n step,\n min,\n max\n } = stepper;\n const oldValue = stepper.value;\n let value = Math.round(newValue / step) * step;\n if (stepper.params.wraps && withWraps) {\n if (value > max) value = min;\n if (value < min) value = max;\n } else {\n value = Math.max(Math.min(value, max), min);\n }\n if (Number.isNaN(value)) {\n value = oldValue;\n }\n stepper.value = value;\n const valueChanged = oldValue !== value;\n\n // Events\n if (!valueChanged && !forceUpdate) return stepper;\n stepper.$el.trigger('stepper:change', stepper.value);\n const formattedValue = stepper.formatValue(stepper.value);\n if (stepper.$inputEl && stepper.$inputEl.length) {\n stepper.$inputEl.val(formattedValue);\n stepper.$inputEl.trigger('input change', {\n sentByF7Stepper: true\n });\n }\n if (stepper.$valueEl && stepper.$valueEl.length) {\n stepper.$valueEl.html(formattedValue);\n }\n stepper.emit('local::change stepperChange', stepper, stepper.value);\n return stepper;\n }\n endTypeMode(noBlur) {\n const stepper = this;\n const {\n min,\n max\n } = stepper;\n let value = parseFloat(stepper.value);\n if (Number.isNaN(value)) value = 0;\n value = Math.max(Math.min(value, max), min);\n stepper.value = value;\n if (!stepper.typeModeChanged) {\n if (stepper.$inputEl && stepper.$inputEl.length && !noBlur) {\n stepper.$inputEl.blur();\n }\n return stepper;\n }\n stepper.typeModeChanged = false;\n stepper.$el.trigger('stepper:change', stepper.value);\n const formattedValue = stepper.formatValue(stepper.value);\n if (stepper.$inputEl && stepper.$inputEl.length) {\n stepper.$inputEl.val(formattedValue);\n stepper.$inputEl.trigger('input change', {\n sentByF7Stepper: true\n });\n if (!noBlur) stepper.$inputEl.blur();\n }\n if (stepper.$valueEl && stepper.$valueEl.length) {\n stepper.$valueEl.html(formattedValue);\n }\n stepper.emit('local::change stepperChange', stepper, stepper.value);\n return stepper;\n }\n typeValue(value) {\n const stepper = this;\n stepper.typeModeChanged = true;\n let inputTxt = String(value);\n if (inputTxt.length === 1 && inputTxt === '-') return stepper;\n if (inputTxt.lastIndexOf('.') + 1 === inputTxt.length || inputTxt.lastIndexOf(',') + 1 === inputTxt.length) {\n if (inputTxt.lastIndexOf('.') !== inputTxt.indexOf('.') || inputTxt.lastIndexOf(',') !== inputTxt.indexOf(',')) {\n inputTxt = inputTxt.slice(0, -1);\n stepper.value = inputTxt;\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n } else {\n let newValue = parseFloat(inputTxt.replace(',', '.'));\n if (newValue === 0) {\n stepper.value = inputTxt.replace(',', '.');\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n if (Number.isNaN(newValue)) {\n stepper.value = 0;\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n const powVal = 10 ** stepper.params.decimalPoint;\n newValue = Math.round(newValue * powVal).toFixed(stepper.params.decimalPoint + 1) / powVal;\n stepper.value = parseFloat(String(newValue).replace(',', '.'));\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n stepper.value = inputTxt;\n stepper.$inputEl.val(inputTxt);\n return stepper;\n }\n getValue() {\n return this.value;\n }\n formatValue(value) {\n const stepper = this;\n if (!stepper.params.formatValue) return value;\n return stepper.params.formatValue.call(stepper, value);\n }\n init() {\n const stepper = this;\n stepper.attachEvents();\n if (stepper.$valueEl && stepper.$valueEl.length) {\n const formattedValue = stepper.formatValue(stepper.value);\n stepper.$valueEl.html(formattedValue);\n }\n return stepper;\n }\n destroy() {\n let stepper = this;\n stepper.$el.trigger('stepper:beforedestroy');\n stepper.emit('local::beforeDestroy stepperBeforeDestroy', stepper);\n delete stepper.$el[0].f7Stepper;\n stepper.detachEvents();\n deleteProps(stepper);\n stepper = null;\n }\n}\nexport default Stepper;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Stepper from './stepper-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'stepper',\n create() {\n const app = this;\n app.stepper = extend(ConstructorMethods({\n defaultSelector: '.stepper',\n constructor: Stepper,\n app,\n domProp: 'f7Stepper'\n }), {\n getValue(el) {\n if (el === void 0) {\n el = '.stepper';\n }\n const stepper = app.stepper.get(el);\n if (stepper) return stepper.getValue();\n return undefined;\n },\n setValue(el, value) {\n if (el === void 0) {\n el = '.stepper';\n }\n const stepper = app.stepper.get(el);\n if (stepper) return stepper.setValue(value);\n return undefined;\n }\n });\n },\n static: {\n Stepper\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.stepper-init').each(stepperEl => {\n const dataset = $(stepperEl).dataset();\n app.stepper.create(extend({\n el: stepperEl\n }, dataset || {}));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.stepper-init').each(stepperEl => {\n if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.stepper-init').each(stepperEl => {\n const dataset = $(stepperEl).dataset();\n app.stepper.create(extend({\n el: stepperEl\n }, dataset || {}));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.stepper-init').each(stepperEl => {\n if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();\n });\n }\n },\n vnode: {\n 'stepper-init': {\n insert(vnode) {\n const app = this;\n const stepperEl = vnode.elm;\n const dataset = $(stepperEl).dataset();\n app.stepper.create(extend({\n el: stepperEl\n }, dataset || {}));\n },\n destroy(vnode) {\n const stepperEl = vnode.elm;\n if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();\n }\n }\n }\n};", "/* eslint no-control-regex: \"off\" */\nconst defaultDiacriticsRemovalap = [{\n base: 'A',\n letters: '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F'\n}, {\n base: 'AA',\n letters: '\\uA732'\n}, {\n base: 'AE',\n letters: '\\u00C6\\u01FC\\u01E2'\n}, {\n base: 'AO',\n letters: '\\uA734'\n}, {\n base: 'AU',\n letters: '\\uA736'\n}, {\n base: 'AV',\n letters: '\\uA738\\uA73A'\n}, {\n base: 'AY',\n letters: '\\uA73C'\n}, {\n base: 'B',\n letters: '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181'\n}, {\n base: 'C',\n letters: '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E'\n}, {\n base: 'D',\n letters: '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779'\n}, {\n base: 'DZ',\n letters: '\\u01F1\\u01C4'\n}, {\n base: 'Dz',\n letters: '\\u01F2\\u01C5'\n}, {\n base: 'E',\n letters: '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E'\n}, {\n base: 'F',\n letters: '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B'\n}, {\n base: 'G',\n letters: '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E'\n}, {\n base: 'H',\n letters: '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D'\n}, {\n base: 'I',\n letters: '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197'\n}, {\n base: 'J',\n letters: '\\u004A\\u24BF\\uFF2A\\u0134\\u0248'\n}, {\n base: 'K',\n letters: '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2'\n}, {\n base: 'L',\n letters: '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780'\n}, {\n base: 'LJ',\n letters: '\\u01C7'\n}, {\n base: 'Lj',\n letters: '\\u01C8'\n}, {\n base: 'M',\n letters: '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C'\n}, {\n base: 'N',\n letters: '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4'\n}, {\n base: 'NJ',\n letters: '\\u01CA'\n}, {\n base: 'Nj',\n letters: '\\u01CB'\n}, {\n base: 'O',\n letters: '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C'\n}, {\n base: 'OI',\n letters: '\\u01A2'\n}, {\n base: 'OO',\n letters: '\\uA74E'\n}, {\n base: 'OU',\n letters: '\\u0222'\n}, {\n base: 'OE',\n letters: '\\u008C\\u0152'\n}, {\n base: 'oe',\n letters: '\\u009C\\u0153'\n}, {\n base: 'P',\n letters: '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754'\n}, {\n base: 'Q',\n letters: '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A'\n}, {\n base: 'R',\n letters: '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782'\n}, {\n base: 'S',\n letters: '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784'\n}, {\n base: 'T',\n letters: '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786'\n}, {\n base: 'TZ',\n letters: '\\uA728'\n}, {\n base: 'U',\n letters: '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244'\n}, {\n base: 'V',\n letters: '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245'\n}, {\n base: 'VY',\n letters: '\\uA760'\n}, {\n base: 'W',\n letters: '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72'\n}, {\n base: 'X',\n letters: '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C'\n}, {\n base: 'Y',\n letters: '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE'\n}, {\n base: 'Z',\n letters: '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762'\n}, {\n base: 'a',\n letters: '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250'\n}, {\n base: 'aa',\n letters: '\\uA733'\n}, {\n base: 'ae',\n letters: '\\u00E6\\u01FD\\u01E3'\n}, {\n base: 'ao',\n letters: '\\uA735'\n}, {\n base: 'au',\n letters: '\\uA737'\n}, {\n base: 'av',\n letters: '\\uA739\\uA73B'\n}, {\n base: 'ay',\n letters: '\\uA73D'\n}, {\n base: 'b',\n letters: '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253'\n}, {\n base: 'c',\n letters: '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184'\n}, {\n base: 'd',\n letters: '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A'\n}, {\n base: 'dz',\n letters: '\\u01F3\\u01C6'\n}, {\n base: 'e',\n letters: '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD'\n}, {\n base: 'f',\n letters: '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C'\n}, {\n base: 'g',\n letters: '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F'\n}, {\n base: 'h',\n letters: '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265'\n}, {\n base: 'hv',\n letters: '\\u0195'\n}, {\n base: 'i',\n letters: '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131'\n}, {\n base: 'j',\n letters: '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249'\n}, {\n base: 'k',\n letters: '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3'\n}, {\n base: 'l',\n letters: '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747'\n}, {\n base: 'lj',\n letters: '\\u01C9'\n}, {\n base: 'm',\n letters: '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F'\n}, {\n base: 'n',\n letters: '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5'\n}, {\n base: 'nj',\n letters: '\\u01CC'\n}, {\n base: 'o',\n letters: '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275'\n}, {\n base: 'oi',\n letters: '\\u01A3'\n}, {\n base: 'ou',\n letters: '\\u0223'\n}, {\n base: 'oo',\n letters: '\\uA74F'\n}, {\n base: 'p',\n letters: '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755'\n}, {\n base: 'q',\n letters: '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759'\n}, {\n base: 'r',\n letters: '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783'\n}, {\n base: 's',\n letters: '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B'\n}, {\n base: 't',\n letters: '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787'\n}, {\n base: 'tz',\n letters: '\\uA729'\n}, {\n base: 'u',\n letters: '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289'\n}, {\n base: 'v',\n letters: '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C'\n}, {\n base: 'vy',\n letters: '\\uA761'\n}, {\n base: 'w',\n letters: '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73'\n}, {\n base: 'x',\n letters: '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D'\n}, {\n base: 'y',\n letters: '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF'\n}, {\n base: 'z',\n letters: '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763'\n}];\nconst diacriticsMap = {};\nfor (let i = 0; i < defaultDiacriticsRemovalap.length; i += 1) {\n const letters = defaultDiacriticsRemovalap[i].letters;\n for (let j = 0; j < letters.length; j += 1) {\n diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;\n }\n}\nfunction removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007E]/g, a => diacriticsMap[a] || a);\n}\nexport default removeDiacritics;", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps, id, nextTick } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport removeDiacritics from '../searchbar/remove-diacritics.js';\n\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass SmartSelect extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const ss = this;\n const defaults = extend({\n on: {}\n }, app.params.smartSelect);\n\n // Extend defaults with modules params\n ss.useModulesParams(defaults);\n ss.params = extend({}, defaults, params);\n ss.app = app;\n const $el = $(ss.params.el).eq(0);\n if ($el.length === 0) return ss;\n if ($el[0].f7SmartSelect) return $el[0].f7SmartSelect;\n const $selectEl = $el.find('select').eq(0);\n if ($selectEl.length === 0) return ss;\n let $valueEl;\n if (ss.params.setValueText) {\n $valueEl = $(ss.params.valueEl);\n if ($valueEl.length === 0) {\n $valueEl = $el.find('.item-after');\n }\n if ($valueEl.length === 0) {\n $valueEl = $('');\n $valueEl.insertAfter($el.find('.item-title'));\n }\n }\n\n // Url\n let url = params.url;\n if (!url) {\n if ($el.attr('href') && $el.attr('href') !== '#') url = $el.attr('href');else if ($selectEl.attr('name')) url = `${$selectEl.attr('name').toLowerCase()}-select/`;\n }\n if (!url) url = ss.params.url;\n const multiple = $selectEl[0].multiple;\n const inputType = multiple ? 'checkbox' : 'radio';\n const selectId = id();\n extend(ss, {\n $el,\n el: $el[0],\n $selectEl,\n selectEl: $selectEl[0],\n $valueEl,\n valueEl: $valueEl && $valueEl[0],\n url,\n multiple,\n inputType,\n id: selectId,\n inputName: `${inputType}-${selectId}`,\n selectName: $selectEl.attr('name'),\n maxLength: $selectEl.attr('maxlength') || params.maxLength\n });\n $el[0].f7SmartSelect = ss;\n\n // Events\n function onClick() {\n ss.open();\n }\n function onChange() {\n const value = ss.$selectEl.val();\n ss.$el.trigger('smartselect:change', value);\n ss.emit('local::change smartSelectChange', ss, value);\n if (ss.vl) {\n ss.vl.clearCache();\n }\n ss.setValueText();\n }\n ss.attachEvents = function attachEvents() {\n $el.on('click', onClick);\n $el.on('change', 'select', onChange);\n };\n ss.detachEvents = function detachEvents() {\n $el.off('click', onClick);\n $el.off('change', 'select', onChange);\n };\n function handleInputChange() {\n let optionEl;\n let text;\n const inputEl = this;\n const value = inputEl.value;\n let optionText = [];\n let displayAs;\n if (inputEl.type === 'checkbox') {\n for (let i = 0; i < ss.selectEl.options.length; i += 1) {\n optionEl = ss.selectEl.options[i];\n if (optionEl.value === value) {\n optionEl.selected = inputEl.checked;\n }\n if (optionEl.selected) {\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-value-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText.push(text.trim());\n }\n }\n if (ss.maxLength) {\n ss.checkMaxLength();\n }\n } else {\n optionEl = ss.$selectEl.find(`option[value=\"${value}\"]`)[0];\n if (!optionEl) {\n optionEl = ss.$selectEl.find('option').filter(optEl => optEl.value === value)[0];\n }\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText = [text];\n ss.selectEl.value = value;\n }\n ss.$selectEl.trigger('change');\n if (ss.params.setValueText) {\n ss.formatValueTextContent(optionText);\n }\n if (ss.params.closeOnSelect && ss.inputType === 'radio') {\n ss.close();\n }\n }\n ss.attachInputsEvents = function attachInputsEvents() {\n ss.$containerEl.on('change', 'input[type=\"checkbox\"], input[type=\"radio\"]', handleInputChange);\n };\n ss.detachInputsEvents = function detachInputsEvents() {\n ss.$containerEl.off('change', 'input[type=\"checkbox\"], input[type=\"radio\"]', handleInputChange);\n };\n\n // Install Modules\n ss.useModules();\n\n // Init\n ss.init();\n return ss;\n }\n setValue(value) {\n const ss = this;\n let newValue = value;\n let optionText = [];\n let optionEl;\n let displayAs;\n let text;\n if (ss.multiple) {\n if (!Array.isArray(newValue)) newValue = [newValue];\n for (let i = 0; i < ss.selectEl.options.length; i += 1) {\n optionEl = ss.selectEl.options[i];\n if (newValue.indexOf(optionEl.value) >= 0) {\n optionEl.selected = true;\n } else {\n optionEl.selected = false;\n }\n if (optionEl.selected) {\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-value-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText.push(text.trim());\n }\n }\n } else {\n optionEl = ss.$selectEl.find(`option[value=\"${newValue}\"]`)[0];\n if (optionEl) {\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText = [text];\n }\n ss.selectEl.value = newValue;\n }\n if (ss.params.setValueText) {\n ss.formatValueTextContent(optionText);\n }\n ss.$selectEl.trigger('change');\n return ss;\n }\n unsetValue() {\n const ss = this;\n if (ss.params.setValueText) {\n ss.formatValueTextContent([]);\n }\n ss.$selectEl.find('option').each(optionEl => {\n optionEl.selected = false;\n optionEl.checked = false;\n });\n ss.$selectEl[0].value = null;\n if (ss.$containerEl) {\n ss.$containerEl.find(`input[name=\"${ss.inputName}\"][type=\"checkbox\"], input[name=\"${ss.inputName}\"][type=\"radio\"]`).prop('checked', false);\n }\n ss.$selectEl.trigger('change');\n }\n getValue() {\n const ss = this;\n return ss.$selectEl.val();\n }\n get view() {\n const {\n params,\n $el\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n }\n if (!view) {\n view = $el.parents('.view').length && $el.parents('.view')[0].f7View;\n }\n if (!view && params.openIn === 'page') {\n throw Error('Smart Select requires initialized View');\n }\n return view;\n }\n checkMaxLength() {\n const ss = this;\n const $containerEl = ss.$containerEl;\n if (ss.selectEl.selectedOptions.length >= ss.maxLength) {\n $containerEl.find('input[type=\"checkbox\"]').each(inputEl => {\n if (!inputEl.checked) {\n $(inputEl).parents('li').addClass('disabled');\n } else {\n $(inputEl).parents('li').removeClass('disabled');\n }\n });\n } else {\n $containerEl.find('.disabled').removeClass('disabled');\n }\n }\n formatValueTextContent(values) {\n const ss = this;\n const valueFormatted = ss.formatValueText(values);\n if (valueFormatted.includes('<') && valueFormatted.includes('>')) {\n ss.$valueEl.html(valueFormatted);\n } else {\n ss.$valueEl.text(valueFormatted);\n }\n }\n formatValueText(values) {\n const ss = this;\n let textValue;\n if (ss.params.formatValueText) {\n textValue = ss.params.formatValueText.call(ss, values, ss);\n } else {\n textValue = values.join(', ');\n }\n return textValue;\n }\n setValueText(value) {\n const ss = this;\n let valueArray = [];\n if (typeof value !== 'undefined') {\n if (Array.isArray(value)) {\n valueArray = value;\n } else {\n valueArray = [value];\n }\n } else {\n ss.$selectEl.find('option').each(optionEl => {\n const $optionEl = $(optionEl);\n if (optionEl.selected) {\n const displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $optionEl.data('display-value-as');\n if (displayAs && typeof displayAs !== 'undefined') {\n valueArray.push(displayAs);\n } else {\n valueArray.push(optionEl.textContent.trim());\n }\n }\n });\n }\n if (ss.params.setValueText) {\n ss.formatValueTextContent(valueArray);\n }\n }\n getItemsData() {\n const ss = this;\n const theme = ss.app.theme;\n const items = [];\n let previousGroupEl;\n ss.$selectEl.find('option').each(optionEl => {\n const $optionEl = $(optionEl);\n const optionData = $optionEl.dataset();\n const optionImage = optionData.optionImage || ss.params.optionImage;\n const optionIcon = optionData.optionIcon || ss.params.optionIcon;\n const optionIconIos = theme === 'ios' && (optionData.optionIconIos || ss.params.optionIconIos);\n const optionIconMd = theme === 'md' && (optionData.optionIconMd || ss.params.optionIconMd);\n const optionInputIconPosition = optionData.inputIconPosition || ss.params.inputIconPosition || '';\n const optionHasMedia = optionImage || optionIcon || optionIconIos || optionIconMd;\n const optionColor = optionData.optionColor;\n let optionClassName = optionData.optionClass || '';\n if ($optionEl[0].disabled) optionClassName += ' disabled';\n const optionGroupEl = $optionEl.parent('optgroup')[0];\n const optionGroupLabel = optionGroupEl && optionGroupEl.label;\n let optionIsLabel = false;\n if (optionGroupEl && optionGroupEl !== previousGroupEl) {\n optionIsLabel = true;\n previousGroupEl = optionGroupEl;\n items.push({\n groupLabel: optionGroupLabel,\n isLabel: optionIsLabel\n });\n }\n items.push({\n value: $optionEl[0].value,\n text: $optionEl[0].textContent.trim(),\n selected: $optionEl[0].selected,\n groupEl: optionGroupEl,\n groupLabel: optionGroupLabel,\n image: optionImage,\n icon: optionIcon,\n iconIos: optionIconIos,\n iconMd: optionIconMd,\n inputIconPosition: optionInputIconPosition,\n color: optionColor,\n className: optionClassName,\n disabled: $optionEl[0].disabled,\n id: ss.id,\n hasMedia: optionHasMedia,\n checkbox: ss.inputType === 'checkbox',\n radio: ss.inputType === 'radio',\n inputName: ss.inputName,\n inputType: ss.inputType\n });\n });\n ss.items = items;\n return items;\n }\n renderSearchbar() {\n const ss = this;\n if (ss.params.renderSearchbar) return ss.params.renderSearchbar.call(ss);\n return $jsx(\"form\", {\n class: \"searchbar\"\n }, $jsx(\"div\", {\n class: \"searchbar-inner\"\n }, $jsx(\"div\", {\n class: \"searchbar-input-wrap\"\n }, $jsx(\"input\", {\n type: \"search\",\n spellcheck: ss.params.searchbarSpellcheck || 'false',\n placeholder: ss.params.searchbarPlaceholder\n }), $jsx(\"i\", {\n class: \"searchbar-icon\"\n }), $jsx(\"span\", {\n class: \"input-clear-button\"\n })), ss.params.searchbarDisableButton && $jsx(\"span\", {\n class: \"searchbar-disable-button\"\n }, ss.params.searchbarDisableText)));\n }\n renderItem(item, index) {\n const ss = this;\n if (ss.params.renderItem) return ss.params.renderItem.call(ss, item, index);\n function getIconContent(iconValue) {\n if (iconValue === void 0) {\n iconValue = '';\n }\n if (iconValue.indexOf(':') >= 0) {\n return iconValue.split(':')[1];\n }\n return '';\n }\n function getIconClass(iconValue) {\n if (iconValue === void 0) {\n iconValue = '';\n }\n if (iconValue.indexOf(':') >= 0) {\n let className = iconValue.split(':')[0];\n if (className === 'f7') className = 'f7-icons';\n if (className === 'material') className = 'material-icons';\n return className;\n }\n return iconValue;\n }\n let itemHtml;\n if (item.isLabel) {\n itemHtml = `- ${item.groupLabel}
`;\n } else {\n let selected = item.selected;\n let disabled;\n if (ss.params.virtualList) {\n const ssValue = ss.getValue();\n selected = ss.multiple ? ssValue.indexOf(item.value) >= 0 : ssValue === item.value;\n if (ss.multiple) {\n disabled = ss.multiple && !selected && ssValue.length === parseInt(ss.maxLength, 10);\n }\n }\n const {\n icon,\n iconIos,\n iconMd\n } = item;\n const hasIcon = icon || iconIos || iconMd;\n const iconContent = getIconContent(icon || iconIos || iconMd || '');\n const iconClass = getIconClass(icon || iconIos || iconMd || '');\n itemHtml = $jsx(\"li\", {\n class: `${item.className || ''}${disabled ? ' disabled' : ''}`\n }, $jsx(\"label\", {\n class: `item-${item.inputType} ${item.inputIconPosition ? `item-${item.inputType}-icon-${item.inputIconPosition}` : ''} item-content`\n }, $jsx(\"input\", {\n type: item.inputType,\n name: item.inputName,\n value: item.value,\n _checked: selected\n }), $jsx(\"i\", {\n class: `icon icon-${item.inputType}`\n }), item.hasMedia && $jsx(\"div\", {\n class: \"item-media\"\n }, hasIcon && $jsx(\"i\", {\n class: `icon ${iconClass}`\n }, iconContent), item.image && $jsx(\"img\", {\n src: item.image\n })), $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: `item-title${item.color ? ` text-color-${item.color}` : ''}`\n }, item.text))));\n }\n return itemHtml;\n }\n renderItems() {\n const ss = this;\n if (ss.params.renderItems) return ss.params.renderItems.call(ss, ss.items);\n const itemsHtml = `\n ${ss.items.map((item, index) => `${ss.renderItem(item, index)}`).join('')}\n `;\n return itemsHtml;\n }\n renderPage() {\n const ss = this;\n if (ss.params.renderPage) return ss.params.renderPage.call(ss, ss.items);\n let pageTitle = ss.params.pageTitle;\n if (typeof pageTitle === 'undefined') {\n const $itemTitleEl = ss.$el.find('.item-title');\n pageTitle = $itemTitleEl.length ? $itemTitleEl.text().trim() : '';\n }\n const cssClass = ss.params.cssClass;\n return $jsx(\"div\", {\n class: `page smart-select-page ${cssClass}`,\n \"data-name\": \"smart-select-page\",\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: `navbar ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: `navbar-inner sliding ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"left\"\n }, $jsx(\"a\", {\n class: \"link back\"\n }, $jsx(\"i\", {\n class: \"icon icon-back\"\n }), $jsx(\"span\", {\n class: \"if-not-md\"\n }, ss.params.pageBackLinkText))), pageTitle && $jsx(\"div\", {\n class: \"title\"\n }, pageTitle), ss.params.searchbar && $jsx(\"div\", {\n class: \"subnavbar\"\n }, ss.renderSearchbar()))), ss.params.searchbar && $jsx(\"div\", {\n class: \"searchbar-backdrop\"\n }), $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list list-outline-ios list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items)))));\n }\n renderPopup() {\n const ss = this;\n if (ss.params.renderPopup) return ss.params.renderPopup.call(ss, ss.items);\n let pageTitle = ss.params.pageTitle;\n if (typeof pageTitle === 'undefined') {\n const $itemTitleEl = ss.$el.find('.item-title');\n pageTitle = $itemTitleEl.length ? $itemTitleEl.text().trim() : '';\n }\n const cssClass = ss.params.cssClass || '';\n return $jsx(\"div\", {\n class: `popup smart-select-popup ${cssClass} ${ss.params.popupTabletFullscreen ? 'popup-tablet-fullscreen' : ''}`,\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: \"view\"\n }, $jsx(\"div\", {\n class: `page smart-select-page ${ss.params.searchbar ? 'page-with-subnavbar' : ''}`,\n \"data-name\": \"smart-select-page\"\n }, $jsx(\"div\", {\n class: `navbar ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: \"navbar-inner sliding\"\n }, pageTitle && $jsx(\"div\", {\n class: \"title\"\n }, pageTitle), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": `.smart-select-popup[data-select-name='${ss.selectName}']`\n }, ss.params.popupCloseLinkText)), ss.params.searchbar && $jsx(\"div\", {\n class: \"subnavbar\"\n }, ss.renderSearchbar()))), ss.params.searchbar && $jsx(\"div\", {\n class: \"searchbar-backdrop\"\n }), $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list list-outline-ios list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items)))))));\n }\n renderSheet() {\n const ss = this;\n if (ss.params.renderSheet) return ss.params.renderSheet.call(ss, ss.items);\n const cssClass = ss.params.cssClass;\n // prettier-ignore\n return $jsx(\"div\", {\n class: `sheet-modal smart-select-sheet ${cssClass}`,\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: `toolbar toolbar-top ${ss.params.toolbarColorTheme ? `color-${ss.params.toolbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"div\", {\n class: \"left\"\n }), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link sheet-close\"\n }, ss.params.sheetCloseLinkText)))), $jsx(\"div\", {\n class: \"sheet-modal-inner\"\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items))))));\n }\n renderPopover() {\n const ss = this;\n if (ss.params.renderPopover) return ss.params.renderPopover.call(ss, ss.items);\n const cssClass = ss.params.cssClass;\n // prettier-ignore\n return $jsx(\"div\", {\n class: `popover smart-select-popover ${cssClass}`,\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `list list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items)))));\n }\n scrollToSelectedItem() {\n const ss = this;\n const {\n params,\n $containerEl\n } = ss;\n if (!ss.opened) return ss;\n if (params.virtualList) {\n let selectedIndex;\n ss.vl.items.forEach((item, index) => {\n if (typeof selectedIndex === 'undefined' && item.selected) {\n selectedIndex = index;\n }\n });\n if (typeof selectedIndex !== 'undefined') {\n ss.vl.scrollToItem(selectedIndex);\n }\n } else {\n const $selectedItemEl = $containerEl.find('input:checked').parents('li');\n if (!$selectedItemEl.length) return ss;\n const $scrollableEl = $containerEl.find('.page-content, .popover-inner');\n if (!$scrollableEl.length) return ss;\n $scrollableEl.scrollTop($selectedItemEl.offset().top - $scrollableEl.offset().top - parseInt($scrollableEl.css('padding-top'), 10));\n }\n return ss;\n }\n onOpen(type, containerEl) {\n const ss = this;\n const app = ss.app;\n const $containerEl = $(containerEl);\n ss.$containerEl = $containerEl;\n ss.openedIn = type;\n ss.opened = true;\n\n // Init VL\n if (ss.params.virtualList) {\n ss.vl = app.virtualList.create({\n el: $containerEl.find('.virtual-list'),\n items: ss.items,\n renderItem: ss.renderItem.bind(ss),\n height: ss.params.virtualListHeight,\n searchByItem(query, item) {\n if (item.text && removeDiacritics(item.text).toLowerCase().indexOf(query.trim().toLowerCase()) >= 0) return true;\n return false;\n }\n });\n }\n if (ss.params.scrollToSelectedItem) {\n ss.scrollToSelectedItem();\n }\n\n // Init SB\n if (ss.params.searchbar) {\n let $searchbarEl = $containerEl.find('.searchbar');\n if (type === 'page' && app.theme === 'ios') {\n $searchbarEl = $(app.navbar.getElByPage($containerEl)).find('.searchbar');\n }\n if (ss.params.appendSearchbarNotFound && (type === 'page' || type === 'popup')) {\n let $notFoundEl = null;\n if (typeof ss.params.appendSearchbarNotFound === 'string') {\n $notFoundEl = $(`${ss.params.appendSearchbarNotFound}
`);\n } else if (typeof ss.params.appendSearchbarNotFound === 'boolean') {\n $notFoundEl = $('Nothing found
');\n } else {\n $notFoundEl = ss.params.appendSearchbarNotFound;\n }\n if ($notFoundEl) {\n $containerEl.find('.page-content').append($notFoundEl[0]);\n }\n }\n const searchbarParams = extend({\n el: $searchbarEl,\n backdropEl: $containerEl.find('.searchbar-backdrop'),\n searchContainer: `.smart-select-list-${ss.id}`,\n searchIn: '.item-title'\n }, typeof ss.params.searchbar === 'object' ? ss.params.searchbar : {});\n ss.searchbar = app.searchbar.create(searchbarParams);\n }\n\n // Check for max length\n if (ss.maxLength) {\n ss.checkMaxLength();\n }\n\n // Close on select\n if (ss.params.closeOnSelect) {\n ss.$containerEl.find(`input[type=\"radio\"][name=\"${ss.inputName}\"]:checked`).parents('label').once('click', () => {\n ss.close();\n });\n }\n\n // Attach input events\n ss.attachInputsEvents();\n ss.$el.trigger('smartselect:open');\n ss.emit('local::open smartSelectOpen', ss);\n }\n onOpened() {\n const ss = this;\n ss.$el.trigger('smartselect:opened');\n ss.emit('local::opened smartSelectOpened', ss);\n }\n onClose() {\n const ss = this;\n if (ss.destroyed) return;\n\n // Destroy VL\n if (ss.vl && ss.vl.destroy) {\n ss.vl.destroy();\n ss.vl = null;\n delete ss.vl;\n }\n\n // Destroy SB\n if (ss.searchbar && ss.searchbar.destroy) {\n ss.searchbar.destroy();\n ss.searchbar = null;\n delete ss.searchbar;\n }\n // Detach events\n ss.detachInputsEvents();\n ss.$el.trigger('smartselect:close');\n ss.emit('local::close smartSelectClose', ss);\n }\n onClosed() {\n const ss = this;\n if (ss.destroyed) return;\n ss.opened = false;\n ss.$containerEl = null;\n delete ss.$containerEl;\n ss.$el.trigger('smartselect:closed');\n ss.emit('local::closed smartSelectClosed', ss);\n }\n openPage() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const pageHtml = ss.renderPage(ss.items);\n ss.view.router.navigate({\n url: ss.url,\n route: {\n content: pageHtml,\n path: ss.url,\n on: {\n pageBeforeIn(e, page) {\n ss.onOpen('page', page.el);\n },\n pageAfterIn(e, page) {\n ss.onOpened('page', page.el);\n },\n pageBeforeOut(e, page) {\n ss.onClose('page', page.el);\n },\n pageAfterOut(e, page) {\n ss.onClosed('page', page.el);\n }\n }\n }\n });\n return ss;\n }\n openPopup() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const popupHtml = ss.renderPopup(ss.items);\n const popupParams = {\n content: popupHtml,\n push: ss.params.popupPush,\n swipeToClose: ss.params.popupSwipeToClose,\n closeByBackdropClick: ss.params.closeByBackdropClick,\n on: {\n popupOpen(popup) {\n ss.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n ss.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n ss.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n ss.onClosed('popup', popup.el);\n }\n }\n };\n if (ss.params.routableModals && ss.view) {\n ss.view.router.navigate({\n url: ss.url,\n route: {\n path: ss.url,\n popup: popupParams\n }\n });\n } else {\n ss.modal = ss.app.popup.create(popupParams).open();\n }\n return ss;\n }\n openSheet() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const sheetHtml = ss.renderSheet(ss.items);\n const sheetParams = {\n content: sheetHtml,\n backdrop: ss.params.sheetBackdrop,\n scrollToEl: ss.$el,\n closeByOutsideClick: true,\n push: ss.params.sheetPush,\n swipeToClose: ss.params.sheetSwipeToClose,\n closeByBackdropClick: ss.params.closeByBackdropClick,\n on: {\n sheetOpen(sheet) {\n ss.onOpen('sheet', sheet.el);\n },\n sheetOpened(sheet) {\n ss.onOpened('sheet', sheet.el);\n },\n sheetClose(sheet) {\n ss.onClose('sheet', sheet.el);\n },\n sheetClosed(sheet) {\n ss.onClosed('sheet', sheet.el);\n }\n }\n };\n if (ss.params.routableModals && ss.view) {\n ss.view.router.navigate({\n url: ss.url,\n route: {\n path: ss.url,\n sheet: sheetParams\n }\n });\n } else {\n ss.modal = ss.app.sheet.create(sheetParams).open();\n }\n return ss;\n }\n openPopover() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const popoverHtml = ss.renderPopover(ss.items);\n const popoverParams = {\n content: popoverHtml,\n targetEl: ss.$el,\n closeByBackdropClick: ss.params.closeByBackdropClick,\n on: {\n popoverOpen(popover) {\n ss.onOpen('popover', popover.el);\n },\n popoverOpened(popover) {\n ss.onOpened('popover', popover.el);\n },\n popoverClose(popover) {\n ss.onClose('popover', popover.el);\n },\n popoverClosed(popover) {\n ss.onClosed('popover', popover.el);\n }\n }\n };\n if (ss.params.routableModals && ss.view) {\n ss.view.router.navigate({\n url: ss.url,\n route: {\n path: ss.url,\n popover: popoverParams\n }\n });\n } else {\n ss.modal = ss.app.popover.create(popoverParams).open();\n }\n return ss;\n }\n open(type) {\n const ss = this;\n if (ss.opened) return ss;\n let prevented = false;\n function prevent() {\n prevented = true;\n }\n if (ss.$el) {\n ss.$el.trigger('smartselect:beforeopen', {\n prevent\n });\n }\n ss.emit('local::beforeOpen smartSelectBeforeOpen', ss, prevent);\n if (prevented) return ss;\n const openIn = type || ss.params.openIn;\n ss[`open${openIn.split('').map((el, index) => {\n if (index === 0) return el.toUpperCase();\n return el;\n }).join('')}`]();\n return ss;\n }\n close() {\n const ss = this;\n if (!ss.opened) return ss;\n if (ss.params.routableModals && ss.view || ss.openedIn === 'page') {\n ss.view.router.back();\n } else {\n ss.modal.once('modalClosed', () => {\n nextTick(() => {\n if (ss.destroyed) return;\n ss.modal.destroy();\n delete ss.modal;\n });\n });\n ss.modal.close();\n }\n return ss;\n }\n init() {\n const ss = this;\n ss.attachEvents();\n ss.setValueText();\n }\n destroy() {\n const ss = this;\n ss.emit('local::beforeDestroy smartSelectBeforeDestroy', ss);\n ss.$el.trigger('smartselect:beforedestroy');\n ss.detachEvents();\n delete ss.$el[0].f7SmartSelect;\n deleteProps(ss);\n ss.destroyed = true;\n }\n}\nexport default SmartSelect;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport SmartSelect from './smart-select-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'smartSelect',\n params: {\n smartSelect: {\n el: undefined,\n valueEl: undefined,\n setValueText: true,\n formatValueText: null,\n openIn: 'page',\n // or 'popup' or 'sheet' or 'popover'\n popupPush: false,\n popupSwipeToClose: undefined,\n // defaults to app\n sheetPush: false,\n sheetSwipeToClose: undefined,\n // defaults to app\n sheetBackdrop: false,\n pageTitle: undefined,\n pageBackLinkText: 'Back',\n popupCloseLinkText: 'Close',\n popupTabletFullscreen: false,\n closeByBackdropClick: true,\n sheetCloseLinkText: 'Done',\n searchbar: false,\n searchbarPlaceholder: 'Search',\n searchbarDisableText: 'Cancel',\n searchbarDisableButton: true,\n searchbarSpellcheck: false,\n closeOnSelect: false,\n virtualList: false,\n virtualListHeight: undefined,\n scrollToSelectedItem: false,\n formColorTheme: undefined,\n navbarColorTheme: undefined,\n routableModals: false,\n url: 'select/',\n inputIconPosition: 'start',\n cssClass: '',\n /*\n Custom render functions\n */\n renderPage: undefined,\n renderPopup: undefined,\n renderSheet: undefined,\n renderPopover: undefined,\n renderItems: undefined,\n renderItem: undefined,\n renderSearchbar: undefined\n }\n },\n static: {\n SmartSelect\n },\n create() {\n const app = this;\n app.smartSelect = extend(ConstructorMethods({\n defaultSelector: '.smart-select',\n constructor: SmartSelect,\n app,\n domProp: 'f7SmartSelect'\n }), {\n open(smartSelectEl) {\n const ss = app.smartSelect.get(smartSelectEl);\n if (ss && ss.open) return ss.open();\n return undefined;\n },\n close(smartSelectEl) {\n const ss = app.smartSelect.get(smartSelectEl);\n if (ss && ss.close) return ss.close();\n return undefined;\n }\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.smart-select-init').each(smartSelectEl => {\n app.smartSelect.create(extend({\n el: smartSelectEl\n }, $(smartSelectEl).dataset()));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.smart-select-init').each(smartSelectEl => {\n if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {\n smartSelectEl.f7SmartSelect.destroy();\n }\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.smart-select-init').each(smartSelectEl => {\n app.smartSelect.create(extend({\n el: smartSelectEl\n }, $(smartSelectEl).dataset()));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.smart-select-init').each(smartSelectEl => {\n if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {\n smartSelectEl.f7SmartSelect.destroy();\n }\n });\n }\n },\n clicks: {\n '.smart-select': function open($clickedEl, data) {\n const app = this;\n if (!$clickedEl[0].f7SmartSelect) {\n const ss = app.smartSelect.create(extend({\n el: $clickedEl\n }, data));\n ss.open();\n }\n }\n },\n vnode: {\n 'smart-select-init': {\n insert(vnode) {\n const app = this;\n const smartSelectEl = vnode.elm;\n app.smartSelect.create(extend({\n el: smartSelectEl\n }, $(smartSelectEl).dataset()));\n },\n destroy(vnode) {\n const smartSelectEl = vnode.elm;\n if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {\n smartSelectEl.f7SmartSelect.destroy();\n }\n }\n }\n }\n};", "export default {\n name: 'grid'\n};", "import { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport $ from '../../shared/dom7.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { getSupport } from '../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Calendar extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const calendar = this;\n calendar.params = extend({}, app.params.calendar, params);\n let $containerEl;\n if (calendar.params.containerEl) {\n $containerEl = $(calendar.params.containerEl);\n if ($containerEl.length === 0) return calendar;\n }\n let $inputEl;\n if (calendar.params.inputEl) {\n $inputEl = $(calendar.params.inputEl);\n }\n const isHorizontal = calendar.params.direction === 'horizontal';\n let inverter = 1;\n if (isHorizontal) {\n inverter = app.rtl ? -1 : 1;\n }\n extend(calendar, {\n app,\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n inline: $containerEl && $containerEl.length > 0,\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n initialized: false,\n opened: false,\n url: calendar.params.url,\n isHorizontal,\n inverter,\n animating: false,\n allowTouchMove: true,\n hasTimePicker: calendar.params.timePicker && !calendar.params.rangePicker && !calendar.params.multiple\n });\n calendar.dayFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, {\n day: 'numeric'\n });\n return formatter.format(date).replace(/\u65E5/, '');\n };\n calendar.monthFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, {\n month: 'long'\n });\n return formatter.format(date);\n };\n calendar.yearFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, {\n year: 'numeric'\n });\n return formatter.format(date);\n };\n calendar.timeSelectorFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, calendar.params.timePickerFormat);\n return formatter.format(date);\n };\n const timeFormatCheckDate = calendar.timeSelectorFormatter(new Date()).toLowerCase();\n calendar.is12HoursFormat = timeFormatCheckDate.indexOf('pm') >= 0 || timeFormatCheckDate.indexOf('am') >= 0;\n\n // Auto names\n let {\n monthNames,\n monthNamesShort,\n dayNames,\n dayNamesShort\n } = calendar.params;\n const {\n monthNamesIntl,\n monthNamesShortIntl,\n dayNamesIntl,\n dayNamesShortIntl\n } = calendar.getIntlNames();\n if (monthNames === 'auto') monthNames = monthNamesIntl;\n if (monthNamesShort === 'auto') monthNamesShort = monthNamesShortIntl;\n if (dayNames === 'auto') dayNames = dayNamesIntl;\n if (dayNamesShort === 'auto') dayNamesShort = dayNamesShortIntl;\n extend(calendar, {\n monthNames,\n monthNamesShort,\n dayNames,\n dayNamesShort\n });\n function onInputClick() {\n calendar.open();\n }\n function onInputFocus(e) {\n e.preventDefault();\n }\n function onInputClear() {\n calendar.setValue([]);\n if (calendar.opened) {\n calendar.update();\n }\n }\n function onHtmlClick(e) {\n const $targetEl = $(e.target);\n if (calendar.destroyed || !calendar.params) return;\n if (calendar.isPopover()) return;\n if (!calendar.opened || calendar.closing) return;\n if ($targetEl.closest('[class*=\"backdrop\"]').length) return;\n if (calendar.monthPickerPopover || calendar.yearPickerPopover || calendar.timePickerPopover) return;\n if ($inputEl && $inputEl.length > 0) {\n if ($targetEl[0] !== $inputEl[0] && $targetEl.closest('.sheet-modal, .calendar-modal').length === 0) {\n calendar.close();\n }\n } else if ($(e.target).closest('.sheet-modal, .calendar-modal').length === 0) {\n calendar.close();\n }\n }\n\n // Events\n extend(calendar, {\n attachInputEvents() {\n calendar.$inputEl.on('click', onInputClick);\n calendar.$inputEl.on('input:clear', onInputClear);\n if (calendar.params.inputReadOnly) {\n calendar.$inputEl.on('focus mousedown', onInputFocus);\n if (calendar.$inputEl[0]) {\n calendar.$inputEl[0].f7ValidateReadonly = true;\n }\n }\n },\n detachInputEvents() {\n calendar.$inputEl.off('click', onInputClick);\n calendar.$inputEl.off('input:clear', onInputClear);\n if (calendar.params.inputReadOnly) {\n calendar.$inputEl.off('focus mousedown', onInputFocus);\n if (calendar.$inputEl[0]) {\n delete calendar.$inputEl[0].f7ValidateReadonly;\n }\n }\n },\n attachHtmlEvents() {\n app.on('click', onHtmlClick);\n },\n detachHtmlEvents() {\n app.off('click', onHtmlClick);\n }\n });\n calendar.attachCalendarEvents = function attachCalendarEvents() {\n let allowItemClick = true;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let touchStartTime;\n let touchEndTime;\n let currentTranslate;\n let wrapperWidth;\n let wrapperHeight;\n let percentage;\n let touchesDiff;\n let isScrolling;\n const {\n $el,\n $wrapperEl\n } = calendar;\n function handleTouchStart(e) {\n if (isMoved || isTouched || !e.isTrusted) return;\n isTouched = true;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n touchStartTime = new Date().getTime();\n percentage = 0;\n allowItemClick = true;\n isScrolling = undefined;\n currentTranslate = calendar.monthsTranslate;\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n const {\n isHorizontal: isH\n } = calendar;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX));\n }\n if (isH && isScrolling || !calendar.allowTouchMove) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n if (calendar.animating) {\n isTouched = false;\n return;\n }\n allowItemClick = false;\n if (!isMoved) {\n // First move\n isMoved = true;\n wrapperWidth = $wrapperEl[0].offsetWidth;\n wrapperHeight = $wrapperEl[0].offsetHeight;\n $wrapperEl.transition(0);\n }\n touchesDiff = isH ? touchCurrentX - touchStartX : touchCurrentY - touchStartY;\n percentage = touchesDiff / (isH ? wrapperWidth : wrapperHeight);\n currentTranslate = (calendar.monthsTranslate * calendar.inverter + percentage) * 100;\n\n // Transform wrapper\n $wrapperEl.transform(`translate3d(${isH ? currentTranslate : 0}%, ${isH ? 0 : currentTranslate}%, 0)`);\n }\n function handleTouchEnd(e) {\n if (!isTouched || !isMoved || !e.isTrusted) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n touchEndTime = new Date().getTime();\n if (touchEndTime - touchStartTime < 300) {\n if (Math.abs(touchesDiff) < 10) {\n calendar.resetMonth();\n } else if (touchesDiff >= 10) {\n if (app.rtl) calendar.nextMonth();else calendar.prevMonth();\n } else if (app.rtl) calendar.prevMonth();else calendar.nextMonth();\n } else if (percentage <= -0.5) {\n if (app.rtl) calendar.prevMonth();else calendar.nextMonth();\n } else if (percentage >= 0.5) {\n if (app.rtl) calendar.nextMonth();else calendar.prevMonth();\n } else {\n calendar.resetMonth();\n }\n\n // Allow click\n setTimeout(() => {\n allowItemClick = true;\n }, 100);\n }\n function handleDayClick(e) {\n if (!allowItemClick) return;\n let $dayEl = $(e.target).parents('.calendar-day');\n if ($dayEl.length === 0 && $(e.target).hasClass('calendar-day')) {\n $dayEl = $(e.target);\n }\n if ($dayEl.length === 0) return;\n if ($dayEl.hasClass('calendar-day-disabled')) return;\n if (!calendar.params.rangePicker) {\n if ($dayEl.hasClass('calendar-day-next')) calendar.nextMonth();\n if ($dayEl.hasClass('calendar-day-prev')) calendar.prevMonth();\n }\n const dateYear = parseInt($dayEl.attr('data-year'), 10);\n const dateMonth = parseInt($dayEl.attr('data-month'), 10);\n const dateDay = parseInt($dayEl.attr('data-day'), 10);\n calendar.emit('local::dayClick calendarDayClick', calendar, $dayEl[0], dateYear, dateMonth, dateDay);\n if (!$dayEl.hasClass('calendar-day-selected') || calendar.params.multiple || calendar.params.rangePicker) {\n const valueToAdd = new Date(dateYear, dateMonth, dateDay, 0, 0, 0);\n if (calendar.hasTimePicker) {\n if (calendar.value && calendar.value[0]) {\n valueToAdd.setHours(calendar.value[0].getHours(), calendar.value[0].getMinutes());\n } else {\n valueToAdd.setHours(new Date().getHours(), new Date().getMinutes());\n }\n }\n calendar.addValue(valueToAdd);\n }\n if (calendar.params.closeOnSelect) {\n if (calendar.params.rangePicker && calendar.value.length === 2 || !calendar.params.rangePicker) {\n calendar.close();\n }\n }\n }\n function onNextMonthClick() {\n calendar.nextMonth();\n }\n function onPrevMonthClick() {\n calendar.prevMonth();\n }\n function onNextYearClick() {\n calendar.nextYear();\n }\n function onPrevYearClick() {\n calendar.prevYear();\n }\n function onMonthSelectorClick() {\n calendar.openMonthPicker();\n }\n function onYearSelectorClick() {\n calendar.openYearPicker();\n }\n function onTimeSelectorClick() {\n calendar.openTimePicker();\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n // Selectors clicks\n $el.find('.calendar-prev-month-button').on('click', onPrevMonthClick);\n $el.find('.calendar-next-month-button').on('click', onNextMonthClick);\n $el.find('.calendar-prev-year-button').on('click', onPrevYearClick);\n $el.find('.calendar-next-year-button').on('click', onNextYearClick);\n if (calendar.params.monthPicker) {\n $el.find('.current-month-value').on('click', onMonthSelectorClick);\n }\n if (calendar.params.yearPicker) {\n $el.find('.current-year-value').on('click', onYearSelectorClick);\n }\n if (calendar.hasTimePicker) {\n $el.find('.calendar-time-selector a').on('click', onTimeSelectorClick);\n }\n // Day clicks\n $wrapperEl.on('click', handleDayClick);\n // Touch events\n if (calendar.params.touchMove) {\n $wrapperEl.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n }\n calendar.detachCalendarEvents = function detachCalendarEvents() {\n $el.find('.calendar-prev-month-button').off('click', onPrevMonthClick);\n $el.find('.calendar-next-month-button').off('click', onNextMonthClick);\n $el.find('.calendar-prev-year-button').off('click', onPrevYearClick);\n $el.find('.calendar-next-year-button').off('click', onNextYearClick);\n if (calendar.params.monthPicker) {\n $el.find('.current-month-value').off('click', onMonthSelectorClick);\n }\n if (calendar.params.yearPicker) {\n $el.find('.current-year-value').off('click', onYearSelectorClick);\n }\n if (calendar.hasTimePicker) {\n $el.find('.calendar-time-selector a').off('click', onTimeSelectorClick);\n }\n $wrapperEl.off('click', handleDayClick);\n if (calendar.params.touchMove) {\n $wrapperEl.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n }\n };\n };\n calendar.init();\n return calendar;\n }\n get view() {\n const {\n $inputEl,\n app,\n params\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n } else if ($inputEl) {\n view = $inputEl.parents('.view').length && $inputEl.parents('.view')[0].f7View;\n }\n if (!view) view = app.views.main;\n return view;\n }\n getIntlNames() {\n const calendar = this;\n const locale = calendar.params.locale;\n const monthNamesIntl = [];\n const monthNamesShortIntl = [];\n const dayNamesIntl = [];\n const dayNamesShortIntl = [];\n const formatterMonthNames = new Intl.DateTimeFormat(locale, {\n month: 'long'\n });\n const formatterMonthNamesShort = new Intl.DateTimeFormat(locale, {\n month: 'short'\n });\n const formatterDayNames = new Intl.DateTimeFormat(locale, {\n weekday: 'long'\n });\n const formatterDayNamesShort = new Intl.DateTimeFormat(locale, {\n weekday: 'short'\n });\n let year;\n let yearStarted;\n let yearEnded;\n for (let i = 0; i < 24; i += 1) {\n const date = new Date().setMonth(i, 1);\n const currentYear = calendar.yearFormatter(date);\n if (year && currentYear !== year) {\n if (yearStarted) yearEnded = true;\n yearStarted = true;\n year = currentYear;\n }\n if (!year) {\n year = currentYear;\n }\n if (yearStarted && year === currentYear && !yearEnded) {\n monthNamesIntl.push(formatterMonthNames.format(date));\n monthNamesShortIntl.push(formatterMonthNamesShort.format(date));\n }\n }\n const weekDay = new Date().getDay();\n for (let i = 0; i < 7; i += 1) {\n const date = new Date().getTime() + (i - weekDay) * 24 * 60 * 60 * 1000;\n dayNamesIntl.push(formatterDayNames.format(date));\n dayNamesShortIntl.push(formatterDayNamesShort.format(date));\n }\n return {\n monthNamesIntl,\n monthNamesShortIntl,\n dayNamesIntl,\n dayNamesShortIntl\n };\n }\n normalizeDate(date) {\n const calendar = this;\n const d = new Date(date);\n if (calendar.hasTimePicker) {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());\n }\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n normalizeValues(values) {\n const calendar = this;\n let newValues = [];\n if (values && Array.isArray(values)) {\n newValues = values.map(val => calendar.normalizeDate(val));\n }\n return newValues;\n }\n initInput() {\n const calendar = this;\n if (!calendar.$inputEl) return;\n if (calendar.params.inputReadOnly) calendar.$inputEl.prop('readOnly', true);\n }\n isPopover() {\n const calendar = this;\n const {\n app,\n modal,\n params\n } = calendar;\n const device = getDevice();\n if (params.openIn === 'sheet') return false;\n if (modal && modal.type !== 'popover') return false;\n if (!calendar.inline && calendar.inputEl) {\n if (params.openIn === 'popover') return true;\n if (device.ios) {\n return !!device.ipad;\n }\n if (app.width >= 768) {\n return true;\n }\n }\n return false;\n }\n formatDate(d) {\n const calendar = this;\n const date = new Date(d);\n const year = date.getFullYear();\n const month = date.getMonth();\n const month1 = month + 1;\n const day = date.getDate();\n const weekDay = date.getDay();\n const {\n monthNames,\n monthNamesShort,\n dayNames,\n dayNamesShort\n } = calendar;\n const {\n dateFormat,\n locale\n } = calendar.params;\n function twoDigits(number) {\n return number < 10 ? `0${number}` : number;\n }\n if (typeof dateFormat === 'string') {\n const tokens = {\n yyyy: year,\n yy: String(year).substring(2),\n mm: twoDigits(month1),\n m: month1,\n MM: monthNames[month],\n M: monthNamesShort[month],\n dd: twoDigits(day),\n d: day,\n DD: dayNames[weekDay],\n D: dayNamesShort[weekDay]\n };\n if (calendar.params.timePicker) {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n let hours12 = hours;\n if (hours > 12) hours12 = hours - 12;\n if (hours === 0) hours12 = 12;\n const a = hours >= 12 && hours !== 0 ? 'pm' : 'am';\n Object.assign(tokens, {\n HH: twoDigits(hours),\n H: hours,\n hh: twoDigits(hours12),\n h: hours12,\n ss: twoDigits(seconds),\n s: seconds,\n ':mm': twoDigits(minutes),\n ':m': minutes,\n a,\n A: a.toUpperCase()\n });\n }\n const regexp = new RegExp(Object.keys(tokens).map(t => `(${t})`).join('|'), 'g');\n return dateFormat.replace(regexp, token => {\n if (token in tokens) return tokens[token];\n return token;\n });\n }\n if (typeof dateFormat === 'function') {\n return dateFormat(date);\n }\n // Intl Object\n const formatter = new Intl.DateTimeFormat(locale, dateFormat);\n return formatter.format(date);\n }\n formatValue() {\n const calendar = this;\n const {\n value\n } = calendar;\n if (calendar.params.formatValue) {\n return calendar.params.formatValue.call(calendar, value);\n }\n return value.map(v => calendar.formatDate(v)).join(calendar.params.rangePicker ? ' - ' : ', ');\n }\n addValue(newValue) {\n const calendar = this;\n const {\n multiple,\n rangePicker,\n rangePickerMinDays,\n rangePickerMaxDays\n } = calendar.params;\n if (multiple) {\n if (!calendar.value) calendar.value = [];\n let inValuesIndex;\n for (let i = 0; i < calendar.value.length; i += 1) {\n if (new Date(newValue).getTime() === new Date(calendar.value[i]).getTime()) {\n inValuesIndex = i;\n }\n }\n if (typeof inValuesIndex === 'undefined') {\n calendar.value.push(newValue);\n } else {\n calendar.value.splice(inValuesIndex, 1);\n }\n calendar.updateValue();\n } else if (rangePicker) {\n if (!calendar.value) calendar.value = [];\n if (calendar.value.length === 2 || calendar.value.length === 0) {\n calendar.value = [];\n }\n if (calendar.value.length === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) >= (rangePickerMinDays - 1) * 60 * 60 * 24 * 1000 && (rangePickerMaxDays === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) <= (rangePickerMaxDays - 1) * 60 * 60 * 24 * 1000)) calendar.value.push(newValue);else calendar.value = [];\n calendar.value.sort((a, b) => a - b);\n calendar.updateValue();\n } else {\n calendar.value = [newValue];\n calendar.updateValue();\n }\n }\n setValue(values) {\n const calendar = this;\n const currentValue = calendar.value;\n if (Array.isArray(currentValue) && Array.isArray(values) && currentValue.length === values.length) {\n let equal = true;\n currentValue.forEach((v, index) => {\n if (v !== values[index]) equal = false;\n });\n if (equal) return;\n }\n calendar.value = values;\n calendar.updateValue();\n }\n getValue() {\n const calendar = this;\n return calendar.value;\n }\n updateValue(onlyHeader) {\n const calendar = this;\n const {\n $el,\n $wrapperEl,\n $inputEl,\n value,\n params\n } = calendar;\n let i;\n if ($el && $el.length > 0) {\n $wrapperEl.find('.calendar-day-selected').removeClass('calendar-day-selected calendar-day-selected-range calendar-day-selected-left calendar-day-selected-right');\n let valueDate;\n if (params.rangePicker && value.length === 2) {\n const leftDate = new Date(value[0]).getTime();\n const rightDate = new Date(value[1]).getTime();\n for (i = leftDate; i <= rightDate; i += 24 * 60 * 60 * 1000) {\n valueDate = new Date(i);\n let addClass = 'calendar-day-selected';\n if (leftDate !== rightDate) {\n if (i !== leftDate && i !== rightDate) {\n addClass += ' calendar-day-selected-range';\n }\n if (i === leftDate) {\n addClass += ' calendar-day-selected-left';\n }\n if (i === rightDate) {\n addClass += ' calendar-day-selected-right';\n }\n }\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).addClass(addClass);\n }\n valueDate = new Date(leftDate);\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).removeClass('calendar-day-selected-range').addClass('calendar-day-selected calendar-day-selected-left');\n valueDate = new Date(rightDate);\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).removeClass('calendar-day-selected-range').addClass('calendar-day-selected calendar-day-selected-right');\n } else {\n for (i = 0; i < calendar.value.length; i += 1) {\n valueDate = new Date(value[i]);\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).addClass('calendar-day-selected');\n }\n }\n }\n if (!onlyHeader) {\n calendar.emit('local::change calendarChange', calendar, value);\n }\n if ($el && $el.length > 0 && calendar.hasTimePicker) {\n $el.find('.calendar-time-selector a').text(value && value.length ? calendar.timeSelectorFormatter(value[0]) : calendar.params.timePickerPlaceholder);\n }\n if ($inputEl && $inputEl.length || params.header) {\n const inputValue = calendar.formatValue(value);\n if (params.header && $el && $el.length) {\n $el.find('.calendar-selected-date').text(inputValue);\n }\n if ($inputEl && $inputEl.length && !onlyHeader) {\n $inputEl.val(inputValue);\n $inputEl.trigger('change');\n }\n }\n }\n updateCurrentMonthYear(dir) {\n const calendar = this;\n const {\n $months,\n $el,\n monthNames\n } = calendar;\n let currentLocaleMonth;\n let currentLocaleYear;\n if (typeof dir === 'undefined') {\n calendar.currentMonth = parseInt($months.eq(1).attr('data-month'), 10);\n calendar.currentYear = parseInt($months.eq(1).attr('data-year'), 10);\n currentLocaleMonth = $months.eq(1).attr('data-locale-month');\n currentLocaleYear = $months.eq(1).attr('data-locale-year');\n } else {\n calendar.currentMonth = parseInt($months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-month'), 10);\n calendar.currentYear = parseInt($months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-year'), 10);\n currentLocaleMonth = $months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-locale-month');\n currentLocaleYear = $months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-locale-year');\n }\n $el.find('.current-month-value').text(monthNames[currentLocaleMonth]);\n $el.find('.current-year-value').text(currentLocaleYear);\n }\n update() {\n const calendar = this;\n const {\n currentYear,\n currentMonth,\n $wrapperEl\n } = calendar;\n const currentDate = new Date(currentYear, currentMonth);\n const prevMonthHtml = calendar.renderMonth(currentDate, 'prev');\n const currentMonthHtml = calendar.renderMonth(currentDate);\n const nextMonthHtml = calendar.renderMonth(currentDate, 'next');\n $wrapperEl.transition(0).html(`${prevMonthHtml}${currentMonthHtml}${nextMonthHtml}`).transform('translate3d(0,0,0)');\n calendar.$months = $wrapperEl.find('.calendar-month');\n calendar.monthsTranslate = 0;\n calendar.setMonthsTranslate();\n calendar.$months.each(monthEl => {\n calendar.emit('local::monthAdd calendarMonthAdd', monthEl);\n });\n }\n onMonthChangeStart(dir) {\n const calendar = this;\n const {\n $months,\n currentYear,\n currentMonth\n } = calendar;\n calendar.updateCurrentMonthYear(dir);\n $months.removeClass('calendar-month-current calendar-month-prev calendar-month-next');\n const currentIndex = dir === 'next' ? $months.length - 1 : 0;\n $months.eq(currentIndex).addClass('calendar-month-current');\n $months.eq(dir === 'next' ? currentIndex - 1 : currentIndex + 1).addClass(dir === 'next' ? 'calendar-month-prev' : 'calendar-month-next');\n calendar.emit('local::monthYearChangeStart calendarMonthYearChangeStart', calendar, currentYear, currentMonth);\n }\n onMonthChangeEnd(dir, rebuildBoth) {\n const calendar = this;\n const {\n currentYear,\n currentMonth,\n $wrapperEl,\n monthsTranslate\n } = calendar;\n calendar.animating = false;\n let nextMonthHtml;\n let prevMonthHtml;\n let currentMonthHtml;\n $wrapperEl.find('.calendar-month:not(.calendar-month-prev):not(.calendar-month-current):not(.calendar-month-next)').remove();\n if (typeof dir === 'undefined') {\n dir = 'next'; // eslint-disable-line\n rebuildBoth = true; // eslint-disable-line\n }\n\n if (!rebuildBoth) {\n currentMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), dir);\n } else {\n $wrapperEl.find('.calendar-month-next, .calendar-month-prev').remove();\n prevMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), 'prev');\n nextMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), 'next');\n }\n if (dir === 'next' || rebuildBoth) {\n $wrapperEl.append(currentMonthHtml || nextMonthHtml);\n }\n if (dir === 'prev' || rebuildBoth) {\n $wrapperEl.prepend(currentMonthHtml || prevMonthHtml);\n }\n const $months = $wrapperEl.find('.calendar-month');\n calendar.$months = $months;\n calendar.setMonthsTranslate(monthsTranslate);\n calendar.emit('local::monthAdd calendarMonthAdd', calendar, dir === 'next' ? $months.eq($months.length - 1)[0] : $months.eq(0)[0]);\n calendar.emit('local::monthYearChangeEnd calendarMonthYearChangeEnd', calendar, currentYear, currentMonth);\n }\n setMonthsTranslate(translate) {\n const calendar = this;\n const {\n $months,\n isHorizontal: isH,\n inverter\n } = calendar;\n // eslint-disable-next-line\n translate = translate || calendar.monthsTranslate || 0;\n if (typeof calendar.monthsTranslate === 'undefined') {\n calendar.monthsTranslate = translate;\n }\n $months.removeClass('calendar-month-current calendar-month-prev calendar-month-next');\n const prevMonthTranslate = -(translate + 1) * 100 * inverter;\n const currentMonthTranslate = -translate * 100 * inverter;\n const nextMonthTranslate = -(translate - 1) * 100 * inverter;\n $months.eq(0).transform(`translate3d(${isH ? prevMonthTranslate : 0}%, ${isH ? 0 : prevMonthTranslate}%, 0)`).addClass('calendar-month-prev');\n $months.eq(1).transform(`translate3d(${isH ? currentMonthTranslate : 0}%, ${isH ? 0 : currentMonthTranslate}%, 0)`).addClass('calendar-month-current');\n $months.eq(2).transform(`translate3d(${isH ? nextMonthTranslate : 0}%, ${isH ? 0 : nextMonthTranslate}%, 0)`).addClass('calendar-month-next');\n }\n nextMonth(transition) {\n const calendar = this;\n const {\n params,\n $wrapperEl,\n inverter,\n isHorizontal: isH\n } = calendar;\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n transition = ''; // eslint-disable-line\n if (!params.animate) transition = 0; // eslint-disable-line\n }\n\n const nextMonth = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr('data-month'), 10);\n const nextYear = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr('data-year'), 10);\n const nextDate = new Date(nextYear, nextMonth);\n const nextDateTime = nextDate.getTime();\n const transitionEndCallback = !calendar.animating;\n if (params.maxDate) {\n if (nextDateTime > new Date(params.maxDate).getTime()) {\n calendar.resetMonth();\n return;\n }\n }\n calendar.monthsTranslate -= 1;\n if (nextMonth === calendar.currentMonth) {\n const nextMonthTranslate = -calendar.monthsTranslate * 100 * inverter;\n const nextMonthHtml = $(calendar.renderMonth(nextDateTime, 'next')).transform(`translate3d(${isH ? nextMonthTranslate : 0}%, ${isH ? 0 : nextMonthTranslate}%, 0)`).addClass('calendar-month-next');\n $wrapperEl.append(nextMonthHtml[0]);\n calendar.$months = $wrapperEl.find('.calendar-month');\n calendar.emit('local::monthAdd calendarMonthAdd', calendar.$months.eq(calendar.$months.length - 1)[0]);\n }\n calendar.animating = true;\n calendar.onMonthChangeStart('next');\n const translate = calendar.monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? translate : 0}%, ${isH ? 0 : translate}%, 0)`);\n if (transitionEndCallback) {\n $wrapperEl.transitionEnd(() => {\n calendar.onMonthChangeEnd('next');\n });\n }\n if (!params.animate) {\n calendar.onMonthChangeEnd('next');\n }\n }\n prevMonth(transition) {\n const calendar = this;\n const {\n params,\n $wrapperEl,\n inverter,\n isHorizontal: isH\n } = calendar;\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n transition = ''; // eslint-disable-line\n if (!params.animate) transition = 0; // eslint-disable-line\n }\n\n const prevMonth = parseInt(calendar.$months.eq(0).attr('data-month'), 10);\n const prevYear = parseInt(calendar.$months.eq(0).attr('data-year'), 10);\n const prevDate = new Date(prevYear, prevMonth + 1, -1);\n const prevDateTime = prevDate.getTime();\n const transitionEndCallback = !calendar.animating;\n if (params.minDate) {\n let minDate = new Date(params.minDate);\n minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);\n if (prevDateTime < minDate.getTime()) {\n calendar.resetMonth();\n return;\n }\n }\n calendar.monthsTranslate += 1;\n if (prevMonth === calendar.currentMonth) {\n const prevMonthTranslate = -calendar.monthsTranslate * 100 * inverter;\n const prevMonthHtml = $(calendar.renderMonth(prevDateTime, 'prev')).transform(`translate3d(${isH ? prevMonthTranslate : 0}%, ${isH ? 0 : prevMonthTranslate}%, 0)`).addClass('calendar-month-prev');\n $wrapperEl.prepend(prevMonthHtml[0]);\n calendar.$months = $wrapperEl.find('.calendar-month');\n calendar.emit('local::monthAdd calendarMonthAdd', calendar.$months.eq(0)[0]);\n }\n calendar.animating = true;\n calendar.onMonthChangeStart('prev');\n const translate = calendar.monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? translate : 0}%, ${isH ? 0 : translate}%, 0)`);\n if (transitionEndCallback) {\n $wrapperEl.transitionEnd(() => {\n calendar.onMonthChangeEnd('prev');\n });\n }\n if (!params.animate) {\n calendar.onMonthChangeEnd('prev');\n }\n }\n resetMonth(transition) {\n if (transition === void 0) {\n transition = '';\n }\n const calendar = this;\n const {\n $wrapperEl,\n inverter,\n isHorizontal: isH,\n monthsTranslate\n } = calendar;\n const translate = monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? translate : 0}%, ${isH ? 0 : translate}%, 0)`);\n }\n // eslint-disable-next-line\n setYearMonth(year, month, transition) {\n const calendar = this;\n const {\n params,\n isHorizontal: isH,\n $wrapperEl,\n inverter\n } = calendar;\n // eslint-disable-next-line\n if (typeof year === 'undefined') year = calendar.currentYear;\n // eslint-disable-next-line\n if (typeof month === 'undefined') month = calendar.currentMonth;\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n // eslint-disable-next-line\n transition = '';\n // eslint-disable-next-line\n if (!params.animate) transition = 0;\n }\n let targetDate;\n if (year < calendar.currentYear) {\n targetDate = new Date(year, month + 1, -1).getTime();\n } else {\n targetDate = new Date(year, month).getTime();\n }\n if (params.maxDate && targetDate > new Date(params.maxDate).getTime()) {\n return false;\n }\n if (params.minDate) {\n let minDate = new Date(params.minDate);\n minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);\n if (targetDate < minDate.getTime()) {\n return false;\n }\n }\n const currentDate = new Date(calendar.currentYear, calendar.currentMonth).getTime();\n const dir = targetDate > currentDate ? 'next' : 'prev';\n const newMonthHTML = calendar.renderMonth(new Date(year, month));\n calendar.monthsTranslate = calendar.monthsTranslate || 0;\n const prevTranslate = calendar.monthsTranslate;\n let monthTranslate;\n const transitionEndCallback = !calendar.animating && transition !== 0;\n if (targetDate > currentDate) {\n // To next\n calendar.monthsTranslate -= 1;\n if (!calendar.animating) calendar.$months.eq(calendar.$months.length - 1).remove();\n $wrapperEl.append(newMonthHTML);\n calendar.$months = $wrapperEl.find('.calendar-month');\n monthTranslate = -(prevTranslate - 1) * 100 * inverter;\n calendar.$months.eq(calendar.$months.length - 1).transform(`translate3d(${isH ? monthTranslate : 0}%, ${isH ? 0 : monthTranslate}%, 0)`).addClass('calendar-month-next');\n } else {\n // To prev\n calendar.monthsTranslate += 1;\n if (!calendar.animating) calendar.$months.eq(0).remove();\n $wrapperEl.prepend(newMonthHTML);\n calendar.$months = $wrapperEl.find('.calendar-month');\n monthTranslate = -(prevTranslate + 1) * 100 * inverter;\n calendar.$months.eq(0).transform(`translate3d(${isH ? monthTranslate : 0}%, ${isH ? 0 : monthTranslate}%, 0)`).addClass('calendar-month-prev');\n }\n calendar.emit('local::monthAdd calendarMonthAdd', dir === 'next' ? calendar.$months.eq(calendar.$months.length - 1)[0] : calendar.$months.eq(0)[0]);\n calendar.animating = true;\n calendar.onMonthChangeStart(dir);\n const wrapperTranslate = calendar.monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? wrapperTranslate : 0}%, ${isH ? 0 : wrapperTranslate}%, 0)`);\n if (transitionEndCallback) {\n $wrapperEl.transitionEnd(() => {\n calendar.onMonthChangeEnd(dir, true);\n });\n }\n if (!params.animate || transition === 0) {\n calendar.onMonthChangeEnd(dir, true);\n }\n }\n nextYear() {\n const calendar = this;\n calendar.setYearMonth(calendar.currentYear + 1);\n }\n prevYear() {\n const calendar = this;\n calendar.setYearMonth(calendar.currentYear - 1);\n }\n // eslint-disable-next-line\n dateInRange(dayDate, range) {\n let match = false;\n let i;\n if (!range) return false;\n if (Array.isArray(range)) {\n for (i = 0; i < range.length; i += 1) {\n if (range[i].from || range[i].to) {\n if (range[i].from && range[i].to) {\n if (dayDate <= new Date(range[i].to).getTime() && dayDate >= new Date(range[i].from).getTime()) {\n match = true;\n }\n } else if (range[i].from) {\n if (dayDate >= new Date(range[i].from).getTime()) {\n match = true;\n }\n } else if (range[i].to) {\n if (dayDate <= new Date(range[i].to).getTime()) {\n match = true;\n }\n }\n } else if (range[i].date) {\n if (dayDate === new Date(range[i].date).getTime()) {\n match = true;\n }\n } else if (dayDate === new Date(range[i]).getTime()) {\n match = true;\n }\n }\n } else if (range.from || range.to) {\n if (range.from && range.to) {\n if (dayDate <= new Date(range.to).getTime() && dayDate >= new Date(range.from).getTime()) {\n match = true;\n }\n } else if (range.from) {\n if (dayDate >= new Date(range.from).getTime()) {\n match = true;\n }\n } else if (range.to) {\n if (dayDate <= new Date(range.to).getTime()) {\n match = true;\n }\n }\n } else if (range.date) {\n match = dayDate === new Date(range.date).getTime();\n } else if (typeof range === 'function') {\n match = range(new Date(dayDate));\n }\n return match;\n }\n // eslint-disable-next-line\n daysInMonth(date) {\n const d = new Date(date);\n return new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\n }\n renderMonths(date) {\n const calendar = this;\n if (calendar.params.renderMonths) {\n return calendar.params.renderMonths.call(calendar, date);\n }\n return $jsx(\"div\", {\n class: \"calendar-months-wrapper\"\n }, calendar.renderMonth(date, 'prev'), calendar.renderMonth(date), calendar.renderMonth(date, 'next'));\n }\n renderMonth(d, offset) {\n const calendar = this;\n const {\n params,\n value\n } = calendar;\n if (params.renderMonth) {\n return params.renderMonth.call(calendar, d, offset);\n }\n let date = new Date(d);\n let year = date.getFullYear();\n let month = date.getMonth();\n let localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter(date));\n if (localeMonth < 0) localeMonth = month;\n let localeYear = calendar.yearFormatter(date);\n if (offset === 'next') {\n if (month === 11) date = new Date(year + 1, 0);else date = new Date(year, month + 1, 1);\n }\n if (offset === 'prev') {\n if (month === 0) date = new Date(year - 1, 11);else date = new Date(year, month - 1, 1);\n }\n if (offset === 'next' || offset === 'prev') {\n month = date.getMonth();\n year = date.getFullYear();\n localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter(date));\n if (localeMonth < 0) localeMonth = month;\n localeYear = calendar.yearFormatter(date);\n }\n const currentValues = [];\n const today = new Date().setHours(0, 0, 0, 0);\n const minDate = params.minDate ? new Date(params.minDate).getTime() : null;\n const maxDate = params.maxDate ? new Date(params.maxDate).getTime() : null;\n const rows = 6;\n const cols = 7;\n const daysInPrevMonth = calendar.daysInMonth(new Date(date.getFullYear(), date.getMonth()).getTime() - 10 * 24 * 60 * 60 * 1000);\n const daysInMonth = calendar.daysInMonth(date);\n const minDayNumber = params.firstDay === 6 ? 0 : 1;\n let monthHtml = '';\n let dayIndex = 0 + (params.firstDay - 1);\n let disabled;\n let hasEvents;\n let firstDayOfMonthIndex = new Date(date.getFullYear(), date.getMonth()).getDay();\n if (firstDayOfMonthIndex === 0) firstDayOfMonthIndex = 7;\n if (value && value.length) {\n for (let i = 0; i < value.length; i += 1) {\n currentValues.push(new Date(value[i]).setHours(0, 0, 0, 0));\n }\n }\n for (let row = 1; row <= rows; row += 1) {\n let rowHtml = '';\n for (let col = 1; col <= cols; col += 1) {\n dayIndex += 1;\n let dayDate;\n let dayNumber = dayIndex - firstDayOfMonthIndex;\n let addClass = '';\n if (row === 1 && col === 1 && dayNumber > minDayNumber && params.firstDay !== 1) {\n dayIndex -= 7;\n dayNumber = dayIndex - firstDayOfMonthIndex;\n }\n const weekDayIndex = col - 1 + params.firstDay > 6 ? col - 1 - 7 + params.firstDay : col - 1 + params.firstDay;\n if (dayNumber < 0) {\n dayNumber = daysInPrevMonth + dayNumber + 1;\n addClass += ' calendar-day-prev';\n dayDate = new Date(month - 1 < 0 ? year - 1 : year, month - 1 < 0 ? 11 : month - 1, dayNumber).getTime();\n } else {\n dayNumber += 1;\n if (dayNumber > daysInMonth) {\n dayNumber -= daysInMonth;\n addClass += ' calendar-day-next';\n dayDate = new Date(month + 1 > 11 ? year + 1 : year, month + 1 > 11 ? 0 : month + 1, dayNumber).getTime();\n } else {\n dayDate = new Date(year, month, dayNumber).getTime();\n }\n }\n // Today\n if (dayDate === today) addClass += ' calendar-day-today';\n\n // Selected\n if (params.rangePicker && currentValues.length === 2) {\n if (dayDate >= currentValues[0] && dayDate <= currentValues[1]) {\n addClass += ' calendar-day-selected';\n }\n if (currentValues[0] !== currentValues[1]) {\n if (dayDate > currentValues[0] && dayDate < currentValues[1]) {\n addClass += ' calendar-day-selected-range';\n }\n if (dayDate === currentValues[0]) {\n addClass += ' calendar-day-selected-left';\n }\n if (dayDate === currentValues[1]) {\n addClass += ' calendar-day-selected-right';\n }\n }\n } else if (currentValues.indexOf(dayDate) >= 0) addClass += ' calendar-day-selected';\n // Weekend\n if (params.weekendDays.indexOf(weekDayIndex) >= 0) {\n addClass += ' calendar-day-weekend';\n }\n // Events\n let eventsHtml = '';\n hasEvents = false;\n if (params.events) {\n if (calendar.dateInRange(dayDate, params.events)) {\n hasEvents = true;\n }\n }\n if (hasEvents) {\n addClass += ' calendar-day-has-events';\n // prettier-ignore\n eventsHtml = `\n \n \n \n `;\n if (Array.isArray(params.events)) {\n const eventDots = [];\n params.events.forEach(ev => {\n const color = ev.color || '';\n if (eventDots.indexOf(color) < 0 && calendar.dateInRange(dayDate, ev)) {\n eventDots.push(color);\n }\n });\n // prettier-ignore\n eventsHtml = `\n \n ${eventDots.map(color => `\n \n `.trim()).join('')}\n \n `;\n }\n }\n // Custom Ranges\n if (params.rangesClasses) {\n for (let k = 0; k < params.rangesClasses.length; k += 1) {\n if (calendar.dateInRange(dayDate, params.rangesClasses[k].range)) {\n addClass += ` ${params.rangesClasses[k].cssClass}`;\n }\n }\n }\n // Disabled\n disabled = false;\n if (minDate && dayDate < minDate || maxDate && dayDate > maxDate) {\n disabled = true;\n }\n if (params.disabled) {\n if (calendar.dateInRange(dayDate, params.disabled)) {\n disabled = true;\n }\n }\n if (disabled) {\n addClass += ' calendar-day-disabled';\n }\n dayDate = new Date(dayDate);\n const dayYear = dayDate.getFullYear();\n const dayMonth = dayDate.getMonth();\n const dayNumberDisplay = calendar.dayFormatter(dayDate);\n // prettier-ignore\n rowHtml += `\n \n ${dayNumberDisplay}${eventsHtml}\n
`.trim();\n }\n monthHtml += `${rowHtml}
`;\n }\n monthHtml = `${monthHtml}
`;\n return monthHtml;\n }\n renderWeekHeader() {\n const calendar = this;\n if (calendar.params.renderWeekHeader) {\n return calendar.params.renderWeekHeader.call(calendar);\n }\n const {\n params\n } = calendar;\n let weekDaysHtml = '';\n for (let i = 0; i < 7; i += 1) {\n const dayIndex = i + params.firstDay > 6 ? i - 7 + params.firstDay : i + params.firstDay;\n const dayName = calendar.dayNamesShort[dayIndex];\n weekDaysHtml += `${dayName}
`;\n }\n return $jsx(\"div\", {\n class: \"calendar-week-header\"\n }, weekDaysHtml);\n }\n renderMonthSelector() {\n const calendar = this;\n if (calendar.params.renderMonthSelector) {\n return calendar.params.renderMonthSelector.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-month-selector\"\n }, $jsx(\"a\", {\n class: \"link icon-only calendar-prev-month-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-prev\"\n })), calendar.params.monthPicker ? $jsx(\"a\", {\n class: \"current-month-value link\"\n }) : $jsx(\"span\", {\n class: \"current-month-value\"\n }), $jsx(\"a\", {\n class: \"link icon-only calendar-next-month-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-next\"\n })));\n }\n renderYearSelector() {\n const calendar = this;\n if (calendar.params.renderYearSelector) {\n return calendar.params.renderYearSelector.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-year-selector\"\n }, $jsx(\"a\", {\n class: \"link icon-only calendar-prev-year-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-prev\"\n })), calendar.params.yearPicker ? $jsx(\"a\", {\n class: \"current-year-value link\"\n }) : $jsx(\"span\", {\n class: \"current-year-value\"\n }), $jsx(\"a\", {\n class: \"link icon-only calendar-next-year-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-next\"\n })));\n }\n\n // eslint-disable-next-line\n renderTimeSelector() {\n const calendar = this;\n const value = calendar.value && calendar.value[0];\n let timeString;\n if (value) timeString = calendar.timeSelectorFormatter(value);\n return $jsx(\"div\", {\n class: \"calendar-time-selector\"\n }, $jsx(\"span\", null, calendar.params.timePickerLabel), $jsx(\"a\", {\n class: \"link\"\n }, timeString || calendar.params.timePickerPlaceholder));\n }\n renderHeader() {\n const calendar = this;\n if (calendar.params.renderHeader) {\n return calendar.params.renderHeader.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-header\"\n }, $jsx(\"div\", {\n class: \"calendar-selected-date\"\n }, calendar.params.headerPlaceholder));\n }\n renderFooter() {\n const calendar = this;\n const app = calendar.app;\n if (calendar.params.renderFooter) {\n return calendar.params.renderFooter.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-footer\"\n }, $jsx(\"a\", {\n class: `${app.theme === 'md' ? 'button button-round' : 'link'} calendar-close sheet-close popover-close`\n }, calendar.params.toolbarCloseText));\n }\n renderToolbar() {\n const calendar = this;\n if (calendar.params.renderToolbar) {\n return calendar.params.renderToolbar.call(calendar, calendar);\n }\n // prettier-ignore\n return $jsx(\"div\", {\n class: \"toolbar toolbar-top\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, calendar.params.monthSelector ? calendar.renderMonthSelector() : '', calendar.params.yearSelector ? calendar.renderYearSelector() : ''));\n }\n // eslint-disable-next-line\n renderInline() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: `calendar calendar-inline ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());\n }\n renderCustomModal() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: `calendar calendar-modal ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());\n }\n renderSheet() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: `sheet-modal calendar calendar-sheet ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"sheet-modal-inner calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());\n }\n renderPopover() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: \"popover calendar-popover\"\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `calendar ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter())));\n }\n render() {\n const calendar = this;\n const {\n params\n } = calendar;\n if (params.render) return params.render.call(calendar);\n if (!calendar.inline) {\n let modalType = params.openIn;\n if (modalType === 'auto') modalType = calendar.isPopover() ? 'popover' : 'sheet';\n if (modalType === 'popover') return calendar.renderPopover();\n if (modalType === 'sheet') return calendar.renderSheet();\n return calendar.renderCustomModal();\n }\n return calendar.renderInline();\n }\n openMonthPicker() {\n const calendar = this;\n const {\n $el,\n app\n } = calendar;\n if (!$el || !$el.length) return;\n $el.append('');\n calendar.monthPickerPopover = app.popover.create({\n el: $el.find('.calendar-month-picker-popover'),\n targetEl: $el.find('.calendar-month-selector'),\n backdrop: true,\n backdropUnique: true,\n on: {\n close() {\n calendar.closeMonthPicker();\n },\n closed() {\n if (calendar.monthPickerPopover.$el) calendar.monthPickerPopover.$el.remove();\n calendar.monthPickerPopover.destroy();\n if (calendar.monthPickerInstance) {\n calendar.monthPickerInstance.close();\n calendar.monthPickerInstance.destroy();\n }\n delete calendar.monthPickerInstance;\n delete calendar.monthPickerPopover;\n }\n }\n });\n calendar.monthPickerPopover.open();\n const localeMonth = parseInt(calendar.$el.find('.calendar-month-current').attr('data-locale-month'), 10);\n const values = [];\n const displayValues = [];\n calendar.monthNames.forEach((m, index) => {\n values.push(index);\n displayValues.push(m);\n });\n calendar.monthPickerInstance = app.picker.create({\n containerEl: calendar.monthPickerPopover.$el.find('.calendar-month-picker'),\n value: [localeMonth],\n toolbar: calendar.params.monthPickerToolbar,\n rotateEffect: false,\n toolbarCloseText: calendar.params.monthPickerCloseText,\n cols: [{\n values,\n displayValues\n }]\n });\n }\n closeMonthPicker() {\n const calendar = this;\n if (calendar.monthPickerPopover && calendar.monthPickerPopover.opened) calendar.monthPickerPopover.close();\n const index = calendar.monthPickerInstance.value[0];\n const localeMonthIndex = parseInt(calendar.$el.find('.calendar-month-current').attr('data-locale-month'), 10);\n const monthIndex = calendar.currentMonth;\n const diff = localeMonthIndex - monthIndex;\n const diffIndex = index - diff;\n calendar.setYearMonth(calendar.currentYear, diffIndex, 0);\n }\n openYearPicker() {\n const calendar = this;\n const {\n $el,\n app\n } = calendar;\n if (!$el || !$el.length) return;\n $el.append('');\n calendar.yearPickerPopover = app.popover.create({\n el: $el.find('.calendar-year-picker-popover'),\n targetEl: $el.find('.calendar-year-selector'),\n backdrop: true,\n backdropUnique: true,\n on: {\n close() {\n calendar.closeYearPicker();\n },\n closed() {\n if (calendar.yearPickerPopover.$el) calendar.yearPickerPopover.$el.remove();\n calendar.yearPickerPopover.destroy();\n if (calendar.yearPickerInstance) {\n calendar.yearPickerInstance.close();\n calendar.yearPickerInstance.destroy();\n }\n delete calendar.yearPickerInstance;\n delete calendar.yearPickerPopover;\n }\n }\n });\n calendar.yearPickerPopover.open();\n const currentYear = calendar.currentYear;\n let yearMin = calendar.params.yearPickerMin || new Date().getFullYear() - 100;\n if (calendar.params.minDate) {\n yearMin = Math.max(yearMin, new Date(calendar.params.minDate).getFullYear());\n }\n let yearMax = calendar.params.yearPickerMax || new Date().getFullYear() + 100;\n if (calendar.params.maxDate) {\n yearMax = Math.min(yearMax, new Date(calendar.params.maxDate).getFullYear());\n }\n const years = [];\n for (let i = yearMin; i <= yearMax; i += 1) {\n years.push(i);\n }\n calendar.yearPickerInstance = app.picker.create({\n containerEl: calendar.yearPickerPopover.$el.find('.calendar-year-picker'),\n value: [currentYear],\n toolbar: calendar.params.yearPickerToolbar,\n rotateEffect: false,\n toolbarCloseText: calendar.params.yearPickerCloseText,\n cols: [{\n values: years\n }]\n });\n }\n closeYearPicker() {\n const calendar = this;\n if (calendar.yearPickerPopover && calendar.yearPickerPopover.opened) calendar.yearPickerPopover.close();\n calendar.setYearMonth(calendar.yearPickerInstance.value[0], undefined, 0);\n }\n openTimePicker() {\n const calendar = this;\n const {\n $el,\n app,\n is12HoursFormat\n } = calendar;\n if (!$el || !$el.length) return;\n $el.append('');\n const hoursArr = [];\n const minutesArr = [];\n const hoursMin = is12HoursFormat ? 1 : 0;\n const hoursMax = is12HoursFormat ? 12 : 23;\n for (let i = hoursMin; i <= hoursMax; i += 1) {\n hoursArr.push(i);\n }\n for (let i = 0; i <= 59; i += 1) {\n minutesArr.push(i);\n }\n let value;\n if (calendar.value && calendar.value.length) {\n value = [calendar.value[0].getHours(), calendar.value[0].getMinutes()];\n } else {\n value = [new Date().getHours(), new Date().getMinutes()];\n }\n if (is12HoursFormat) {\n value.push(value[0] < 12 ? 'AM' : 'PM');\n if (value[0] > 12) value[0] -= 12;\n if (value[0] === 0) value[0] = 12;\n }\n calendar.timePickerPopover = app.popover.create({\n el: $el.find('.calendar-time-picker-popover'),\n targetEl: $el.find('.calendar-time-selector .link'),\n backdrop: true,\n backdropUnique: true,\n on: {\n close() {\n calendar.closeTimePicker();\n },\n closed() {\n if (calendar.timePickerPopover.$el) calendar.timePickerPopover.$el.remove();\n calendar.timePickerPopover.destroy();\n if (calendar.timePickerInstance) {\n calendar.timePickerInstance.close();\n calendar.timePickerInstance.destroy();\n }\n delete calendar.timePickerInstance;\n delete calendar.timePickerPopover;\n }\n }\n });\n calendar.timePickerPopover.open();\n calendar.timePickerInstance = app.picker.create({\n containerEl: calendar.timePickerPopover.$el.find('.calendar-time-picker'),\n value,\n toolbar: calendar.params.timePickerToolbar,\n rotateEffect: false,\n toolbarCloseText: calendar.params.timePickerCloseText,\n cols: [{\n values: hoursArr\n }, {\n divider: true,\n content: ':'\n }, {\n values: minutesArr,\n displayValues: minutesArr.map(m => m < 10 ? `0${m}` : m)\n }, ...(is12HoursFormat ? [{\n values: ['AM', 'PM']\n }] : [])]\n });\n }\n closeTimePicker() {\n const calendar = this;\n const {\n is12HoursFormat\n } = calendar;\n if (calendar.timePickerInstance) {\n const timePickerValue = calendar.timePickerInstance.value;\n let hours = parseInt(timePickerValue[0], 10);\n const minutes = parseInt(timePickerValue[1], 10);\n const period = calendar.timePickerInstance.value[2];\n if (is12HoursFormat) {\n if (period === 'AM' && hours === 12) {\n hours = 0;\n } else if (period === 'PM' && hours !== 12) {\n hours += 12;\n }\n }\n let value = calendar.value && calendar.value.length && calendar.value[0];\n if (!value) {\n value = new Date();\n value.setHours(hours, minutes, 0, 0);\n } else {\n value = new Date(value);\n value.setHours(hours, minutes);\n }\n calendar.setValue([value]);\n if (calendar.timePickerPopover && calendar.timePickerPopover.opened) calendar.timePickerPopover.close();\n }\n }\n onOpen() {\n const calendar = this;\n const {\n initialized,\n $el,\n app,\n $inputEl,\n inline,\n value,\n params\n } = calendar;\n calendar.closing = false;\n calendar.opened = true;\n calendar.opening = true;\n\n // Init main events\n calendar.attachCalendarEvents();\n const updateValue = !value && params.value;\n\n // Set value\n if (!initialized) {\n if (value) calendar.setValue(value, 0);else if (params.value) {\n calendar.setValue(calendar.normalizeValues(params.value), 0);\n }\n } else if (value) {\n calendar.setValue(value, 0);\n }\n\n // Update current month and year\n calendar.updateCurrentMonthYear();\n\n // Set initial translate\n calendar.monthsTranslate = 0;\n calendar.setMonthsTranslate();\n\n // Update input value\n if (updateValue) calendar.updateValue();else if (params.header && value) {\n calendar.updateValue(true);\n }\n\n // Extra focus\n if (!inline && $inputEl && $inputEl.length && app.theme === 'md') {\n $inputEl.trigger('focus');\n }\n calendar.initialized = true;\n calendar.$months.each(monthEl => {\n calendar.emit('local::monthAdd calendarMonthAdd', monthEl);\n });\n\n // Trigger events\n if ($el) {\n $el.trigger('calendar:open');\n }\n if ($inputEl) {\n $inputEl.trigger('calendar:open');\n }\n calendar.emit('local::open calendarOpen', calendar);\n }\n onOpened() {\n const calendar = this;\n calendar.opening = false;\n if (calendar.$el) {\n calendar.$el.trigger('calendar:opened');\n }\n if (calendar.$inputEl) {\n calendar.$inputEl.trigger('calendar:opened');\n }\n calendar.emit('local::opened calendarOpened', calendar);\n }\n onClose() {\n const calendar = this;\n const app = calendar.app;\n calendar.opening = false;\n calendar.closing = true;\n if (calendar.$inputEl) {\n if (app.theme === 'md') {\n calendar.$inputEl.trigger('blur');\n } else {\n const validate = calendar.$inputEl.attr('validate');\n const required = calendar.$inputEl.attr('required');\n if (validate && required) {\n app.input.validate(calendar.$inputEl);\n }\n }\n }\n if (calendar.detachCalendarEvents) {\n calendar.detachCalendarEvents();\n }\n if (calendar.$el) {\n calendar.$el.trigger('calendar:close');\n }\n if (calendar.$inputEl) {\n calendar.$inputEl.trigger('calendar:close');\n }\n calendar.emit('local::close calendarClose', calendar);\n }\n onClosed() {\n const calendar = this;\n calendar.opened = false;\n calendar.closing = false;\n if (!calendar.inline) {\n nextTick(() => {\n if (calendar.modal && calendar.modal.el && calendar.modal.destroy) {\n if (!calendar.params.routableModals) {\n calendar.modal.destroy();\n }\n }\n delete calendar.modal;\n });\n }\n if (calendar.timePickerInstance) {\n if (calendar.timePickerInstance.destroy) calendar.timePickerInstance.destroy();\n delete calendar.timePickerInstance;\n }\n if (calendar.$el) {\n calendar.$el.trigger('calendar:closed');\n }\n if (calendar.$inputEl) {\n calendar.$inputEl.trigger('calendar:closed');\n }\n calendar.emit('local::closed calendarClosed', calendar);\n }\n open() {\n const calendar = this;\n const {\n app,\n opened,\n inline,\n $inputEl,\n params\n } = calendar;\n if (opened) return;\n if (inline) {\n calendar.$el = $(calendar.render());\n calendar.$el[0].f7Calendar = calendar;\n calendar.$wrapperEl = calendar.$el.find('.calendar-months-wrapper');\n calendar.$months = calendar.$wrapperEl.find('.calendar-month');\n calendar.$containerEl.append(calendar.$el);\n calendar.onOpen();\n calendar.onOpened();\n return;\n }\n let modalType = params.openIn;\n if (modalType === 'auto') {\n modalType = calendar.isPopover() ? 'popover' : 'sheet';\n }\n const modalContent = calendar.render();\n const modalParams = {\n targetEl: $inputEl,\n scrollToEl: params.scrollToInput ? $inputEl : undefined,\n content: modalContent,\n backdrop: params.backdrop === true || (modalType === 'popover' || modalType === 'customModal') && app.params.popover.backdrop !== false && params.backdrop !== false,\n closeByBackdropClick: params.closeByBackdropClick,\n on: {\n open() {\n const modal = this;\n calendar.modal = modal;\n calendar.$el = modalType === 'popover' ? modal.$el.find('.calendar') : modal.$el;\n calendar.$wrapperEl = calendar.$el.find('.calendar-months-wrapper');\n calendar.$months = calendar.$wrapperEl.find('.calendar-month');\n calendar.$el[0].f7Calendar = calendar;\n if (modalType === 'customModal') {\n $(calendar.$el).find('.calendar-close').once('click', () => {\n calendar.close();\n });\n }\n calendar.onOpen();\n },\n opened() {\n calendar.onOpened();\n },\n close() {\n calendar.onClose();\n },\n closed() {\n calendar.onClosed();\n }\n }\n };\n if (modalType === 'sheet') {\n modalParams.push = params.sheetPush;\n modalParams.swipeToClose = params.sheetSwipeToClose;\n }\n if (params.routableModals && calendar.view) {\n calendar.view.router.navigate({\n url: calendar.url,\n route: {\n path: calendar.url,\n [modalType]: modalParams\n }\n });\n } else {\n calendar.modal = app[modalType].create(modalParams);\n calendar.modal.open();\n }\n }\n close() {\n const calendar = this;\n const {\n opened,\n inline\n } = calendar;\n if (!opened) return;\n if (inline) {\n calendar.onClose();\n calendar.onClosed();\n return;\n }\n if (calendar.params.routableModals && calendar.view) {\n calendar.view.router.back();\n } else {\n calendar.modal.close();\n }\n }\n init() {\n const calendar = this;\n calendar.initInput();\n if (calendar.inline) {\n calendar.open();\n calendar.emit('local::init calendarInit', calendar);\n return;\n }\n if (!calendar.initialized && calendar.params.value) {\n calendar.setValue(calendar.normalizeValues(calendar.params.value));\n }\n\n // Attach input Events\n if (calendar.$inputEl) {\n calendar.attachInputEvents();\n }\n if (calendar.params.closeByOutsideClick) {\n calendar.attachHtmlEvents();\n }\n calendar.emit('local::init calendarInit', calendar);\n }\n destroy() {\n const calendar = this;\n if (calendar.destroyed) return;\n const {\n $el\n } = calendar;\n calendar.emit('local::beforeDestroy calendarBeforeDestroy', calendar);\n if ($el) $el.trigger('calendar:beforedestroy');\n calendar.close();\n\n // Detach Events\n if (calendar.$inputEl) {\n calendar.detachInputEvents();\n }\n if (calendar.params.closeByOutsideClick) {\n calendar.detachHtmlEvents();\n }\n if (calendar.timePickerInstance) {\n if (calendar.timePickerInstance.destroy) calendar.timePickerInstance.destroy();\n delete calendar.timePickerInstance;\n }\n if ($el && $el.length) delete calendar.$el[0].f7Calendar;\n deleteProps(calendar);\n calendar.destroyed = true;\n }\n}\nexport default Calendar;", "import ConstructorMethods from '../../shared/constructor-methods.js';\nimport Calendar from './calendar-class.js';\nimport $ from '../../shared/dom7.js';\nexport default {\n name: 'calendar',\n static: {\n Calendar\n },\n create() {\n const app = this;\n app.calendar = ConstructorMethods({\n defaultSelector: '.calendar',\n constructor: Calendar,\n app,\n domProp: 'f7Calendar'\n });\n app.calendar.close = function close(el) {\n if (el === void 0) {\n el = '.calendar';\n }\n const $el = $(el);\n if ($el.length === 0) return;\n const calendar = $el[0].f7Calendar;\n if (!calendar || calendar && !calendar.opened) return;\n calendar.close();\n };\n },\n params: {\n calendar: {\n // Calendar settings\n dateFormat: undefined,\n monthNames: 'auto',\n monthNamesShort: 'auto',\n dayNames: 'auto',\n dayNamesShort: 'auto',\n locale: undefined,\n firstDay: 1,\n // First day of the week, Monday\n weekendDays: [0, 6],\n // Sunday and Saturday\n multiple: false,\n rangePicker: false,\n rangePickerMinDays: 1,\n // when calendar is used as rangePicker\n rangePickerMaxDays: 0,\n // when calendar is used as rangePicker, 0 means unlimited\n direction: 'horizontal',\n // or 'vertical'\n minDate: null,\n maxDate: null,\n disabled: null,\n // dates range of disabled days\n events: null,\n // dates range of days with events\n rangesClasses: null,\n // array with custom classes date ranges\n touchMove: true,\n animate: true,\n closeOnSelect: false,\n monthSelector: true,\n monthPicker: true,\n monthPickerToolbar: true,\n monthPickerCloseText: 'Done',\n yearSelector: true,\n yearPicker: true,\n yearPickerToolbar: true,\n yearPickerMin: undefined,\n yearPickerMax: undefined,\n yearPickerCloseText: 'Done',\n timePicker: false,\n timePickerToolbar: true,\n timePickerLabel: 'Time',\n timePickerFormat: {\n hour: 'numeric',\n minute: 'numeric'\n },\n timePickerPlaceholder: 'Select time',\n timePickerCloseText: 'Done',\n weekHeader: true,\n value: null,\n // Common opener settings\n containerEl: null,\n openIn: 'auto',\n // or 'popover' or 'sheet' or 'customModal'\n sheetPush: false,\n sheetSwipeToClose: undefined,\n formatValue: null,\n inputEl: null,\n inputReadOnly: true,\n closeByOutsideClick: true,\n scrollToInput: true,\n header: false,\n headerPlaceholder: 'Select date',\n toolbar: true,\n toolbarCloseText: 'Done',\n footer: false,\n cssClass: null,\n routableModals: false,\n view: null,\n url: 'date/',\n backdrop: null,\n closeByBackdropClick: true,\n // Render functions\n renderWeekHeader: null,\n renderMonths: null,\n renderMonth: null,\n renderMonthSelector: null,\n renderYearSelector: null,\n renderHeader: null,\n renderFooter: null,\n renderToolbar: null,\n renderInline: null,\n renderPopover: null,\n renderSheet: null,\n render: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nexport default function pickerColumn(colEl, updateItems) {\n const picker = this;\n // const app = picker.app;\n const $colEl = $(colEl);\n const colIndex = $colEl.index();\n const col = picker.cols[colIndex];\n if (col.divider) return;\n col.$el = $colEl;\n col.el = $colEl[0];\n col.$itemsEl = col.$el.find('.picker-items');\n col.items = col.$itemsEl.find('.picker-item');\n let itemHeight;\n let colHeight;\n col.replaceValues = function replaceColValues(values, displayValues) {\n col.detachEvents();\n col.values = values;\n col.displayValues = displayValues;\n col.$itemsEl.html(picker.renderColumn(col, true));\n col.items = col.$itemsEl.find('.picker-item');\n col.calcSize();\n col.setValue(col.values[0], true);\n col.attachEvents();\n };\n col.calcSize = function calcColSize() {\n colHeight = col.$el[0].offsetHeight;\n itemHeight = col.items[0].offsetHeight;\n const hadPadding = col.el.style.getPropertyValue('--f7-picker-scroll-padding');\n col.el.style.setProperty('--f7-picker-scroll-padding', `${(colHeight - itemHeight) / 2}px`);\n if (!hadPadding) {\n col.$itemsEl[0].scrollTop = 0;\n }\n };\n col.setValue = function setColValue(newValue, valueCallbacks) {\n const newActiveIndex = col.$itemsEl.find(`.picker-item[data-picker-value=\"${newValue}\"]`).index();\n if (typeof newActiveIndex === 'undefined' || newActiveIndex === -1) {\n return;\n }\n const newScrollTop = newActiveIndex * itemHeight;\n col.$itemsEl[0].scrollTop = newScrollTop;\n\n // Update items\n col.updateItems(newActiveIndex, newScrollTop, valueCallbacks);\n };\n col.updateItems = function updateColItems(activeIndex, scrollTop, valueCallbacks) {\n if (typeof scrollTop === 'undefined') {\n // eslint-disable-next-line\n scrollTop = col.$itemsEl[0].scrollTop;\n }\n\n /* eslint-disable no-param-reassign */\n if (typeof activeIndex === 'undefined') {\n activeIndex = Math.round(scrollTop / itemHeight);\n }\n if (activeIndex < 0) activeIndex = 0;\n if (activeIndex >= col.items.length) activeIndex = col.items.length - 1;\n /* eslint-enable no-param-reassign */\n const previousActiveIndex = col.activeIndex;\n col.activeIndex = activeIndex;\n col.$itemsEl.find('.picker-item-selected').removeClass('picker-item-selected');\n const selectedItem = col.items.eq(activeIndex);\n selectedItem.addClass('picker-item-selected').children().transform('');\n // Set 3D rotate effect\n if (picker.params.rotateEffect) {\n col.items.each(itemEl => {\n const $itemEl = $(itemEl);\n const itemOffset = itemEl.offsetTop - (colHeight - itemHeight) / 2 - scrollTop;\n const percentage = itemOffset / itemHeight;\n const itemsFit = Math.ceil(col.height / itemHeight / 2) + 1;\n let angle = -24 * percentage;\n if (angle > 180) angle = 180;\n if (angle < -180) angle = -180;\n if (Math.abs(percentage) > itemsFit) {\n $itemEl.addClass('picker-item-far');\n } else {\n $itemEl.removeClass('picker-item-far');\n }\n $itemEl.children('span').transform(`translate3d(0, ${-percentage * itemHeight}px, -100px) rotateX(${angle}deg)`);\n });\n }\n if (valueCallbacks || typeof valueCallbacks === 'undefined') {\n // Update values\n col.value = selectedItem.attr('data-picker-value');\n col.displayValue = col.displayValues ? col.displayValues[activeIndex] : col.value;\n // On change callback\n if (previousActiveIndex !== activeIndex) {\n if (col.onChange) {\n col.onChange(picker, col.value, col.displayValue);\n }\n picker.updateValue();\n }\n }\n };\n function handleScroll() {\n col.updateItems();\n }\n function handleClick() {\n const value = $(this).attr('data-picker-value');\n col.setValue(value);\n }\n col.attachEvents = function attachColEvents() {\n col.$itemsEl.on('scroll', handleScroll);\n col.items.on('click', handleClick);\n };\n col.detachEvents = function detachColEvents() {\n col.items.off('click', handleClick);\n };\n col.init = function initCol() {\n col.calcSize();\n if (colIndex === 0) col.$el.addClass('picker-column-first');\n if (colIndex === picker.cols.length - 1) col.$el.addClass('picker-column-last');\n if (picker.params.freeMode) col.$el.addClass('picker-column-free-mode');\n // Update items on init\n if (updateItems) col.updateItems(0);\n col.attachEvents();\n };\n col.destroy = function destroyCol() {\n col.detachEvents();\n };\n col.init();\n}", "import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport pickerColumn from './picker-column.js';\n\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Picker extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const picker = this;\n const device = getDevice();\n const window = getWindow();\n picker.params = extend({}, app.params.picker, params);\n let $containerEl;\n if (picker.params.containerEl) {\n $containerEl = $(picker.params.containerEl);\n if ($containerEl.length === 0) return picker;\n }\n let $inputEl;\n if (picker.params.inputEl) {\n $inputEl = $(picker.params.inputEl);\n }\n let $scrollToEl = picker.params.scrollToInput ? $inputEl : undefined;\n if (picker.params.scrollToEl) {\n const scrollToEl = $(picker.params.scrollToEl);\n if (scrollToEl.length > 0) {\n $scrollToEl = scrollToEl;\n }\n }\n extend(picker, {\n app,\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n inline: $containerEl && $containerEl.length > 0,\n needsOriginFix: device.ios || window.navigator.userAgent.toLowerCase().indexOf('safari') >= 0 && window.navigator.userAgent.toLowerCase().indexOf('chrome') < 0 && !device.android,\n cols: [],\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n $scrollToEl,\n initialized: false,\n opened: false,\n url: picker.params.url\n });\n function onResize() {\n picker.resizeCols();\n }\n function onInputClick() {\n picker.open();\n }\n function onInputFocus(e) {\n e.preventDefault();\n }\n let htmlTouchStartTarget = null;\n function onHtmlTouchStart(e) {\n htmlTouchStartTarget = e.target;\n }\n function onHtmlClick(e) {\n if (picker.destroyed || !picker.params) return;\n const $targetEl = $(e.target);\n if (picker.isPopover()) return;\n if (!picker.opened || picker.closing) return;\n if ($targetEl.closest('[class*=\"backdrop\"]').length) return;\n if ($inputEl && $inputEl.length > 0) {\n if (htmlTouchStartTarget === e.target && $targetEl[0] !== $inputEl[0] && $targetEl.closest('.sheet-modal').length === 0) {\n picker.close();\n }\n } else if ($(e.target).closest('.sheet-modal').length === 0) {\n picker.close();\n }\n }\n\n // Events\n extend(picker, {\n attachResizeEvent() {\n app.on('resize', onResize);\n },\n detachResizeEvent() {\n app.off('resize', onResize);\n },\n attachInputEvents() {\n picker.$inputEl.on('click', onInputClick);\n if (picker.params.inputReadOnly) {\n picker.$inputEl.on('focus mousedown', onInputFocus);\n if (picker.$inputEl[0]) {\n picker.$inputEl[0].f7ValidateReadonly = true;\n }\n }\n },\n detachInputEvents() {\n picker.$inputEl.off('click', onInputClick);\n if (picker.params.inputReadOnly) {\n picker.$inputEl.off('focus mousedown', onInputFocus);\n if (picker.$inputEl[0]) {\n delete picker.$inputEl[0].f7ValidateReadonly;\n }\n }\n },\n attachHtmlEvents() {\n app.on('click', onHtmlClick);\n app.on('touchstart', onHtmlTouchStart);\n },\n detachHtmlEvents() {\n app.off('click', onHtmlClick);\n app.off('touchstart', onHtmlTouchStart);\n }\n });\n picker.init();\n return picker;\n }\n get view() {\n const {\n app,\n params,\n $inputEl\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n } else if ($inputEl) {\n view = $inputEl.parents('.view').length && $inputEl.parents('.view')[0].f7View;\n }\n if (!view) view = app.views.main;\n return view;\n }\n initInput() {\n const picker = this;\n if (!picker.$inputEl) return;\n if (picker.params.inputReadOnly) picker.$inputEl.prop('readOnly', true);\n }\n resizeCols() {\n const picker = this;\n if (!picker.opened) return;\n for (let i = 0; i < picker.cols.length; i += 1) {\n if (!picker.cols[i].divider) {\n picker.cols[i].calcSize();\n picker.cols[i].setValue(picker.cols[i].value, false);\n }\n }\n }\n isPopover() {\n const picker = this;\n const {\n app,\n modal,\n params\n } = picker;\n const device = getDevice();\n if (params.openIn === 'sheet') return false;\n if (modal && modal.type !== 'popover') return false;\n if (!picker.inline && picker.inputEl) {\n if (params.openIn === 'popover') return true;\n if (device.ios) {\n return !!device.ipad;\n }\n if (app.width >= 768) {\n return true;\n }\n }\n return false;\n }\n formatValue() {\n const picker = this;\n const {\n value,\n displayValue\n } = picker;\n if (picker.params.formatValue) {\n return picker.params.formatValue.call(picker, value, displayValue);\n }\n return value.join(' ');\n }\n setValue(values) {\n const picker = this;\n let valueIndex = 0;\n if (picker.cols.length === 0) {\n picker.value = values;\n picker.updateValue(values);\n return;\n }\n for (let i = 0; i < picker.cols.length; i += 1) {\n if (picker.cols[i] && !picker.cols[i].divider) {\n picker.cols[i].setValue(values[valueIndex]);\n valueIndex += 1;\n }\n }\n }\n getValue() {\n const picker = this;\n return picker.value;\n }\n updateValue(forceValues) {\n const picker = this;\n const newValue = forceValues || [];\n const newDisplayValue = [];\n let column;\n if (picker.cols.length === 0) {\n const noDividerColumns = picker.params.cols.filter(c => !c.divider);\n for (let i = 0; i < noDividerColumns.length; i += 1) {\n column = noDividerColumns[i];\n if (column.displayValues !== undefined && column.values !== undefined && column.values.indexOf(newValue[i]) !== -1) {\n newDisplayValue.push(column.displayValues[column.values.indexOf(newValue[i])]);\n } else {\n newDisplayValue.push(newValue[i]);\n }\n }\n } else {\n for (let i = 0; i < picker.cols.length; i += 1) {\n if (!picker.cols[i].divider) {\n newValue.push(picker.cols[i].value);\n newDisplayValue.push(picker.cols[i].displayValue);\n }\n }\n }\n if (newValue.indexOf(undefined) >= 0) {\n return;\n }\n picker.value = newValue;\n picker.displayValue = newDisplayValue;\n picker.emit('local::change pickerChange', picker, picker.value, picker.displayValue);\n if (picker.inputEl) {\n picker.$inputEl.val(picker.formatValue());\n picker.$inputEl.trigger('change');\n }\n }\n initColumn(colEl, updateItems) {\n const picker = this;\n pickerColumn.call(picker, colEl, updateItems);\n }\n // eslint-disable-next-line\n destroyColumn(colEl) {\n const picker = this;\n const $colEl = $(colEl);\n const index = $colEl.index();\n if (picker.cols[index] && picker.cols[index].destroy) {\n picker.cols[index].destroy();\n }\n }\n renderToolbar() {\n const picker = this;\n if (picker.params.renderToolbar) return picker.params.renderToolbar.call(picker, picker);\n return $jsx(\"div\", {\n class: \"toolbar toolbar-top\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"div\", {\n class: \"left\"\n }), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link sheet-close popover-close\"\n }, picker.params.toolbarCloseText))));\n }\n // eslint-disable-next-line\n renderColumn(col, onlyItems) {\n const colClasses = `picker-column ${col.textAlign ? `picker-column-${col.textAlign}` : ''} ${col.cssClass || ''}`;\n let columnHtml;\n let columnItemsHtml;\n if (col.divider) {\n // prettier-ignore\n columnHtml = `\n ${col.content}
\n `;\n } else {\n // prettier-ignore\n columnItemsHtml = col.values.map((value, index) => `\n \n ${col.displayValues ? col.displayValues[index] : value}\n
\n `).join('');\n // prettier-ignore\n columnHtml = `\n \n `;\n }\n return onlyItems ? columnItemsHtml.trim() : columnHtml.trim();\n }\n renderInline() {\n const picker = this;\n const {\n rotateEffect,\n cssClass,\n toolbar\n } = picker.params;\n const inlineHtml = $jsx(\"div\", {\n class: `picker picker-inline ${rotateEffect ? 'picker-3d' : ''} ${cssClass || ''}`\n }, toolbar && picker.renderToolbar(), $jsx(\"div\", {\n class: \"picker-columns\"\n }, picker.cols.map(col => picker.renderColumn(col)), $jsx(\"div\", {\n class: \"picker-center-highlight\"\n })));\n return inlineHtml;\n }\n renderSheet() {\n const picker = this;\n const {\n rotateEffect,\n cssClass,\n toolbar\n } = picker.params;\n const sheetHtml = $jsx(\"div\", {\n class: `sheet-modal picker picker-sheet ${rotateEffect ? 'picker-3d' : ''} ${cssClass || ''}`\n }, toolbar && picker.renderToolbar(), $jsx(\"div\", {\n class: \"sheet-modal-inner picker-columns\"\n }, picker.cols.map(col => picker.renderColumn(col)), $jsx(\"div\", {\n class: \"picker-center-highlight\"\n })));\n return sheetHtml;\n }\n renderPopover() {\n const picker = this;\n const {\n rotateEffect,\n cssClass,\n toolbar\n } = picker.params;\n const popoverHtml = $jsx(\"div\", {\n class: \"popover picker-popover\"\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `picker ${rotateEffect ? 'picker-3d' : ''} ${cssClass || ''}`\n }, toolbar && picker.renderToolbar(), $jsx(\"div\", {\n class: \"picker-columns\"\n }, picker.cols.map(col => picker.renderColumn(col)), $jsx(\"div\", {\n class: \"picker-center-highlight\"\n })))));\n return popoverHtml;\n }\n render() {\n const picker = this;\n if (picker.params.render) return picker.params.render.call(picker);\n if (!picker.inline) {\n if (picker.isPopover()) return picker.renderPopover();\n return picker.renderSheet();\n }\n return picker.renderInline();\n }\n onOpen() {\n const picker = this;\n const {\n initialized,\n $el,\n app,\n $inputEl,\n inline,\n value,\n params\n } = picker;\n picker.opened = true;\n picker.closing = false;\n picker.opening = true;\n\n // Init main events\n picker.attachResizeEvent();\n\n // Init cols\n $el.find('.picker-column').each(colEl => {\n let updateItems = true;\n if (!initialized && params.value || initialized && value) {\n updateItems = false;\n }\n picker.initColumn(colEl, updateItems);\n });\n\n // Set value\n if (!initialized) {\n if (value) picker.setValue(value);else if (params.value) {\n picker.setValue(params.value);\n }\n } else if (value) {\n picker.setValue(value);\n }\n\n // Extra focus\n if (!inline && $inputEl && $inputEl.length && app.theme === 'md') {\n $inputEl.trigger('focus');\n }\n picker.initialized = true;\n\n // Trigger events\n if ($el) {\n $el.trigger('picker:open');\n }\n if ($inputEl) {\n $inputEl.trigger('picker:open');\n }\n picker.emit('local::open pickerOpen', picker);\n }\n onOpened() {\n const picker = this;\n picker.opening = false;\n if (picker.$el) {\n picker.$el.trigger('picker:opened');\n }\n if (picker.$inputEl) {\n picker.$inputEl.trigger('picker:opened');\n }\n picker.emit('local::opened pickerOpened', picker);\n }\n onClose() {\n const picker = this;\n const app = picker.app;\n picker.opening = false;\n picker.closing = true;\n\n // Detach events\n picker.detachResizeEvent();\n picker.cols.forEach(col => {\n if (col.destroy) col.destroy();\n });\n if (picker.$inputEl) {\n if (app.theme === 'md') {\n picker.$inputEl.trigger('blur');\n } else {\n const validate = picker.$inputEl.attr('validate');\n const required = picker.$inputEl.attr('required');\n if (validate && required) {\n app.input.validate(picker.$inputEl);\n }\n }\n }\n if (picker.$el) {\n picker.$el.trigger('picker:close');\n }\n if (picker.$inputEl) {\n picker.$inputEl.trigger('picker:close');\n }\n picker.emit('local::close pickerClose', picker);\n }\n onClosed() {\n const picker = this;\n picker.opened = false;\n picker.closing = false;\n if (!picker.inline) {\n nextTick(() => {\n if (picker.modal && picker.modal.el && picker.modal.destroy) {\n if (!picker.params.routableModals) {\n picker.modal.destroy();\n }\n }\n delete picker.modal;\n });\n }\n if (picker.$el) {\n picker.$el.trigger('picker:closed');\n }\n if (picker.$inputEl) {\n picker.$inputEl.trigger('picker:closed');\n }\n picker.emit('local::closed pickerClosed', picker);\n }\n open() {\n const picker = this;\n const {\n app,\n opened,\n inline,\n $inputEl,\n $scrollToEl,\n params\n } = picker;\n if (opened) return;\n if (picker.cols.length === 0 && params.cols.length) {\n params.cols.forEach(col => {\n picker.cols.push(col);\n });\n }\n if (inline) {\n picker.$el = $(picker.render());\n picker.$el[0].f7Picker = picker;\n picker.$containerEl.append(picker.$el);\n picker.onOpen();\n picker.onOpened();\n return;\n }\n const isPopover = picker.isPopover();\n const modalType = isPopover ? 'popover' : 'sheet';\n const modalParams = {\n targetEl: $inputEl,\n scrollToEl: $scrollToEl,\n content: picker.render(),\n backdrop: typeof params.backdrop !== 'undefined' ? params.backdrop : isPopover,\n on: {\n open() {\n const modal = this;\n picker.modal = modal;\n picker.$el = isPopover ? modal.$el.find('.picker') : modal.$el;\n picker.$el[0].f7Picker = picker;\n picker.onOpen();\n },\n opened() {\n picker.onOpened();\n },\n close() {\n picker.onClose();\n },\n closed() {\n picker.onClosed();\n }\n }\n };\n if (modalType === 'sheet') {\n modalParams.push = params.sheetPush;\n modalParams.swipeToClose = params.sheetSwipeToClose;\n }\n if (params.routableModals && picker.view) {\n picker.view.router.navigate({\n url: picker.url,\n route: {\n path: picker.url,\n [modalType]: modalParams\n }\n });\n } else {\n picker.modal = app[modalType].create(modalParams);\n picker.modal.open();\n }\n }\n close() {\n const picker = this;\n const {\n opened,\n inline\n } = picker;\n if (!opened) return;\n if (inline) {\n picker.onClose();\n picker.onClosed();\n return;\n }\n if (picker.params.routableModals && picker.view) {\n picker.view.router.back();\n } else {\n picker.modal.close();\n }\n }\n init() {\n const picker = this;\n picker.initInput();\n if (picker.inline) {\n picker.open();\n picker.emit('local::init pickerInit', picker);\n return;\n }\n if (!picker.initialized && picker.params.value) {\n picker.setValue(picker.params.value);\n }\n\n // Attach input Events\n if (picker.$inputEl) {\n picker.attachInputEvents();\n }\n if (picker.params.closeByOutsideClick) {\n picker.attachHtmlEvents();\n }\n picker.emit('local::init pickerInit', picker);\n }\n destroy() {\n const picker = this;\n if (picker.destroyed) return;\n const {\n $el\n } = picker;\n picker.emit('local::beforeDestroy pickerBeforeDestroy', picker);\n if ($el) $el.trigger('picker:beforedestroy');\n picker.close();\n\n // Detach Events\n if (picker.$inputEl) {\n picker.detachInputEvents();\n }\n if (picker.params.closeByOutsideClick) {\n picker.detachHtmlEvents();\n }\n if ($el && $el.length) delete picker.$el[0].f7Picker;\n deleteProps(picker);\n picker.destroyed = true;\n }\n}\nexport default Picker;", "import $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport Picker from './picker-class.js';\nexport default {\n name: 'picker',\n static: {\n Picker\n },\n create() {\n const app = this;\n app.picker = ConstructorMethods({\n defaultSelector: '.picker',\n constructor: Picker,\n app,\n domProp: 'f7Picker'\n });\n app.picker.close = function close(el) {\n if (el === void 0) {\n el = '.picker';\n }\n const $el = $(el);\n if ($el.length === 0) return;\n const picker = $el[0].f7Picker;\n if (!picker || picker && !picker.opened) return;\n picker.close();\n };\n },\n params: {\n picker: {\n // Picker settings\n rotateEffect: false,\n freeMode: false,\n cols: [],\n // Common opener settings\n containerEl: null,\n openIn: 'auto',\n // or 'popover' or 'sheet'\n sheetPush: false,\n sheetSwipeToClose: undefined,\n backdrop: undefined,\n // uses Popover or Sheet defaults\n formatValue: null,\n inputEl: null,\n inputReadOnly: true,\n closeByOutsideClick: true,\n scrollToInput: true,\n scrollToEl: undefined,\n toolbar: true,\n toolbarCloseText: 'Done',\n cssClass: null,\n routableModals: false,\n view: null,\n url: 'select/',\n // Render functions\n renderToolbar: null,\n render: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nconst InfiniteScroll = {\n handle(el, e) {\n const app = this;\n const $el = $(el);\n const scrollTop = $el[0].scrollTop;\n const scrollHeight = $el[0].scrollHeight;\n const height = $el[0].offsetHeight;\n let distance = $el[0].getAttribute('data-infinite-distance');\n const virtualListContainer = $el.find('.virtual-list');\n let virtualList;\n const onTop = $el.hasClass('infinite-scroll-top');\n if (!distance) distance = 50;\n if (typeof distance === 'string' && distance.indexOf('%') >= 0) {\n distance = parseInt(distance, 10) / 100 * height;\n }\n if (distance > height) distance = height;\n if (onTop) {\n if (scrollTop < distance) {\n $el.trigger('infinite', e);\n app.emit('infinite', $el[0], e);\n }\n } else if (scrollTop + height >= scrollHeight - distance) {\n if (virtualListContainer.length > 0) {\n virtualList = virtualListContainer.eq(-1)[0].f7VirtualList;\n if (virtualList && !virtualList.reachEnd && !virtualList.params.updatableScroll) {\n return;\n }\n }\n $el.trigger('infinite', e);\n app.emit('infinite', $el[0], e);\n }\n },\n create(el) {\n const $el = $(el);\n const app = this;\n function scrollHandler(e) {\n app.infiniteScroll.handle(this, e);\n }\n $el.each(element => {\n element.f7InfiniteScrollHandler = scrollHandler;\n element.addEventListener('scroll', element.f7InfiniteScrollHandler);\n });\n },\n destroy(el) {\n const $el = $(el);\n $el.each(element => {\n element.removeEventListener('scroll', element.f7InfiniteScrollHandler);\n delete element.f7InfiniteScrollHandler;\n });\n }\n};\nexport default {\n name: 'infiniteScroll',\n create() {\n const app = this;\n bindMethods(app, {\n infiniteScroll: InfiniteScroll\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n const $tabEl = $(tabEl);\n const $isEls = $tabEl.find('.infinite-scroll-content');\n if ($tabEl.is('.infinite-scroll-content')) $isEls.add($tabEl);\n $isEls.each(el => {\n app.infiniteScroll.create(el);\n });\n },\n tabBeforeRemove(tabEl) {\n const $tabEl = $(tabEl);\n const app = this;\n const $isEls = $tabEl.find('.infinite-scroll-content');\n if ($tabEl.is('.infinite-scroll-content')) $isEls.add($tabEl);\n $isEls.each(el => {\n app.infiniteScroll.destroy(el);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.infinite-scroll-content').each(el => {\n app.infiniteScroll.create(el);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.infinite-scroll-content').each(el => {\n app.infiniteScroll.destroy(el);\n });\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nclass PullToRefresh extends Framework7Class {\n constructor(app, el) {\n super({}, [app]);\n const ptr = this;\n const device = getDevice();\n const support = getSupport();\n const $el = $(el);\n const $preloaderEl = $el.find('.ptr-preloader');\n ptr.$el = $el;\n ptr.el = $el[0];\n ptr.app = app;\n ptr.bottom = ptr.$el.hasClass('ptr-bottom');\n\n // Extend defaults with modules params\n ptr.useModulesParams({});\n const isMaterial = app.theme === 'md';\n const isIos = app.theme === 'ios';\n\n // Done\n ptr.done = function done() {\n const $transitionTarget = isMaterial ? $preloaderEl : $el;\n const onTranstionEnd = e => {\n if ($(e.target).closest($preloaderEl).length) return;\n $el.removeClass('ptr-transitioning ptr-pull-up ptr-pull-down ptr-closing');\n $el.trigger('ptr:done');\n ptr.emit('local::done ptrDone', $el[0]);\n $transitionTarget.off('transitionend', onTranstionEnd);\n };\n $transitionTarget.on('transitionend', onTranstionEnd);\n $el.removeClass('ptr-refreshing').addClass('ptr-transitioning ptr-closing');\n return ptr;\n };\n ptr.refresh = function refresh() {\n if ($el.hasClass('ptr-refreshing')) return ptr;\n $el.addClass('ptr-transitioning ptr-refreshing');\n $el.trigger('ptr:refresh', ptr.done);\n ptr.emit('local::refresh ptrRefresh', $el[0], ptr.done);\n return ptr;\n };\n\n // Mousewheel\n ptr.mousewheel = $el.attr('data-ptr-mousewheel') === 'true';\n\n // Events handling\n let touchId;\n let isTouched;\n let isMoved;\n const touchesStart = {};\n let isScrolling;\n let touchesDiff;\n let refresh = false;\n let useTranslate = false;\n let forceUseTranslate = false;\n let startTranslate = 0;\n let translate;\n let scrollTop;\n let wasScrolled;\n let triggerDistance;\n let dynamicTriggerDistance;\n let pullStarted;\n let hasNavbar = false;\n let scrollHeight;\n let offsetHeight;\n let maxScrollTop;\n const $pageEl = $el.parents('.page');\n if ($pageEl.find('.navbar').length > 0 || $pageEl.parents('.view').children('.navbars').length > 0) hasNavbar = true;\n if ($pageEl.hasClass('no-navbar')) hasNavbar = false;\n if (!ptr.bottom) {\n const pageNavbarEl = app.navbar.getElByPage($pageEl[0]);\n if (pageNavbarEl) {\n const $pageNavbarEl = $(pageNavbarEl);\n const isLargeTransparent = $pageNavbarEl.hasClass('navbar-large-transparent') || $pageNavbarEl.hasClass('navbar-large') && $pageNavbarEl.hasClass('navbar-transparent');\n const isTransparent = $pageNavbarEl.hasClass('navbar-transparent') && !$pageNavbarEl.hasClass('navbar-large');\n if (isLargeTransparent) {\n $el.addClass('ptr-with-navbar-large-transparent');\n } else if (isTransparent) {\n $el.addClass('ptr-with-navbar-transparent');\n }\n }\n }\n if (!hasNavbar && !ptr.bottom) $el.addClass('ptr-no-navbar');\n\n // Define trigger distance\n if ($el.attr('data-ptr-distance')) {\n dynamicTriggerDistance = true;\n } else if (isMaterial) {\n triggerDistance = 66;\n } else if (isIos) {\n triggerDistance = 44;\n }\n function setPreloaderProgress(progress) {\n if (progress === void 0) {\n progress = 0;\n }\n const $bars = $preloaderEl.find('.preloader-inner-line');\n const perBarProgress = 1 / $bars.length;\n $bars.forEach((barEl, barIndex) => {\n const barProgress = (progress - barIndex * perBarProgress) / perBarProgress;\n barEl.style.opacity = Math.max(Math.min(barProgress, 1), 0) * 0.27;\n });\n }\n function unsetPreloaderProgress() {\n $preloaderEl.find('.preloader-inner-line').css('opacity', '');\n }\n function handleTouchStart(e) {\n if (!e.isTrusted) return;\n if (isTouched) {\n if (device.os === 'android') {\n if ('targetTouches' in e && e.targetTouches.length > 1) return;\n } else return;\n }\n if ($el.hasClass('ptr-refreshing')) {\n return;\n }\n if ($(e.target).closest('.sortable-handler, .ptr-ignore, .card-expandable.card-opened').length) return;\n isMoved = false;\n pullStarted = false;\n isTouched = true;\n isScrolling = undefined;\n wasScrolled = undefined;\n if (e.type === 'touchstart') touchId = e.targetTouches[0].identifier;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n let pageX;\n let pageY;\n let touch;\n if (e.type === 'touchmove') {\n if (touchId && e.touches) {\n for (let i = 0; i < e.touches.length; i += 1) {\n if (e.touches[i].identifier === touchId) {\n touch = e.touches[i];\n }\n }\n }\n if (!touch) touch = e.targetTouches[0];\n pageX = touch.pageX;\n pageY = touch.pageY;\n } else {\n pageX = e.pageX;\n pageY = e.pageY;\n }\n if (!pageX || !pageY) return;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (!isScrolling) {\n isTouched = false;\n return;\n }\n scrollTop = $el[0].scrollTop;\n if (!isMoved) {\n $el.removeClass('ptr-transitioning');\n if (isIos) {\n setPreloaderProgress(0);\n }\n let targetIsScrollable;\n scrollHeight = $el[0].scrollHeight;\n offsetHeight = $el[0].offsetHeight;\n if (ptr.bottom) {\n maxScrollTop = scrollHeight - offsetHeight;\n }\n if (scrollTop > scrollHeight) {\n isTouched = false;\n return;\n }\n const $ptrWatchScrollable = $(e.target).closest('.ptr-watch-scroll');\n if ($ptrWatchScrollable.length) {\n $ptrWatchScrollable.each(ptrScrollableEl => {\n if (ptrScrollableEl === el) return;\n if (ptrScrollableEl.scrollHeight > ptrScrollableEl.offsetHeight && $(ptrScrollableEl).css('overflow') === 'auto' && (!ptr.bottom && ptrScrollableEl.scrollTop > 0 || ptr.bottom && ptrScrollableEl.scrollTop < ptrScrollableEl.scrollHeight - ptrScrollableEl.offsetHeight)) {\n targetIsScrollable = true;\n }\n });\n }\n if (targetIsScrollable) {\n isTouched = false;\n return;\n }\n if (dynamicTriggerDistance) {\n triggerDistance = $el.attr('data-ptr-distance');\n if (triggerDistance.indexOf('%') >= 0) triggerDistance = scrollHeight * parseInt(triggerDistance, 10) / 100;\n }\n startTranslate = $el.hasClass('ptr-refreshing') ? triggerDistance : 0;\n if (scrollHeight === offsetHeight || device.os !== 'ios' || isMaterial) {\n useTranslate = true;\n } else {\n useTranslate = false;\n }\n forceUseTranslate = false;\n }\n isMoved = true;\n touchesDiff = pageY - touchesStart.y;\n if (typeof wasScrolled === 'undefined' && (ptr.bottom ? scrollTop !== maxScrollTop : scrollTop !== 0)) wasScrolled = true;\n const ptrStarted = ptr.bottom ? touchesDiff < 0 && scrollTop >= maxScrollTop || scrollTop > maxScrollTop : touchesDiff > 0 && scrollTop <= 0 || scrollTop < 0;\n if (ptrStarted) {\n // iOS 8 fix\n if (device.os === 'ios' && parseInt(device.osVersion.split('.')[0], 10) > 7) {\n if (!ptr.bottom && scrollTop === 0 && !wasScrolled) useTranslate = true;\n if (ptr.bottom && scrollTop === maxScrollTop && !wasScrolled) useTranslate = true;\n }\n if (!useTranslate && ptr.bottom && !isMaterial) {\n $el.css('-webkit-overflow-scrolling', 'auto');\n $el.scrollTop(maxScrollTop);\n forceUseTranslate = true;\n }\n if (useTranslate || forceUseTranslate) {\n if (e.cancelable) {\n e.preventDefault();\n }\n translate = (ptr.bottom ? -1 * Math.abs(touchesDiff) ** 0.85 : touchesDiff ** 0.85) + startTranslate;\n if (isMaterial) {\n $preloaderEl.transform(`translate3d(0,${translate}px,0)`).find('.ptr-arrow').transform(`rotate(${180 * (Math.abs(touchesDiff) / 66) + 100}deg)`);\n } else {\n // eslint-disable-next-line\n if (ptr.bottom || isIos) {\n $el.children().transform(`translate3d(0,${translate}px,0)`);\n } else {\n // eslint-disable-next-line\n $el.transform(`translate3d(0,${translate}px,0)`);\n }\n if (isIos) {\n $preloaderEl.transform(`translate3d(0,0px,0)`);\n }\n }\n } else if (isIos && !ptr.bottom) {\n $preloaderEl.transform(`translate3d(0,${scrollTop}px,0)`);\n }\n let progress;\n if (isIos && !refresh) {\n progress = useTranslate || forceUseTranslate ? Math.abs(touchesDiff) ** 0.85 / triggerDistance : Math.abs(touchesDiff) / (triggerDistance * 2);\n setPreloaderProgress(progress);\n }\n if ((useTranslate || forceUseTranslate) && Math.abs(touchesDiff) ** 0.85 > triggerDistance || !useTranslate && Math.abs(touchesDiff) >= triggerDistance * 2) {\n refresh = true;\n $el.addClass('ptr-pull-up').removeClass('ptr-pull-down');\n unsetPreloaderProgress();\n } else {\n refresh = false;\n $el.removeClass('ptr-pull-up').addClass('ptr-pull-down');\n }\n if (!pullStarted) {\n $el.trigger('ptr:pullstart');\n ptr.emit('local::pullStart ptrPullStart', $el[0]);\n pullStarted = true;\n }\n $el.trigger('ptr:pullmove', {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n ptr.emit('local::pullMove ptrPullMove', $el[0], {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n } else {\n pullStarted = false;\n $el.removeClass('ptr-pull-up ptr-pull-down');\n refresh = false;\n }\n }\n function handleTouchEnd(e) {\n if (!e.isTrusted) return;\n if (e.type === 'touchend' && e.changedTouches && e.changedTouches.length > 0 && touchId) {\n if (e.changedTouches[0].identifier !== touchId) {\n isTouched = false;\n isScrolling = false;\n isMoved = false;\n touchId = null;\n return;\n }\n }\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n if (translate) {\n $el.addClass('ptr-transitioning');\n translate = 0;\n }\n if (isMaterial) {\n $preloaderEl.transform('').find('.ptr-arrow').transform('');\n } else {\n $preloaderEl.transform('');\n if (ptr.bottom || isIos) {\n $el.children().transform('');\n } else {\n $el.transform('');\n }\n }\n if (!useTranslate && ptr.bottom && !isMaterial) {\n $el.css('-webkit-overflow-scrolling', '');\n }\n if (refresh) {\n $el.addClass('ptr-refreshing');\n $el.trigger('ptr:refresh', ptr.done);\n ptr.emit('local::refresh ptrRefresh', $el[0], ptr.done);\n } else {\n $el.removeClass('ptr-pull-down');\n }\n isTouched = false;\n isMoved = false;\n if (pullStarted) {\n $el.trigger('ptr:pullend');\n ptr.emit('local::pullEnd ptrPullEnd', $el[0]);\n }\n }\n let mousewheelTimeout;\n let mousewheelMoved;\n let mousewheelAllow = true;\n let mousewheelTranslate = 0;\n function handleMouseWheelRelease() {\n mousewheelAllow = true;\n mousewheelMoved = false;\n mousewheelTranslate = 0;\n if (translate) {\n $el.addClass('ptr-transitioning');\n translate = 0;\n }\n if (isMaterial) {\n $preloaderEl.transform('').find('.ptr-arrow').transform('');\n } else {\n $preloaderEl.transform('');\n if (ptr.bottom) {\n $el.children().transform('');\n } else {\n $el.transform('');\n }\n }\n if (refresh) {\n $el.addClass('ptr-refreshing');\n $el.trigger('ptr:refresh', ptr.done);\n ptr.emit('local::refresh ptrRefresh', $el[0], ptr.done);\n } else {\n $el.removeClass('ptr-pull-down');\n }\n if (pullStarted) {\n $el.trigger('ptr:pullend');\n ptr.emit('local::pullEnd ptrPullEnd', $el[0]);\n }\n }\n function handleMouseWheel(e) {\n if (!mousewheelAllow) return;\n const {\n deltaX,\n deltaY\n } = e;\n if (Math.abs(deltaX) > Math.abs(deltaY)) return;\n if ($el.hasClass('ptr-refreshing')) {\n return;\n }\n if ($(e.target).closest('.sortable-handler, .ptr-ignore, .card-expandable.card-opened').length) return;\n clearTimeout(mousewheelTimeout);\n scrollTop = $el[0].scrollTop;\n if (!mousewheelMoved) {\n $el.removeClass('ptr-transitioning');\n if (isIos) {\n setPreloaderProgress(0);\n }\n let targetIsScrollable;\n scrollHeight = $el[0].scrollHeight;\n offsetHeight = $el[0].offsetHeight;\n if (ptr.bottom) {\n maxScrollTop = scrollHeight - offsetHeight;\n }\n if (scrollTop > scrollHeight) {\n mousewheelAllow = false;\n return;\n }\n const $ptrWatchScrollable = $(e.target).closest('.ptr-watch-scroll');\n if ($ptrWatchScrollable.length) {\n $ptrWatchScrollable.each(ptrScrollableEl => {\n if (ptrScrollableEl === el) return;\n if (ptrScrollableEl.scrollHeight > ptrScrollableEl.offsetHeight && $(ptrScrollableEl).css('overflow') === 'auto' && (!ptr.bottom && ptrScrollableEl.scrollTop > 0 || ptr.bottom && ptrScrollableEl.scrollTop < ptrScrollableEl.scrollHeight - ptrScrollableEl.offsetHeight)) {\n targetIsScrollable = true;\n }\n });\n }\n if (targetIsScrollable) {\n mousewheelAllow = false;\n return;\n }\n if (dynamicTriggerDistance) {\n triggerDistance = $el.attr('data-ptr-distance');\n if (triggerDistance.indexOf('%') >= 0) triggerDistance = scrollHeight * parseInt(triggerDistance, 10) / 100;\n }\n }\n isMoved = true;\n mousewheelTranslate -= deltaY;\n touchesDiff = mousewheelTranslate; // pageY - touchesStart.y;\n\n if (typeof wasScrolled === 'undefined' && (ptr.bottom ? scrollTop !== maxScrollTop : scrollTop !== 0)) wasScrolled = true;\n const ptrStarted = ptr.bottom ? touchesDiff < 0 && scrollTop >= maxScrollTop || scrollTop > maxScrollTop : touchesDiff > 0 && scrollTop <= 0 || scrollTop < 0;\n if (ptrStarted) {\n if (e.cancelable) {\n e.preventDefault();\n }\n translate = touchesDiff;\n if (Math.abs(translate) > triggerDistance) {\n translate = triggerDistance + (Math.abs(translate) - triggerDistance) ** 0.7;\n if (ptr.bottom) translate = -translate;\n }\n if (isMaterial) {\n $preloaderEl.transform(`translate3d(0,${translate}px,0)`).find('.ptr-arrow').transform(`rotate(${180 * (Math.abs(touchesDiff) / 66) + 100}deg)`);\n } else {\n // eslint-disable-next-line\n if (ptr.bottom) {\n $el.children().transform(`translate3d(0,${translate}px,0)`);\n } else {\n $el.transform(`translate3d(0,${translate}px,0)`);\n if (isIos) {\n $preloaderEl.transform(`translate3d(0,${-translate}px,0)`);\n }\n }\n }\n let progress;\n if (isIos && !refresh) {\n progress = Math.abs(translate) / triggerDistance;\n setPreloaderProgress(progress);\n }\n if (Math.abs(translate) > triggerDistance) {\n refresh = true;\n $el.addClass('ptr-pull-up').removeClass('ptr-pull-down');\n unsetPreloaderProgress();\n } else {\n refresh = false;\n $el.removeClass('ptr-pull-up').addClass('ptr-pull-down');\n }\n if (!pullStarted) {\n $el.trigger('ptr:pullstart');\n ptr.emit('local::pullStart ptrPullStart', $el[0]);\n pullStarted = true;\n }\n $el.trigger('ptr:pullmove', {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n ptr.emit('local::pullMove ptrPullMove', $el[0], {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n } else {\n pullStarted = false;\n $el.removeClass('ptr-pull-up ptr-pull-down');\n refresh = false;\n }\n mousewheelTimeout = setTimeout(handleMouseWheelRelease, 300);\n }\n if (!$pageEl.length || !$el.length) return ptr;\n $el[0].f7PullToRefresh = ptr;\n\n // Events\n ptr.attachEvents = function attachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n if (ptr.mousewheel && !ptr.bottom) {\n $el.on('wheel', handleMouseWheel);\n }\n };\n ptr.detachEvents = function detachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n if (ptr.mousewheel && !ptr.bottom) {\n $el.off('wheel', handleMouseWheel);\n }\n };\n\n // Install Modules\n ptr.useModules();\n\n // Init\n ptr.init();\n return ptr;\n }\n init() {\n const ptr = this;\n ptr.attachEvents();\n }\n destroy() {\n let ptr = this;\n ptr.emit('local::beforeDestroy ptrBeforeDestroy', ptr);\n ptr.$el.trigger('ptr:beforedestroy');\n delete ptr.el.f7PullToRefresh;\n ptr.detachEvents();\n deleteProps(ptr);\n ptr = null;\n }\n}\nexport default PullToRefresh;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport PullToRefresh from './pull-to-refresh-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'pullToRefresh',\n create() {\n const app = this;\n app.ptr = extend(ConstructorMethods({\n defaultSelector: '.ptr-content',\n constructor: PullToRefresh,\n app,\n domProp: 'f7PullToRefresh'\n }), {\n done(el) {\n const ptr = app.ptr.get(el);\n if (ptr) return ptr.done();\n return undefined;\n },\n refresh(el) {\n const ptr = app.ptr.get(el);\n if (ptr) return ptr.refresh();\n return undefined;\n }\n });\n },\n static: {\n PullToRefresh\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n const $tabEl = $(tabEl);\n const $ptrEls = $tabEl.find('.ptr-content');\n if ($tabEl.is('.ptr-content')) $ptrEls.add($tabEl);\n $ptrEls.each(el => {\n app.ptr.create(el);\n });\n },\n tabBeforeRemove(tabEl) {\n const $tabEl = $(tabEl);\n const app = this;\n const $ptrEls = $tabEl.find('.ptr-content');\n if ($tabEl.is('.ptr-content')) $ptrEls.add($tabEl);\n $ptrEls.each(el => {\n app.ptr.destroy(el);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.ptr-content').each(el => {\n app.ptr.create(el);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.ptr-content').each(el => {\n app.ptr.destroy(el);\n });\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nclass DataTable extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const table = this;\n const defaults = {};\n\n // Extend defaults with modules params\n table.useModulesParams(defaults);\n table.params = extend(defaults, params);\n\n // El\n const $el = $(table.params.el);\n if ($el.length === 0) return undefined;\n table.$el = $el;\n table.el = $el[0];\n if (table.$el[0].f7DataTable) {\n const instance = table.$el[0].f7DataTable;\n table.destroy();\n return instance;\n }\n table.$el[0].f7DataTable = table;\n extend(table, {\n collapsible: $el.hasClass('data-table-collapsible'),\n // Headers\n $headerEl: $el.find('.data-table-header'),\n $headerSelectedEl: $el.find('.data-table-header-selected')\n });\n\n // Events\n function handleChange(e) {\n if (e.detail && e.detail.sentByF7DataTable) {\n // Scripted event, don't do anything\n return;\n }\n const $inputEl = $(this);\n const checked = $inputEl[0].checked;\n const columnIndex = $inputEl.parents('td,th').index();\n if ($inputEl.parents('thead').length > 0) {\n if (columnIndex === 0) {\n $el.find('tbody tr')[checked ? 'addClass' : 'removeClass']('data-table-row-selected');\n }\n $el.find(`tbody tr td:nth-child(${columnIndex + 1}) input`).prop('checked', checked).trigger('change', {\n sentByF7DataTable: true\n });\n $inputEl.prop('indeterminate', false);\n } else {\n if (columnIndex === 0) {\n $inputEl.parents('tr')[checked ? 'addClass' : 'removeClass']('data-table-row-selected');\n }\n const checkedRows = $el.find(`tbody .checkbox-cell:nth-child(${columnIndex + 1}) input[type=\"checkbox\"]:checked`).length;\n const totalRows = $el.find('tbody tr').length;\n const $headCheckboxEl = $el.find(`thead .checkbox-cell:nth-child(${columnIndex + 1}) input[type=\"checkbox\"]`);\n if (!checked) {\n $headCheckboxEl.prop('checked', false);\n } else if (checkedRows === totalRows) {\n $headCheckboxEl.prop('checked', true).trigger('change', {\n sentByF7DataTable: true\n });\n }\n $headCheckboxEl.prop('indeterminate', checkedRows > 0 && checkedRows < totalRows);\n }\n table.checkSelectedHeader();\n }\n function handleSortableClick() {\n const $cellEl = $(this);\n const isActive = $cellEl.hasClass('sortable-cell-active');\n const currentSort = $cellEl.hasClass('sortable-desc') ? 'desc' : 'asc';\n let newSort;\n if (isActive) {\n newSort = currentSort === 'desc' ? 'asc' : 'desc';\n $cellEl.removeClass('sortable-desc sortable-asc').addClass(`sortable-${newSort}`);\n } else {\n $el.find('thead .sortable-cell-active').removeClass('sortable-cell-active');\n $cellEl.addClass('sortable-cell-active');\n newSort = currentSort;\n }\n $cellEl.trigger('datatable:sort', newSort);\n table.emit('local::sort dataTableSort', table, newSort);\n }\n table.attachEvents = function attachEvents() {\n table.$el.on('change', '.checkbox-cell input[type=\"checkbox\"]', handleChange);\n table.$el.find('thead .sortable-cell').on('click', handleSortableClick);\n };\n table.detachEvents = function detachEvents() {\n table.$el.off('change', '.checkbox-cell input[type=\"checkbox\"]', handleChange);\n table.$el.find('thead .sortable-cell').off('click', handleSortableClick);\n };\n\n // Install Modules\n table.useModules();\n\n // Init\n table.init();\n return table;\n }\n setCollapsibleLabels() {\n const table = this;\n if (!table.collapsible) return;\n table.$el.find('tbody td:not(.checkbox-cell)').each(el => {\n const $el = $(el);\n const elIndex = $el.index();\n const collapsibleTitle = $el.attr('data-collapsible-title');\n if (!collapsibleTitle && collapsibleTitle !== '') {\n $el.attr('data-collapsible-title', table.$el.find('thead th').eq(elIndex).text());\n }\n });\n }\n checkSelectedHeader() {\n const table = this;\n if (table.$headerEl.length > 0 && table.$headerSelectedEl.length > 0) {\n const checkedItems = table.$el.find('tbody .checkbox-cell input:checked').length;\n table.$el[checkedItems > 0 ? 'addClass' : 'removeClass']('data-table-has-checked');\n table.$headerSelectedEl.find('.data-table-selected-count').text(checkedItems);\n }\n }\n init() {\n const table = this;\n table.attachEvents();\n table.setCollapsibleLabels();\n table.checkSelectedHeader();\n }\n destroy() {\n let table = this;\n table.$el.trigger('datatable:beforedestroy');\n table.emit('local::beforeDestroy dataTableBeforeDestroy', table);\n table.detachEvents();\n if (table.$el[0]) {\n table.$el[0].f7DataTable = null;\n delete table.$el[0].f7DataTable;\n }\n deleteProps(table);\n table = null;\n }\n}\nexport default DataTable;", "import $ from '../../shared/dom7.js';\nimport DataTable from './data-table-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'dataTable',\n static: {\n DataTable\n },\n create() {\n const app = this;\n app.dataTable = ConstructorMethods({\n defaultSelector: '.data-table',\n constructor: DataTable,\n app,\n domProp: 'f7DataTable'\n });\n },\n on: {\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.data-table-init').each(tableEl => {\n app.dataTable.destroy(tableEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.data-table-init').each(tableEl => {\n app.dataTable.create({\n el: tableEl\n });\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.data-table-init').each(tableEl => {\n app.dataTable.destroy(tableEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.data-table-init').each(tableEl => {\n app.dataTable.create({\n el: tableEl\n });\n });\n }\n },\n vnode: {\n 'data-table-init': {\n insert(vnode) {\n const app = this;\n const tableEl = vnode.elm;\n app.dataTable.create({\n el: tableEl\n });\n },\n destroy(vnode) {\n const app = this;\n const tableEl = vnode.elm;\n app.dataTable.destroy(tableEl);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods, getTranslate, nextFrame } from '../../shared/utils.js';\nconst Fab = {\n morphOpen(fabEl, targetEl) {\n const app = this;\n const $fabEl = $(fabEl);\n const $targetEl = $(targetEl);\n if ($targetEl.length === 0) return;\n $targetEl.transition(0).addClass('fab-morph-target-visible');\n const target = {\n width: $targetEl[0].offsetWidth,\n height: $targetEl[0].offsetHeight,\n offset: $targetEl.offset(),\n borderRadius: $targetEl.css('border-radius'),\n zIndex: $targetEl.css('z-index')\n };\n const fab = {\n width: $fabEl[0].offsetWidth,\n height: $fabEl[0].offsetHeight,\n offset: $fabEl.offset(),\n translateX: getTranslate($fabEl[0], 'x'),\n translateY: getTranslate($fabEl[0], 'y')\n };\n $fabEl[0].f7FabMorphData = {\n $targetEl,\n target,\n fab\n };\n const diffX = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;\n const diffY = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;\n const scaleX = target.width / fab.width;\n const scaleY = target.height / fab.height;\n let borderRadius = Math.ceil(parseInt(target.borderRadius, 10) / Math.max(scaleX, scaleY));\n if (borderRadius > 0) borderRadius += 2;\n $fabEl[0].f7FabMorphResizeHandler = function resizeHandler() {\n $fabEl.transition(0).transform('');\n $targetEl.transition(0);\n target.width = $targetEl[0].offsetWidth;\n target.height = $targetEl[0].offsetHeight;\n target.offset = $targetEl.offset();\n fab.offset = $fabEl.offset();\n const diffXNew = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;\n const diffYNew = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;\n const scaleXNew = target.width / fab.width;\n const scaleYNew = target.height / fab.height;\n $fabEl.transform(`translate3d(${-diffXNew}px, ${-diffYNew}px, 0) scale(${scaleXNew}, ${scaleYNew})`);\n };\n $targetEl.css('opacity', 0).transform(`scale(${1 / scaleX}, ${1 / scaleY})`);\n $fabEl.addClass('fab-opened').css('z-index', target.zIndex - 1).transform(`translate3d(${-diffX}px, ${-diffY}px, 0)`);\n $fabEl.transitionEnd(() => {\n $targetEl.transition('');\n nextFrame(() => {\n $targetEl.css('opacity', 1).transform('scale(1,1)');\n $fabEl.transform(`translate3d(${-diffX}px, ${-diffY}px, 0) scale(${scaleX}, ${scaleY})`).css('border-radius', `${borderRadius}px`).css('box-shadow', 'none').css('opacity', '0');\n });\n app.on('resize', $fabEl[0].f7FabMorphResizeHandler);\n if ($targetEl.parents('.page-content').length > 0) {\n $targetEl.parents('.page-content').on('scroll', $fabEl[0].f7FabMorphResizeHandler);\n }\n });\n },\n morphClose(fabEl) {\n const app = this;\n const $fabEl = $(fabEl);\n const morphData = $fabEl[0].f7FabMorphData;\n if (!morphData) return;\n const {\n $targetEl,\n target,\n fab\n } = morphData;\n if ($targetEl.length === 0) return;\n const diffX = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;\n const diffY = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;\n const scaleX = target.width / fab.width;\n const scaleY = target.height / fab.height;\n app.off('resize', $fabEl[0].f7FabMorphResizeHandler);\n if ($targetEl.parents('.page-content').length > 0) {\n $targetEl.parents('.page-content').off('scroll', $fabEl[0].f7FabMorphResizeHandler);\n }\n $targetEl.css('opacity', 0).transform(`scale(${1 / scaleX}, ${1 / scaleY})`);\n $fabEl.transition('').css('box-shadow', '').css('border-radius', '').css('opacity', '1').transform(`translate3d(${-diffX}px, ${-diffY}px, 0)`);\n $fabEl.transitionEnd(() => {\n $fabEl.css('z-index', '').removeClass('fab-opened').transform('');\n nextFrame(() => {\n $fabEl.transitionEnd(() => {\n $targetEl.removeClass('fab-morph-target-visible').css('opacity', '').transform('').transition('');\n });\n });\n });\n },\n open(fabEl, targetEl) {\n const app = this;\n const $fabEl = $(fabEl).eq(0);\n const $buttonsEl = $fabEl.find('.fab-buttons');\n if (!$fabEl.length) return;\n if ($fabEl.hasClass('fab-opened')) return;\n if (!$buttonsEl.length && !$fabEl.hasClass('fab-morph')) return;\n if (app.fab.openedEl) {\n if (app.fab.openedEl === $fabEl[0]) return;\n app.fab.close(app.fab.openedEl);\n }\n app.fab.openedEl = $fabEl[0];\n if ($fabEl.hasClass('fab-morph')) {\n app.fab.morphOpen($fabEl, targetEl || $fabEl.attr('data-morph-to'));\n } else {\n $fabEl.addClass('fab-opened');\n }\n $fabEl.siblings('.fab-backdrop').addClass('backdrop-in');\n $fabEl.trigger('fab:open');\n },\n close(fabEl) {\n if (fabEl === void 0) {\n fabEl = '.fab-opened';\n }\n const app = this;\n const $fabEl = $(fabEl).eq(0);\n const $buttonsEl = $fabEl.find('.fab-buttons');\n if (!$fabEl.length) return;\n if (!$fabEl.hasClass('fab-opened')) return;\n if (!$buttonsEl.length && !$fabEl.hasClass('fab-morph')) return;\n app.fab.openedEl = null;\n if ($fabEl.hasClass('fab-morph')) {\n app.fab.morphClose($fabEl);\n } else {\n $fabEl.removeClass('fab-opened');\n }\n $fabEl.siblings('.fab-backdrop').removeClass('backdrop-in');\n $fabEl.trigger('fab:close');\n },\n toggle(fabEl) {\n const app = this;\n const $fabEl = $(fabEl);\n if (!$fabEl.hasClass('fab-opened')) app.fab.open(fabEl);else app.fab.close(fabEl);\n }\n};\nexport default {\n name: 'fab',\n create() {\n const app = this;\n bindMethods(app, {\n fab: {\n openedEl: null,\n ...Fab\n }\n });\n },\n clicks: {\n '.fab > a': function open($clickedEl) {\n const app = this;\n app.fab.toggle($clickedEl.parents('.fab'));\n },\n '.fab-open': function open($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.fab.open(data.fab);\n },\n '.fab-close': function close($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.fab.close(data.fab);\n },\n '.fab-backdrop': function close() {\n const app = this;\n app.fab.close();\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport FrameworkClass from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport removeDiacritics from './remove-diacritics.js';\nclass Searchbar extends FrameworkClass {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const sb = this;\n const defaults = {\n el: undefined,\n inputEl: undefined,\n inputEvents: 'change input compositionend',\n disableButton: true,\n disableButtonEl: undefined,\n backdropEl: undefined,\n searchContainer: undefined,\n // container to search, HTMLElement or CSS selector\n searchItem: 'li',\n // single item selector, CSS selector\n searchIn: undefined,\n // where to search in item, CSS selector\n searchGroup: '.list-group',\n searchGroupTitle: '.list-group-title',\n ignore: '.searchbar-ignore',\n foundEl: '.searchbar-found',\n notFoundEl: '.searchbar-not-found',\n hideOnEnableEl: '.searchbar-hide-on-enable',\n hideOnSearchEl: '.searchbar-hide-on-search',\n backdrop: true,\n removeDiacritics: true,\n customSearch: false,\n hideGroupTitles: true,\n hideGroups: true,\n disableOnBackdropClick: true,\n expandable: false,\n inline: false\n };\n\n // Extend defaults with modules params\n sb.useModulesParams(defaults);\n sb.params = extend(defaults, params);\n const $el = $(sb.params.el);\n if ($el.length === 0) return sb;\n if ($el[0].f7Searchbar) return $el[0].f7Searchbar;\n $el[0].f7Searchbar = sb;\n let $pageEl;\n const $navbarEl = $el.parents('.navbar');\n if ($el.parents('.page').length > 0) {\n $pageEl = $el.parents('.page');\n } else if ($navbarEl.length > 0) {\n $pageEl = $(app.navbar.getPageByEl($navbarEl[0]));\n if (!$pageEl.length) {\n const $currentPageEl = $el.parents('.view').find('.page-current');\n if ($currentPageEl[0] && $currentPageEl[0].f7Page && $currentPageEl[0].f7Page.navbarEl === $navbarEl[0]) {\n $pageEl = $currentPageEl;\n }\n }\n }\n let $foundEl;\n if (params.foundEl) {\n $foundEl = $(params.foundEl);\n } else if (typeof sb.params.foundEl === 'string' && $pageEl) {\n $foundEl = $pageEl.find(sb.params.foundEl);\n }\n let $notFoundEl;\n if (params.notFoundEl) {\n $notFoundEl = $(params.notFoundEl);\n } else if (typeof sb.params.notFoundEl === 'string' && $pageEl) {\n $notFoundEl = $pageEl.find(sb.params.notFoundEl);\n }\n let $hideOnEnableEl;\n if (params.hideOnEnableEl) {\n $hideOnEnableEl = $(params.hideOnEnableEl);\n } else if (typeof sb.params.hideOnEnableEl === 'string' && $pageEl) {\n $hideOnEnableEl = $pageEl.find(sb.params.hideOnEnableEl);\n }\n let $hideOnSearchEl;\n if (params.hideOnSearchEl) {\n $hideOnSearchEl = $(params.hideOnSearchEl);\n } else if (typeof sb.params.hideOnSearchEl === 'string' && $pageEl) {\n $hideOnSearchEl = $pageEl.find(sb.params.hideOnSearchEl);\n }\n const expandable = sb.params.expandable || $el.hasClass('searchbar-expandable');\n const inline = sb.params.inline || $el.hasClass('searchbar-inline');\n if (typeof sb.params.backdrop === 'undefined') {\n sb.params.backdrop = !inline;\n }\n let $backdropEl;\n if (sb.params.backdrop) {\n if (sb.params.backdropEl) {\n $backdropEl = $(sb.params.backdropEl);\n } else if ($pageEl && $pageEl.length > 0) {\n $backdropEl = $pageEl.find('.searchbar-backdrop');\n } else {\n $backdropEl = $el.siblings('.searchbar-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n if ($pageEl && $pageEl.length) {\n if ($el.parents($pageEl).length > 0 && $navbarEl && $el.parents($navbarEl).length === 0) {\n $backdropEl.insertBefore($el);\n } else {\n $backdropEl.insertBefore($pageEl.find('.page-content').eq(0));\n }\n } else {\n $backdropEl.insertBefore($el);\n }\n }\n }\n let $searchContainer;\n if (sb.params.searchContainer) {\n $searchContainer = $(sb.params.searchContainer);\n }\n let $inputEl;\n if (sb.params.inputEl) {\n $inputEl = $(sb.params.inputEl);\n } else {\n $inputEl = $el.find('input[type=\"search\"]').eq(0);\n }\n let $disableButtonEl;\n if (sb.params.disableButton) {\n if (sb.params.disableButtonEl) {\n $disableButtonEl = $(sb.params.disableButtonEl);\n } else {\n $disableButtonEl = $el.find('.searchbar-disable-button');\n }\n }\n extend(sb, {\n app,\n view: app.views.get($el.parents('.view')),\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n $searchContainer,\n searchContainer: $searchContainer && $searchContainer[0],\n $inputEl,\n inputEl: $inputEl[0],\n $disableButtonEl,\n disableButtonEl: $disableButtonEl && $disableButtonEl[0],\n disableButtonHasMargin: false,\n $pageEl,\n pageEl: $pageEl && $pageEl[0],\n $navbarEl,\n navbarEl: $navbarEl && $navbarEl[0],\n $foundEl,\n foundEl: $foundEl && $foundEl[0],\n $notFoundEl,\n notFoundEl: $notFoundEl && $notFoundEl[0],\n $hideOnEnableEl,\n hideOnEnableEl: $hideOnEnableEl && $hideOnEnableEl[0],\n $hideOnSearchEl,\n hideOnSearchEl: $hideOnSearchEl && $hideOnSearchEl[0],\n previousQuery: '',\n query: '',\n isVirtualList: $searchContainer && $searchContainer.hasClass('virtual-list'),\n virtualList: undefined,\n enabled: false,\n expandable,\n inline\n });\n\n // Events\n function preventSubmit(e) {\n e.preventDefault();\n }\n function onInputFocus(e) {\n sb.enable(e);\n sb.$el.addClass('searchbar-focused');\n }\n function onInputBlur() {\n sb.$el.removeClass('searchbar-focused');\n }\n function onInputChange() {\n const value = sb.$inputEl.val().trim();\n if (sb.$searchContainer && sb.$searchContainer.length > 0 && (sb.params.searchIn || sb.isVirtualList || sb.params.searchIn === sb.params.searchItem) || sb.params.customSearch) {\n sb.search(value, true);\n }\n }\n function onInputClear(e, previousValue) {\n sb.$el.trigger('searchbar:clear', previousValue);\n sb.emit('local::clear searchbarClear', sb, previousValue);\n }\n function disableOnClick(e) {\n sb.disable(e);\n }\n function onPageBeforeOut() {\n if (!sb || sb && !sb.$el) return;\n if (sb.enabled) {\n sb.$el.removeClass('searchbar-enabled');\n if (sb.expandable) {\n sb.$el.parents('.navbar').removeClass('with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition');\n }\n }\n }\n function onPageBeforeIn() {\n if (!sb || sb && !sb.$el) return;\n if (sb.enabled) {\n sb.$el.addClass('searchbar-enabled');\n if (sb.expandable) {\n sb.$el.parents('.navbar').addClass('with-searchbar-expandable-enabled-no-transition');\n }\n }\n }\n sb.attachEvents = function attachEvents() {\n $el.on('submit', preventSubmit);\n if (sb.params.disableButton) {\n sb.$disableButtonEl.on('click', disableOnClick);\n }\n if (sb.params.disableOnBackdropClick && sb.$backdropEl) {\n sb.$backdropEl.on('click', disableOnClick);\n }\n if (sb.expandable && app.theme === 'ios' && sb.view && $navbarEl.length && sb.$pageEl) {\n sb.$pageEl.on('page:beforeout', onPageBeforeOut);\n sb.$pageEl.on('page:beforein', onPageBeforeIn);\n }\n sb.$inputEl.on('focus', onInputFocus);\n sb.$inputEl.on('blur', onInputBlur);\n sb.$inputEl.on(sb.params.inputEvents, onInputChange);\n sb.$inputEl.on('input:clear', onInputClear);\n };\n sb.detachEvents = function detachEvents() {\n $el.off('submit', preventSubmit);\n if (sb.params.disableButton) {\n sb.$disableButtonEl.off('click', disableOnClick);\n }\n if (sb.params.disableOnBackdropClick && sb.$backdropEl) {\n sb.$backdropEl.off('click', disableOnClick);\n }\n if (sb.expandable && app.theme === 'ios' && sb.view && $navbarEl.length && sb.$pageEl) {\n sb.$pageEl.off('page:beforeout', onPageBeforeOut);\n sb.$pageEl.off('page:beforein', onPageBeforeIn);\n }\n sb.$inputEl.off('focus', onInputFocus);\n sb.$inputEl.off('blur', onInputBlur);\n sb.$inputEl.off(sb.params.inputEvents, onInputChange);\n sb.$inputEl.off('input:clear', onInputClear);\n };\n\n // Install Modules\n sb.useModules();\n\n // Init\n sb.init();\n return sb;\n }\n clear(e) {\n const sb = this;\n if (!sb.query && e && $(e.target).hasClass('searchbar-clear')) {\n sb.disable();\n return sb;\n }\n const previousQuery = sb.value;\n sb.$inputEl.val('').trigger('change').focus();\n sb.$el.trigger('searchbar:clear', previousQuery);\n sb.emit('local::clear searchbarClear', sb, previousQuery);\n return sb;\n }\n setDisableButtonMargin() {\n const sb = this;\n if (sb.expandable) return;\n const app = sb.app;\n sb.$disableButtonEl.transition(0).show();\n sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, `${-sb.disableButtonEl.offsetWidth}px`);\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n sb._clientLeft = sb.$disableButtonEl[0].clientLeft;\n sb.$disableButtonEl.transition('');\n sb.disableButtonHasMargin = true;\n }\n enable(setFocus) {\n const sb = this;\n if (sb.enabled) return sb;\n const app = sb.app;\n const document = getDocument();\n const device = getDevice();\n sb.enabled = true;\n function enable() {\n if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch) && !sb.$el.hasClass('searchbar-enabled') && !sb.query) {\n sb.backdropShow();\n }\n sb.$el.addClass('searchbar-enabled');\n if (!sb.$disableButtonEl || sb.$disableButtonEl && sb.$disableButtonEl.length === 0) {\n sb.$el.addClass('searchbar-enabled-no-disable-button');\n }\n if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== 'md') {\n if (!sb.disableButtonHasMargin) {\n sb.setDisableButtonMargin();\n }\n sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, '0px');\n }\n if (sb.expandable) {\n const $navbarEl = sb.$el.parents('.navbar');\n if ($navbarEl.hasClass('navbar-large') && sb.$pageEl) {\n const $pageContentEl = sb.$pageEl.find('.page-content');\n const $titleLargeEl = $navbarEl.find('.title-large');\n $pageContentEl.addClass('with-searchbar-expandable-enabled');\n if ($navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-large-collapsed') && $titleLargeEl.length && $pageContentEl.length) {\n $pageContentEl.transition(0);\n $pageContentEl[0].scrollTop -= $titleLargeEl[0].offsetHeight;\n setTimeout(() => {\n $pageContentEl.transition('');\n }, 200);\n }\n }\n if (app.theme === 'md' && $navbarEl.length) {\n $navbarEl.addClass('with-searchbar-expandable-enabled');\n } else {\n $navbarEl.addClass('with-searchbar-expandable-enabled');\n if ($navbarEl.hasClass('navbar-large')) {\n $navbarEl.addClass('navbar-large-collapsed');\n }\n }\n }\n if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.addClass('hidden-by-searchbar');\n sb.$el.trigger('searchbar:enable');\n sb.emit('local::enable searchbarEnable', sb);\n }\n let needsFocus = false;\n if (setFocus === true) {\n if (document.activeElement !== sb.inputEl) {\n needsFocus = true;\n }\n }\n const isIos = device.ios && app.theme === 'ios';\n if (isIos) {\n if (sb.expandable) {\n if (needsFocus) sb.$inputEl.focus();\n enable();\n } else {\n if (needsFocus) sb.$inputEl.focus();\n if (setFocus && (setFocus.type === 'focus' || setFocus === true)) {\n nextTick(() => {\n enable();\n }, 400);\n } else {\n enable();\n }\n }\n } else {\n if (needsFocus) sb.$inputEl.focus();\n if (app.theme === 'md' && sb.expandable) {\n sb.$el.parents('.page, .view, .navbar-inner, .navbar').scrollLeft(app.rtl ? 100 : 0);\n }\n enable();\n }\n return sb;\n }\n disable() {\n const sb = this;\n if (!sb.enabled) return sb;\n const app = sb.app;\n sb.$inputEl.val('').trigger('change');\n sb.$el.removeClass('searchbar-enabled searchbar-focused searchbar-enabled-no-disable-button');\n if (sb.expandable) {\n const $navbarEl = sb.$el.parents('.navbar');\n const $pageContentEl = sb.$pageEl && sb.$pageEl.find('.page-content');\n if ($navbarEl.hasClass('navbar-large') && $pageContentEl.length) {\n const $titleLargeEl = $navbarEl.find('.title-large');\n sb.$el.transitionEnd(() => {\n $pageContentEl.removeClass('with-searchbar-expandable-closing');\n });\n if ($navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-large-collapsed') && $titleLargeEl.length) {\n const scrollTop = $pageContentEl[0].scrollTop;\n const titleLargeHeight = $titleLargeEl[0].offsetHeight;\n if (scrollTop > titleLargeHeight) {\n $pageContentEl.transition(0);\n $pageContentEl[0].scrollTop = scrollTop + titleLargeHeight;\n setTimeout(() => {\n $pageContentEl.transition('');\n }, 200);\n }\n }\n $pageContentEl.removeClass('with-searchbar-expandable-enabled').addClass('with-searchbar-expandable-closing');\n }\n if (app.theme === 'md' && $navbarEl.length) {\n $navbarEl.removeClass('with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition').addClass('with-searchbar-expandable-closing');\n sb.$el.transitionEnd(() => {\n $navbarEl.removeClass('with-searchbar-expandable-closing');\n });\n } else {\n $navbarEl.removeClass('with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition').addClass('with-searchbar-expandable-closing');\n sb.$el.transitionEnd(() => {\n $navbarEl.removeClass('with-searchbar-expandable-closing');\n });\n if (sb.$pageEl) {\n sb.$pageEl.find('.page-content').trigger('scroll');\n }\n }\n }\n if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== 'md') {\n sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, `${-sb.disableButtonEl.offsetWidth}px`);\n }\n if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch)) {\n sb.backdropHide();\n }\n sb.enabled = false;\n sb.$inputEl.blur();\n if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.removeClass('hidden-by-searchbar');\n sb.$el.trigger('searchbar:disable');\n sb.emit('local::disable searchbarDisable', sb);\n return sb;\n }\n toggle() {\n const sb = this;\n if (sb.enabled) sb.disable();else sb.enable(true);\n return sb;\n }\n backdropShow() {\n const sb = this;\n if (sb.$backdropEl) {\n sb.$backdropEl.addClass('searchbar-backdrop-in');\n }\n return sb;\n }\n backdropHide() {\n const sb = this;\n if (sb.$backdropEl) {\n sb.$backdropEl.removeClass('searchbar-backdrop-in');\n }\n return sb;\n }\n search(query, internal) {\n const sb = this;\n sb.previousQuery = sb.query || '';\n if (query === sb.previousQuery) return sb;\n if (!internal) {\n if (!sb.enabled) {\n sb.enable();\n }\n sb.$inputEl.val(query);\n sb.$inputEl.trigger('input');\n }\n sb.query = query;\n sb.value = query;\n const {\n $searchContainer,\n $el,\n $foundEl,\n $notFoundEl,\n $hideOnSearchEl,\n isVirtualList\n } = sb;\n\n // Hide on search element\n if (query.length > 0 && $hideOnSearchEl) {\n $hideOnSearchEl.addClass('hidden-by-searchbar');\n } else if ($hideOnSearchEl) {\n $hideOnSearchEl.removeClass('hidden-by-searchbar');\n }\n // Add active/inactive classes on overlay\n if ($searchContainer && $searchContainer.length && $el.hasClass('searchbar-enabled') || sb.params.customSearch && $el.hasClass('searchbar-enabled')) {\n if (query.length === 0) {\n sb.backdropShow();\n } else {\n sb.backdropHide();\n }\n }\n if (sb.params.customSearch) {\n $el.trigger('searchbar:search', {\n query,\n previousQuery: sb.previousQuery\n });\n sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery);\n return sb;\n }\n let foundItems = [];\n let vlQuery;\n if (isVirtualList) {\n sb.virtualList = $searchContainer[0].f7VirtualList;\n if (query.trim() === '') {\n sb.virtualList.resetFilter();\n if ($notFoundEl) $notFoundEl.hide();\n if ($foundEl) $foundEl.show();\n $el.trigger('searchbar:search', {\n query,\n previousQuery: sb.previousQuery\n });\n sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery);\n return sb;\n }\n vlQuery = sb.params.removeDiacritics ? removeDiacritics(query) : query;\n if (sb.virtualList.params.searchAll) {\n foundItems = sb.virtualList.params.searchAll(vlQuery, sb.virtualList.items) || [];\n } else if (sb.virtualList.params.searchByItem) {\n for (let i = 0; i < sb.virtualList.items.length; i += 1) {\n if (sb.virtualList.params.searchByItem(vlQuery, sb.virtualList.items[i], i)) {\n foundItems.push(i);\n }\n }\n }\n } else {\n let values;\n if (sb.params.removeDiacritics) values = removeDiacritics(query.trim().toLowerCase()).split(' ');else {\n values = query.trim().toLowerCase().split(' ');\n }\n $searchContainer.find(sb.params.searchItem).removeClass('hidden-by-searchbar').each(itemEl => {\n const $itemEl = $(itemEl);\n let compareWithText = [];\n let $searchIn = sb.params.searchIn ? $itemEl.find(sb.params.searchIn) : $itemEl;\n if (sb.params.searchIn === sb.params.searchItem) {\n $searchIn = $itemEl;\n }\n $searchIn.each(searchInEl => {\n let itemText = $(searchInEl).text().trim().toLowerCase();\n if (sb.params.removeDiacritics) itemText = removeDiacritics(itemText);\n compareWithText.push(itemText);\n });\n compareWithText = compareWithText.join(' ');\n let wordsMatch = 0;\n for (let i = 0; i < values.length; i += 1) {\n if (compareWithText.indexOf(values[i]) >= 0) wordsMatch += 1;\n }\n if (wordsMatch !== values.length && !(sb.params.ignore && $itemEl.is(sb.params.ignore))) {\n $itemEl.addClass('hidden-by-searchbar');\n } else {\n foundItems.push($itemEl[0]);\n }\n });\n if (sb.params.hideGroupTitles) {\n $searchContainer.find(sb.params.searchGroupTitle).each(titleEl => {\n const $titleEl = $(titleEl);\n const $nextElements = $titleEl.nextAll(sb.params.searchItem);\n let hide = true;\n for (let i = 0; i < $nextElements.length; i += 1) {\n const $nextEl = $nextElements.eq(i);\n if ($nextEl.is(sb.params.searchGroupTitle)) break;\n if (!$nextEl.hasClass('hidden-by-searchbar')) {\n hide = false;\n }\n }\n const ignore = sb.params.ignore && $titleEl.is(sb.params.ignore);\n if (hide && !ignore) $titleEl.addClass('hidden-by-searchbar');else $titleEl.removeClass('hidden-by-searchbar');\n });\n }\n if (sb.params.hideGroups) {\n $searchContainer.find(sb.params.searchGroup).each(groupEl => {\n const $groupEl = $(groupEl);\n const ignore = sb.params.ignore && $groupEl.is(sb.params.ignore);\n // eslint-disable-next-line\n const notHidden = $groupEl.find(sb.params.searchItem).filter(el => {\n return !$(el).hasClass('hidden-by-searchbar');\n });\n if (notHidden.length === 0 && !ignore) {\n $groupEl.addClass('hidden-by-searchbar');\n } else {\n $groupEl.removeClass('hidden-by-searchbar');\n }\n });\n }\n }\n if (foundItems.length === 0) {\n if ($notFoundEl) $notFoundEl.show();\n if ($foundEl) $foundEl.hide();\n } else {\n if ($notFoundEl) $notFoundEl.hide();\n if ($foundEl) $foundEl.show();\n }\n if (isVirtualList && sb.virtualList) {\n sb.virtualList.filterItems(foundItems);\n }\n $el.trigger('searchbar:search', {\n query,\n previousQuery: sb.previousQuery,\n foundItems\n });\n sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery, foundItems);\n return sb;\n }\n init() {\n const sb = this;\n if (sb.expandable && sb.$el) sb.$el.addClass('searchbar-expandable');\n if (sb.inline && sb.$el) sb.$el.addClass('searchbar-inline');\n sb.attachEvents();\n }\n destroy() {\n const sb = this;\n sb.emit('local::beforeDestroy searchbarBeforeDestroy', sb);\n sb.$el.trigger('searchbar:beforedestroy');\n sb.detachEvents();\n if (sb.$el[0]) {\n sb.$el[0].f7Searchbar = null;\n delete sb.$el[0].f7Searchbar;\n }\n deleteProps(sb);\n }\n}\nexport default Searchbar;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Searchbar from './searchbar-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'searchbar',\n static: {\n Searchbar\n },\n create() {\n const app = this;\n app.searchbar = ConstructorMethods({\n defaultSelector: '.searchbar',\n constructor: Searchbar,\n app,\n domProp: 'f7Searchbar',\n addMethods: 'clear enable disable toggle search'.split(' ')\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.searchbar-init').each(searchbarEl => {\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.searchbar-init').each(searchbarEl => {\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.searchbar-init').each(searchbarEl => {\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.searchbar-init').each(searchbarEl => {\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n });\n }\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.searchbar-init').each(searchbarEl => {\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.searchbar-init').each(searchbarEl => {\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n });\n }\n }\n },\n clicks: {\n '.searchbar-clear': function clear($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.clear();\n },\n '.searchbar-enable': function enable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.enable(true);\n },\n '.searchbar-disable': function disable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.disable();\n },\n '.searchbar-toggle': function toggle($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.toggle();\n }\n },\n vnode: {\n 'searchbar-init': {\n insert(vnode) {\n const app = this;\n const searchbarEl = vnode.elm;\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n },\n destroy(vnode) {\n const searchbarEl = vnode.elm;\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n }\n }\n }\n};", "function _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Messages extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const m = this;\n const defaults = {\n autoLayout: true,\n messages: [],\n newMessagesFirst: false,\n scrollMessages: true,\n scrollMessagesOnEdge: true,\n firstMessageRule: undefined,\n lastMessageRule: undefined,\n tailMessageRule: undefined,\n sameNameMessageRule: undefined,\n sameHeaderMessageRule: undefined,\n sameFooterMessageRule: undefined,\n sameAvatarMessageRule: undefined,\n customClassMessageRule: undefined,\n renderMessage: undefined\n };\n\n // Extend defaults with modules params\n m.useModulesParams(defaults);\n m.params = extend(defaults, params);\n const $el = $(params.el).eq(0);\n if ($el.length === 0) return m;\n if ($el[0].f7Messages) return $el[0].f7Messages;\n $el[0].f7Messages = m;\n const $pageContentEl = $el.closest('.page-content').eq(0);\n extend(m, {\n messages: m.params.messages,\n $el,\n el: $el[0],\n $pageContentEl,\n pageContentEl: $pageContentEl[0]\n });\n // Install Modules\n m.useModules();\n\n // Init\n m.init();\n return m;\n }\n // eslint-disable-next-line\n getMessageData(messageEl) {\n const $messageEl = $(messageEl);\n const data = {\n name: $messageEl.find('.message-name').html(),\n header: $messageEl.find('.message-header').html(),\n textHeader: $messageEl.find('.message-text-header').html(),\n textFooter: $messageEl.find('.message-text-footer').html(),\n footer: $messageEl.find('.message-footer').html(),\n isTitle: $messageEl.hasClass('messages-title'),\n type: $messageEl.hasClass('message-sent') ? 'sent' : 'received',\n text: $messageEl.find('.message-text').html(),\n image: $messageEl.find('.message-image').html(),\n imageSrc: $messageEl.find('.message-image img').attr('src'),\n typing: $messageEl.hasClass('message-typing')\n };\n if (data.isTitle) {\n data.text = $messageEl.html();\n }\n if (data.text && data.textHeader) {\n data.text = data.text.replace(``, '');\n }\n if (data.text && data.textFooter) {\n data.text = data.text.replace(``, '');\n }\n let avatar = $messageEl.find('.message-avatar').css('background-image');\n if (avatar === 'none' || avatar === '') avatar = undefined;\n if (avatar && typeof avatar === 'string') {\n avatar = avatar.replace('url(', '').replace(')', '').replace(/\"/g, '').replace(/'/g, '');\n } else {\n avatar = undefined;\n }\n data.avatar = avatar;\n return data;\n }\n getMessagesData() {\n const m = this;\n const data = [];\n m.$el.find('.message, .messages-title').each(messageEl => {\n data.push(m.getMessageData(messageEl));\n });\n return data;\n }\n renderMessage(messageToRender) {\n const m = this;\n const message = extend({\n type: 'sent',\n attrs: {}\n }, messageToRender);\n if (m.params.renderMessage) {\n return m.params.renderMessage.call(m, message);\n }\n if (message.isTitle) {\n return `${message.text}
`;\n }\n return $jsx(\"div\", _extends({\n class: `message message-${message.type} ${message.isTyping ? 'message-typing' : ''} ${message.cssClass || ''}`\n }, message.attrs), message.avatar && $jsx(\"div\", {\n class: \"message-avatar\",\n style: `background-image:url(${message.avatar})`\n }), $jsx(\"div\", {\n class: \"message-content\"\n }, message.name && $jsx(\"div\", {\n class: \"message-name\"\n }, message.name), message.header && $jsx(\"div\", {\n class: \"message-header\"\n }, message.header), $jsx(\"div\", {\n class: \"message-bubble\"\n }, message.textHeader && $jsx(\"div\", {\n class: \"message-text-header\"\n }, message.textHeader), message.image && $jsx(\"div\", {\n class: \"message-image\"\n }, message.image), message.imageSrc && !message.image && $jsx(\"div\", {\n class: \"message-image\"\n }, $jsx(\"img\", {\n src: message.imageSrc\n })), (message.text || message.isTyping) && $jsx(\"div\", {\n class: \"message-text\"\n }, message.text || '', message.isTyping && $jsx(\"div\", {\n class: \"message-typing-indicator\"\n }, $jsx(\"div\", null), $jsx(\"div\", null), $jsx(\"div\", null))), message.textFooter && $jsx(\"div\", {\n class: \"message-text-footer\"\n }, message.textFooter)), message.footer && $jsx(\"div\", {\n class: \"message-footer\"\n }, message.footer)));\n }\n renderMessages(messagesToRender, method) {\n if (messagesToRender === void 0) {\n messagesToRender = this.messages;\n }\n if (method === void 0) {\n method = this.params.newMessagesFirst ? 'prepend' : 'append';\n }\n const m = this;\n const html = messagesToRender.map(message => m.renderMessage(message)).join('');\n m.$el[method](html);\n }\n isFirstMessage() {\n const m = this;\n if (m.params.firstMessageRule) return m.params.firstMessageRule(...arguments);\n return false;\n }\n isLastMessage() {\n const m = this;\n if (m.params.lastMessageRule) return m.params.lastMessageRule(...arguments);\n return false;\n }\n isTailMessage() {\n const m = this;\n if (m.params.tailMessageRule) return m.params.tailMessageRule(...arguments);\n return false;\n }\n isSameNameMessage() {\n const m = this;\n if (m.params.sameNameMessageRule) return m.params.sameNameMessageRule(...arguments);\n return false;\n }\n isSameHeaderMessage() {\n const m = this;\n if (m.params.sameHeaderMessageRule) return m.params.sameHeaderMessageRule(...arguments);\n return false;\n }\n isSameFooterMessage() {\n const m = this;\n if (m.params.sameFooterMessageRule) return m.params.sameFooterMessageRule(...arguments);\n return false;\n }\n isSameAvatarMessage() {\n const m = this;\n if (m.params.sameAvatarMessageRule) return m.params.sameAvatarMessageRule(...arguments);\n return false;\n }\n isCustomClassMessage() {\n const m = this;\n if (m.params.customClassMessageRule) return m.params.customClassMessageRule(...arguments);\n return undefined;\n }\n layout() {\n const m = this;\n m.$el.find('.message, .messages-title').each((messageEl, index) => {\n const $messageEl = $(messageEl);\n if (!m.messages) {\n m.messages = m.getMessagesData();\n }\n const classes = [];\n const message = m.messages[index];\n const previousMessage = m.messages[index - 1];\n const nextMessage = m.messages[index + 1];\n if (m.isFirstMessage(message, previousMessage, nextMessage)) {\n classes.push('message-first');\n }\n if (m.isLastMessage(message, previousMessage, nextMessage)) {\n classes.push('message-last');\n }\n if (m.isTailMessage(message, previousMessage, nextMessage)) {\n classes.push('message-tail');\n }\n if (m.isSameNameMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-name');\n }\n if (m.isSameHeaderMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-header');\n }\n if (m.isSameFooterMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-footer');\n }\n if (m.isSameAvatarMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-avatar');\n }\n let customMessageClasses = m.isCustomClassMessage(message, previousMessage, nextMessage);\n if (customMessageClasses && customMessageClasses.length) {\n if (typeof customMessageClasses === 'string') {\n customMessageClasses = customMessageClasses.split(' ');\n }\n customMessageClasses.forEach(customClass => {\n classes.push(customClass);\n });\n }\n $messageEl.removeClass('message-first message-last message-tail message-same-name message-same-header message-same-footer message-same-avatar');\n classes.forEach(className => {\n $messageEl.addClass(className);\n });\n });\n }\n clear() {\n const m = this;\n m.messages = [];\n m.$el.html('');\n }\n removeMessage(messageToRemove, layout) {\n if (layout === void 0) {\n layout = true;\n }\n const m = this;\n // Index or El\n let index;\n let $el;\n if (typeof messageToRemove === 'number') {\n index = messageToRemove;\n $el = m.$el.find('.message, .messages-title').eq(index);\n } else if (m.messages && m.messages.indexOf(messageToRemove) >= 0) {\n index = m.messages.indexOf(messageToRemove);\n $el = m.$el.children().eq(index);\n } else {\n $el = $(messageToRemove);\n index = $el.index();\n }\n if ($el.length === 0) {\n return m;\n }\n $el.remove();\n m.messages.splice(index, 1);\n if (m.params.autoLayout && layout) m.layout();\n return m;\n }\n removeMessages(messagesToRemove, layout) {\n if (layout === void 0) {\n layout = true;\n }\n const m = this;\n if (Array.isArray(messagesToRemove)) {\n const messagesToRemoveEls = [];\n messagesToRemove.forEach(messageToRemoveIndex => {\n messagesToRemoveEls.push(m.$el.find('.message, .messages-title').eq(messageToRemoveIndex));\n });\n messagesToRemoveEls.forEach(messageToRemove => {\n m.removeMessage(messageToRemove, false);\n });\n } else {\n $(messagesToRemove).each(messageToRemove => {\n m.removeMessage(messageToRemove, false);\n });\n }\n if (m.params.autoLayout && layout) m.layout();\n return m;\n }\n addMessage() {\n const m = this;\n let messageToAdd;\n let animate;\n let method;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof args[1] === 'boolean') {\n [messageToAdd, animate, method] = args;\n } else {\n [messageToAdd, method, animate] = args;\n }\n if (typeof animate === 'undefined') {\n animate = true;\n }\n if (typeof method === 'undefined') {\n method = m.params.newMessagesFirst ? 'prepend' : 'append';\n }\n return m.addMessages([messageToAdd], animate, method);\n }\n setScrollData() {\n const m = this;\n // Define scroll positions before new messages added\n const scrollHeightBefore = m.pageContentEl.scrollHeight;\n const heightBefore = m.pageContentEl.offsetHeight;\n const scrollBefore = m.pageContentEl.scrollTop;\n m.scrollData = {\n scrollHeightBefore,\n heightBefore,\n scrollBefore\n };\n return {\n scrollHeightBefore,\n heightBefore,\n scrollBefore\n };\n }\n addMessages() {\n const m = this;\n let messagesToAdd;\n let animate;\n let method;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[1] === 'boolean') {\n [messagesToAdd, animate, method] = args;\n } else {\n [messagesToAdd, method, animate] = args;\n }\n if (typeof animate === 'undefined') {\n animate = true;\n }\n if (typeof method === 'undefined') {\n method = m.params.newMessagesFirst ? 'prepend' : 'append';\n }\n const {\n scrollHeightBefore,\n scrollBefore\n } = m.setScrollData();\n\n // Add message to DOM and data\n let messagesHTML = '';\n const typingMessage = m.messages.filter(el => el.isTyping)[0];\n messagesToAdd.forEach(messageToAdd => {\n if (typingMessage) {\n if (method === 'append') {\n m.messages.splice(m.messages.indexOf(typingMessage), 0, messageToAdd);\n } else {\n m.messages.splice(m.messages.indexOf(typingMessage) + 1, 0, messageToAdd);\n }\n } else {\n m.messages[method === 'append' ? 'push' : 'unshift'](messageToAdd);\n }\n messagesHTML += m.renderMessage(messageToAdd);\n });\n const $messagesEls = $(messagesHTML);\n if (animate) {\n if (method === 'append' && !m.params.newMessagesFirst) {\n $messagesEls.addClass('message-appear-from-bottom');\n }\n if (method === 'prepend' && m.params.newMessagesFirst) {\n $messagesEls.addClass('message-appear-from-top');\n }\n }\n if (typingMessage) {\n if (method === 'append') {\n $messagesEls.insertBefore(m.$el.find('.message-typing'));\n } else {\n $messagesEls.insertAfter(m.$el.find('.message-typing'));\n }\n } else {\n m.$el[method]($messagesEls);\n }\n\n // Layout\n if (m.params.autoLayout) m.layout();\n if (method === 'prepend' && !typingMessage) {\n m.pageContentEl.scrollTop = scrollBefore + (m.pageContentEl.scrollHeight - scrollHeightBefore);\n }\n if (m.params.scrollMessages && (method === 'append' && !m.params.newMessagesFirst || method === 'prepend' && m.params.newMessagesFirst && !typingMessage)) {\n m.scrollWithEdgeCheck(animate);\n }\n return m;\n }\n showTyping(message) {\n if (message === void 0) {\n message = {};\n }\n const m = this;\n const typingMessage = m.messages.filter(el => el.isTyping)[0];\n if (typingMessage) {\n m.removeMessage(m.messages.indexOf(typingMessage));\n }\n m.addMessage(extend({\n type: 'received',\n isTyping: true\n }, message));\n return m;\n }\n hideTyping() {\n const m = this;\n let typingMessageIndex;\n let typingFound;\n m.messages.forEach((message, index) => {\n if (message.isTyping) typingMessageIndex = index;\n });\n if (typeof typingMessageIndex !== 'undefined') {\n if (m.$el.find('.message').eq(typingMessageIndex).hasClass('message-typing')) {\n typingFound = true;\n m.removeMessage(typingMessageIndex);\n }\n }\n if (!typingFound) {\n const $typingMessageEl = m.$el.find('.message-typing');\n if ($typingMessageEl.length) {\n m.removeMessage($typingMessageEl);\n }\n }\n return m;\n }\n scrollWithEdgeCheck(animate) {\n const m = this;\n const {\n scrollBefore,\n scrollHeightBefore,\n heightBefore\n } = m.scrollData;\n if (m.params.scrollMessagesOnEdge) {\n let onEdge = false;\n if (m.params.newMessagesFirst && scrollBefore === 0) {\n onEdge = true;\n }\n if (!m.params.newMessagesFirst && scrollBefore - (scrollHeightBefore - heightBefore) >= -10) {\n onEdge = true;\n }\n if (onEdge) m.scroll(animate ? undefined : 0);\n } else {\n m.scroll(animate ? undefined : 0);\n }\n }\n scroll(duration, scrollTop) {\n if (duration === void 0) {\n duration = 300;\n }\n const m = this;\n const currentScroll = m.pageContentEl.scrollTop;\n let newScrollTop;\n if (typeof scrollTop !== 'undefined') newScrollTop = scrollTop;else {\n newScrollTop = m.params.newMessagesFirst ? 0 : m.pageContentEl.scrollHeight - m.pageContentEl.offsetHeight;\n if (newScrollTop === currentScroll) return m;\n }\n m.$pageContentEl.scrollTop(newScrollTop, duration);\n return m;\n }\n init() {\n const m = this;\n if (!m.messages || m.messages.length === 0) {\n m.messages = m.getMessagesData();\n }\n if (m.params.messages && m.params.messages.length) {\n m.renderMessages();\n }\n if (m.params.autoLayout) m.layout();\n if (m.params.scrollMessages) m.scroll(0);\n }\n destroy() {\n const m = this;\n m.emit('local::beforeDestroy messagesBeforeDestroy', m);\n m.$el.trigger('messages:beforedestroy');\n if (m.$el[0]) {\n m.$el[0].f7Messages = null;\n delete m.$el[0].f7Messages;\n }\n deleteProps(m);\n }\n}\nexport default Messages;", "import $ from '../../shared/dom7.js';\nimport Messages from './messages-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'messages',\n static: {\n Messages\n },\n create() {\n const app = this;\n app.messages = ConstructorMethods({\n defaultSelector: '.messages',\n constructor: Messages,\n app,\n domProp: 'f7Messages',\n addMethods: 'renderMessages layout scroll clear removeMessage removeMessages addMessage addMessages'.split(' ')\n });\n },\n on: {\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.messages-init').each(messagesEl => {\n app.messages.destroy(messagesEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.messages-init').each(messagesEl => {\n app.messages.create({\n el: messagesEl\n });\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.messages-init').each(messagesEl => {\n app.messages.destroy(messagesEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.messages-init').each(messagesEl => {\n app.messages.create({\n el: messagesEl\n });\n });\n }\n },\n vnode: {\n 'messages-init': {\n insert(vnode) {\n const app = this;\n const messagesEl = vnode.elm;\n app.messages.create({\n el: messagesEl\n });\n },\n destroy(vnode) {\n const app = this;\n const messagesEl = vnode.elm;\n app.messages.destroy(messagesEl);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nclass Messagebar extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const messagebar = this;\n const defaults = {\n top: false,\n topOffset: 0,\n bottomOffset: 0,\n attachments: [],\n renderAttachments: undefined,\n renderAttachment: undefined,\n maxHeight: null,\n resizePage: true\n };\n\n // Extend defaults with modules params\n messagebar.useModulesParams(defaults);\n messagebar.params = extend(defaults, params);\n\n // El\n const $el = $(messagebar.params.el);\n if ($el.length === 0) return messagebar;\n if ($el[0].f7Messagebar) return $el[0].f7Messagebar;\n $el[0].f7Messagebar = messagebar;\n\n // Page and PageContent\n const $pageEl = $el.parents('.page').eq(0);\n const $pageContentEl = $pageEl.find('.page-content').eq(0);\n\n // Area\n const $areaEl = $el.find('.messagebar-area');\n\n // Textarea\n let $textareaEl;\n if (messagebar.params.textareaEl) {\n $textareaEl = $(messagebar.params.textareaEl);\n } else {\n $textareaEl = $el.find('textarea');\n }\n\n // Attachments & Library\n const $attachmentsEl = $el.find('.messagebar-attachments');\n const $sheetEl = $el.find('.messagebar-sheet');\n if (messagebar.params.top) {\n $el.addClass('messagebar-top');\n }\n extend(messagebar, {\n $el,\n el: $el[0],\n $areaEl,\n areaEl: $areaEl[0],\n $textareaEl,\n textareaEl: $textareaEl[0],\n $attachmentsEl,\n attachmentsEl: $attachmentsEl[0],\n attachmentsVisible: $attachmentsEl.hasClass('messagebar-attachments-visible'),\n $sheetEl,\n sheetEl: $sheetEl[0],\n sheetVisible: $sheetEl.hasClass('messagebar-sheet-visible'),\n $pageEl,\n pageEl: $pageEl[0],\n $pageContentEl,\n pageContentEl: $pageContentEl,\n top: $el.hasClass('messagebar-top') || messagebar.params.top,\n attachments: []\n });\n\n // Events\n function onAppResize() {\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n }\n function onSubmit(e) {\n e.preventDefault();\n }\n function onAttachmentClick(e) {\n const index = $(this).index();\n if ($(e.target).closest('.messagebar-attachment-delete').length) {\n $(this).trigger('messagebar:attachmentdelete', index);\n messagebar.emit('local::attachmentDelete messagebarAttachmentDelete', messagebar, this, index);\n } else {\n $(this).trigger('messagebar:attachmentclick', index);\n messagebar.emit('local::attachmentClick messagebarAttachmentClick', messagebar, this, index);\n }\n }\n function onTextareaChange() {\n messagebar.checkEmptyState();\n messagebar.$el.trigger('messagebar:change');\n messagebar.emit('local::change messagebarChange', messagebar);\n }\n function onTextareaFocus() {\n messagebar.sheetHide();\n messagebar.$el.addClass('messagebar-focused');\n messagebar.$el.trigger('messagebar:focus');\n messagebar.emit('local::focus messagebarFocus', messagebar);\n }\n function onTextareaBlur() {\n messagebar.$el.removeClass('messagebar-focused');\n messagebar.$el.trigger('messagebar:blur');\n messagebar.emit('local::blur messagebarBlur', messagebar);\n }\n messagebar.attachEvents = function attachEvents() {\n $el.on('textarea:resize', onAppResize);\n $el.on('submit', onSubmit);\n $el.on('click', '.messagebar-attachment', onAttachmentClick);\n $textareaEl.on('change input', onTextareaChange);\n $textareaEl.on('focus', onTextareaFocus);\n $textareaEl.on('blur', onTextareaBlur);\n app.on('resize', onAppResize);\n };\n messagebar.detachEvents = function detachEvents() {\n $el.off('textarea:resize', onAppResize);\n $el.off('submit', onSubmit);\n $el.off('click', '.messagebar-attachment', onAttachmentClick);\n $textareaEl.off('change input', onTextareaChange);\n $textareaEl.off('focus', onTextareaFocus);\n $textareaEl.off('blur', onTextareaBlur);\n app.off('resize', onAppResize);\n };\n\n // Install Modules\n messagebar.useModules();\n\n // Init\n messagebar.init();\n return messagebar;\n }\n focus() {\n const messagebar = this;\n messagebar.$textareaEl.focus();\n return messagebar;\n }\n blur() {\n const messagebar = this;\n messagebar.$textareaEl.blur();\n return messagebar;\n }\n clear() {\n const messagebar = this;\n messagebar.$textareaEl.val('').trigger('change');\n return messagebar;\n }\n getValue() {\n const messagebar = this;\n return messagebar.$textareaEl.val().trim();\n }\n setValue(value) {\n const messagebar = this;\n messagebar.$textareaEl.val(value).trigger('change');\n return messagebar;\n }\n setPlaceholder(placeholder) {\n const messagebar = this;\n messagebar.$textareaEl.attr('placeholder', placeholder);\n return messagebar;\n }\n resizePage() {\n const messagebar = this;\n const {\n params,\n $el,\n top,\n $pageEl,\n $pageContentEl,\n $areaEl,\n $textareaEl,\n $sheetEl,\n $attachmentsEl\n } = messagebar;\n const elHeight = $el[0].offsetHeight;\n let maxHeight = params.maxHeight;\n if (top) {\n /*\n Disable at the moment\n const requiredPaddingTop = elHeight + params.topOffset;\n const currentPaddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n if (requiredPaddingTop !== currentPaddingTop) {\n if (!maxHeight) {\n maxHeight = $pageEl[0].offsetHeight - currentPaddingTop - $sheetEl.outerHeight() - $attachmentsEl.outerHeight() - parseInt($areaEl.css('margin-top'), 10) - parseInt($areaEl.css('margin-bottom'), 10);\n }\n $textareaEl.css('max-height', `${maxHeight}px`);\n $pageContentEl.css('padding-top', `${requiredPaddingTop}px`);\n $el.trigger('messagebar:resizePage');\n messagebar.emit('local::resizepage messagebarResizePage');\n }\n */\n } else {\n const currentPaddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n const requiredPaddingBottom = elHeight + params.bottomOffset;\n if (requiredPaddingBottom !== currentPaddingBottom && $pageContentEl.length) {\n const currentPaddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const pageScrollHeight = $pageContentEl[0].scrollHeight;\n const pageOffsetHeight = $pageContentEl[0].offsetHeight;\n const pageScrollTop = $pageContentEl[0].scrollTop;\n const scrollOnBottom = pageScrollTop === pageScrollHeight - pageOffsetHeight;\n if (!maxHeight) {\n maxHeight = $pageEl[0].offsetHeight - currentPaddingTop - $sheetEl.outerHeight() - $attachmentsEl.outerHeight() - parseInt($areaEl.css('margin-top'), 10) - parseInt($areaEl.css('margin-bottom'), 10);\n }\n $textareaEl.css('max-height', `${maxHeight}px`);\n $pageContentEl.css('padding-bottom', `${requiredPaddingBottom}px`);\n if (scrollOnBottom) {\n $pageContentEl.scrollTop($pageContentEl[0].scrollHeight - pageOffsetHeight);\n }\n $el.trigger('messagebar:resizepage');\n messagebar.emit('local::resizePage messagebarResizePage', messagebar);\n }\n }\n }\n checkEmptyState() {\n const messagebar = this;\n const {\n $el,\n $textareaEl\n } = messagebar;\n const value = $textareaEl.val().trim();\n if (value && value.length) {\n $el.addClass('messagebar-with-value');\n } else {\n $el.removeClass('messagebar-with-value');\n }\n }\n attachmentsCreate(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n const $attachmentsEl = $(`${innerHTML}
`);\n $attachmentsEl.insertBefore(messagebar.$textareaEl);\n extend(messagebar, {\n $attachmentsEl,\n attachmentsEl: $attachmentsEl[0]\n });\n return messagebar;\n }\n attachmentsShow(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n messagebar.$attachmentsEl = messagebar.$el.find('.messagebar-attachments');\n if (messagebar.$attachmentsEl.length === 0) {\n messagebar.attachmentsCreate(innerHTML);\n }\n messagebar.$el.addClass('messagebar-attachments-visible');\n messagebar.attachmentsVisible = true;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n attachmentsHide() {\n const messagebar = this;\n messagebar.$el.removeClass('messagebar-attachments-visible');\n messagebar.attachmentsVisible = false;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n attachmentsToggle() {\n const messagebar = this;\n if (messagebar.attachmentsVisible) {\n messagebar.attachmentsHide();\n } else {\n messagebar.attachmentsShow();\n }\n return messagebar;\n }\n renderAttachment(attachment) {\n const messagebar = this;\n if (messagebar.params.renderAttachment) {\n return messagebar.params.renderAttachment.call(messagebar, attachment);\n }\n return `\n \n
\n
\n
\n `;\n }\n renderAttachments() {\n const messagebar = this;\n let html;\n if (messagebar.params.renderAttachments) {\n html = messagebar.params.renderAttachments.call(messagebar, messagebar.attachments);\n } else {\n html = `${messagebar.attachments.map(attachment => messagebar.renderAttachment(attachment)).join('')}`;\n }\n if (messagebar.$attachmentsEl.length === 0) {\n messagebar.attachmentsCreate(html);\n } else {\n messagebar.$attachmentsEl.html(html);\n }\n }\n sheetCreate(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n const $sheetEl = $(`${innerHTML}
`);\n messagebar.$el.append($sheetEl);\n extend(messagebar, {\n $sheetEl,\n sheetEl: $sheetEl[0]\n });\n return messagebar;\n }\n sheetShow(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n messagebar.$sheetEl = messagebar.$el.find('.messagebar-sheet');\n if (messagebar.$sheetEl.length === 0) {\n messagebar.sheetCreate(innerHTML);\n }\n messagebar.$el.addClass('messagebar-sheet-visible');\n messagebar.sheetVisible = true;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n sheetHide() {\n const messagebar = this;\n messagebar.$el.removeClass('messagebar-sheet-visible');\n messagebar.sheetVisible = false;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n sheetToggle() {\n const messagebar = this;\n if (messagebar.sheetVisible) {\n messagebar.sheetHide();\n } else {\n messagebar.sheetShow();\n }\n return messagebar;\n }\n init() {\n const messagebar = this;\n messagebar.attachEvents();\n messagebar.checkEmptyState();\n return messagebar;\n }\n destroy() {\n const messagebar = this;\n messagebar.emit('local::beforeDestroy messagebarBeforeDestroy', messagebar);\n messagebar.$el.trigger('messagebar:beforedestroy');\n messagebar.detachEvents();\n if (messagebar.$el[0]) {\n messagebar.$el[0].f7Messagebar = null;\n delete messagebar.$el[0].f7Messagebar;\n }\n deleteProps(messagebar);\n }\n}\nexport default Messagebar;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Messagebar from './messagebar-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'messagebar',\n static: {\n Messagebar\n },\n create() {\n const app = this;\n app.messagebar = ConstructorMethods({\n defaultSelector: '.messagebar',\n constructor: Messagebar,\n app,\n domProp: 'f7Messagebar',\n addMethods: 'clear getValue setValue setPlaceholder resizePage focus blur attachmentsCreate attachmentsShow attachmentsHide attachmentsToggle renderAttachments sheetCreate sheetShow sheetHide sheetToggle'.split(' ')\n });\n },\n on: {\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.messagebar-init').each(messagebarEl => {\n app.messagebar.destroy(messagebarEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.messagebar-init').each(messagebarEl => {\n app.messagebar.create(extend({\n el: messagebarEl\n }, $(messagebarEl).dataset()));\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.messagebar-init').each(messagebarEl => {\n app.messagebar.destroy(messagebarEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.messagebar-init').each(messagebarEl => {\n app.messagebar.create(extend({\n el: messagebarEl\n }, $(messagebarEl).dataset()));\n });\n }\n },\n vnode: {\n 'messagebar-init': {\n insert(vnode) {\n const app = this;\n const messagebarEl = vnode.elm;\n app.messagebar.create(extend({\n el: messagebarEl\n }, $(messagebarEl).dataset()));\n },\n destroy(vnode) {\n const app = this;\n const messagebarEl = vnode.elm;\n app.messagebar.destroy(messagebarEl);\n }\n }\n }\n};", "/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n", "import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, elementIndex as g, getTranslate as h, elementTransitionEnd as i, isObject as j, getSlideTransformEl as k, elementStyle as l, elementNextAll as m, nextTick as n, elementPrevAll as o, animateCSSModeScroll as p, extend as q, deleteProps as r, setCSSProperty as s };\n", "import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, l as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, m as elementNextAll, o as elementPrevAll, h as getTranslate, p as animateCSSModeScroll, n as nextTick, d as now, q as extend, g as elementIndex, c as createElement, r as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.swipeDirection === 'next' && swiper.allowSlideNext || swiper.swipeDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(event.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(event.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === 'SWIPER-CONTAINER') {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { s as setCSSProperty, e as elementChildren, c as createElement } from '../shared/utils.mjs';\n\nfunction Virtual(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n const document = getDocument();\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n const tempDOM = document.createElement('div');\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n // eslint-disable-next-line\n let slideEl;\n if (params.renderSlide) {\n slideEl = params.renderSlide.call(swiper, slide, index);\n if (typeof slideEl === 'string') {\n tempDOM.innerHTML = slideEl;\n slideEl = tempDOM.children[0];\n }\n } else if (swiper.isElement) {\n slideEl = createElement('swiper-slide');\n } else {\n slideEl = createElement('div', swiper.params.slideClass);\n }\n slideEl.setAttribute('data-swiper-slide-index', index);\n if (!params.renderSlide) {\n slideEl.innerHTML = slide;\n }\n if (params.cache) {\n swiper.virtual.cache[index] = slideEl;\n }\n return slideEl;\n }\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides,\n loop: isLoop\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\n }\n let from = activeIndex - slidesBefore;\n let to = activeIndex + slidesAfter;\n if (!isLoop) {\n from = Math.max(from, 0);\n to = Math.min(to, slides.length - 1);\n }\n let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n if (isLoop && activeIndex >= slidesBefore) {\n from -= slidesBefore;\n if (!centeredSlides) offset += swiper.slidesGrid[0];\n } else if (isLoop && activeIndex < slidesBefore) {\n from = -slidesBefore;\n if (centeredSlides) offset += swiper.slidesGrid[0];\n }\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n slidesBefore,\n slidesAfter\n });\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n emit('virtualUpdate');\n }\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n }\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n if (force) {\n swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach(slideEl => {\n slideEl.remove();\n });\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n const slideIndex = getSlideIndex(i);\n swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`)).forEach(slideEl => {\n slideEl.remove();\n });\n }\n }\n }\n const loopFrom = isLoop ? -slides.length : 0;\n const loopTo = isLoop ? slides.length * 2 : slides.length;\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n const slideIndex = getSlideIndex(i);\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(slideIndex);\n } else {\n if (i > previousTo) appendIndexes.push(slideIndex);\n if (i < previousFrom) prependIndexes.push(slideIndex);\n }\n }\n }\n appendIndexes.forEach(index => {\n swiper.slidesEl.append(renderSlide(slides[index], index));\n });\n if (isLoop) {\n for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\n const index = prependIndexes[i];\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n }\n } else {\n prependIndexes.sort((a, b) => b - a);\n prependIndexes.forEach(index => {\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n });\n }\n elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n onRendered();\n }\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const cachedEl = cache[cachedIndex];\n const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n if (cachedElIndex) {\n cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach(key => {\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach(key => {\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n let domSlidesAssigned;\n if (typeof swiper.passedParams.virtual.slides === 'undefined') {\n const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n if (slides && slides.length) {\n swiper.virtual.slides = [...slides];\n domSlidesAssigned = true;\n slides.forEach((slideEl, slideIndex) => {\n slideEl.setAttribute('data-swiper-slide-index', slideIndex);\n swiper.virtual.cache[slideIndex] = slideEl;\n slideEl.remove();\n });\n }\n }\n if (!domSlidesAssigned) {\n swiper.virtual.slides = swiper.params.virtual.slides;\n }\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n update();\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n}\n\nexport { Virtual as default };\n", "import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { a as elementParents, b as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}\n\nexport { Keyboard as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, d as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n return true;\n }\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}\n\nexport { Mousewheel as default };\n", "import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n", "import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n", "function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n", "import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { f as elementOuterSize, g as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const realIndex = swiper.realIndex;\n const newSlideIndex = swiper.getSlideIndexByData(index);\n const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);\n const loopFix = dir => {\n const indexBeforeLoopFix = swiper.activeIndex;\n swiper.loopFix({\n direction: dir,\n activeSlideIndex: newSlideIndex,\n slideTo: false\n });\n const indexAfterFix = swiper.activeIndex;\n if (indexBeforeLoopFix === indexAfterFix) {\n swiper.slideToLoop(realIndex, 0, false, true);\n }\n };\n if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {\n loopFix(newSlideIndex > currentSlideIndex ? 'next' : 'prev');\n } else if (swiper.params.centeredSlides) {\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (newSlideIndex < Math.floor(slidesPerView / 2)) {\n loopFix('prev');\n }\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">${params.bulletElement}>`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { c as createElement, n as nextTick, b as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\n\nfunction Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`);\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n disableDraggable();\n }\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}\n\nexport { Scrollbar as default };\n", "import { e as elementChildren } from '../shared/utils.mjs';\n\nfunction Parallax(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const rtlFactor = rtl ? -1 : 1;\n const p = el.getAttribute('data-swiper-parallax') || '0';\n let x = el.getAttribute('data-swiper-parallax-x');\n let y = el.getAttribute('data-swiper-parallax-y');\n const scale = el.getAttribute('data-swiper-parallax-scale');\n const opacity = el.getAttribute('data-swiper-parallax-opacity');\n const rotate = el.getAttribute('data-swiper-parallax-rotate');\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n el.style.opacity = currentOpacity;\n }\n let transform = `translate3d(${x}, ${y}, 0px)`;\n if (typeof scale !== 'undefined' && scale !== null) {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n transform += ` scale(${currentScale})`;\n }\n if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n const currentRotate = rotate * progress * -1;\n transform += ` rotate(${currentRotate}deg)`;\n }\n el.style.transform = transform;\n };\n const setTranslate = () => {\n const {\n el,\n slides,\n progress,\n snapGrid,\n isElement\n } = swiper;\n const elements = elementChildren(el, elementsSelector);\n if (swiper.isElement) {\n elements.push(...elementChildren(swiper.hostEl, elementsSelector));\n }\n elements.forEach(subEl => {\n setTransform(subEl, progress);\n });\n slides.forEach((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => {\n setTransform(subEl, slideProgress);\n });\n });\n };\n const setTransition = function (duration) {\n if (duration === void 0) {\n duration = swiper.params.speed;\n }\n const {\n el,\n hostEl\n } = swiper;\n const elements = [...el.querySelectorAll(elementsSelector)];\n if (swiper.isElement) {\n elements.push(...hostEl.querySelectorAll(elementsSelector));\n }\n elements.forEach(parallaxEl => {\n let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n });\n };\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}\n\nexport { Parallax as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, a as elementParents, b as elementOffset, h as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\n }\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd();\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}\n\nexport { Zoom as default };\n", "import { n as nextTick, i as elementTransitionEnd } from '../shared/utils.mjs';\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nfunction Controller(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n }\n });\n\n swiper.controller = {\n control: undefined\n };\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2\u2212x1) \u00D7 (y3\u2212y1)) \u00F7 (x3\u2212x1) + y1\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n return this;\n }\n function getInterpolateFunction(c) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n if (c.destroyed) return;\n\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {\n multiplier = 1;\n }\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n if (c.destroyed) return;\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n elementTransitionEnd(c.wrapperEl, () => {\n if (!controlled) return;\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n if (typeof window !== 'undefined' && (\n // eslint-disable-line\n typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\n const controlElement = document.querySelector(swiper.params.controller.control);\n if (controlElement && controlElement.swiper) {\n swiper.controller.control = controlElement.swiper;\n } else if (controlElement) {\n const onControllerSwiper = e => {\n swiper.controller.control = e.detail[0];\n swiper.update();\n controlElement.removeEventListener('init', onControllerSwiper);\n };\n controlElement.addEventListener('init', onControllerSwiper);\n }\n return;\n }\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}\n\nexport { Controller as default };\n", "import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElement, g as elementIndex } from '../shared/utils.mjs';\n\nfunction A11y(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.innerHTML = '';\n notification.innerHTML = message;\n }\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function getRandomNumber(size) {\n if (size === void 0) {\n size = 16;\n }\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n targetEl.click();\n }\n }\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (prevEl) {\n if (swiper.isBeginning) {\n disableEl(prevEl);\n makeElNotFocusable(prevEl);\n } else {\n enableEl(prevEl);\n makeElFocusable(prevEl);\n }\n }\n if (nextEl) {\n if (swiper.isEnd) {\n disableEl(nextEl);\n makeElNotFocusable(nextEl);\n } else {\n enableEl(nextEl);\n makeElFocusable(nextEl);\n }\n }\n }\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.forEach(bulletEl => {\n if (swiper.params.pagination.clickable) {\n makeElFocusable(bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole(bulletEl, 'button');\n addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n }\n }\n if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {\n bulletEl.setAttribute('aria-current', 'true');\n } else {\n bulletEl.removeAttribute('aria-current');\n }\n });\n }\n const initNavEl = (el, wrapperId, message) => {\n makeElFocusable(el);\n if (el.tagName !== 'BUTTON') {\n addElRole(el, 'button');\n el.addEventListener('keydown', onEnterOrSpaceKey);\n }\n addElLabel(el, message);\n addElControls(el, wrapperId);\n };\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n const initSlides = () => {\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n }\n if (params.slideRole) {\n addElRole(swiper.slides, params.slideRole);\n }\n const slidesLength = swiper.slides.length;\n if (params.slideLabelMessage) {\n swiper.slides.forEach((slideEl, index) => {\n const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel(slideEl, ariaLabelMessage);\n });\n }\n };\n const init = () => {\n const params = swiper.params.a11y;\n swiper.el.append(liveRegion);\n\n // Container\n const containerEl = swiper.el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel(containerEl, params.containerMessage);\n }\n\n // Wrapper\n const wrapperEl = swiper.wrapperEl;\n const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId(wrapperEl, wrapperId);\n addElLive(wrapperEl, live);\n\n // Slide\n initSlides();\n\n // Navigation\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n }\n if (prevEl) {\n prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.addEventListener('focus', handleFocus, true);\n swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n swiper.el.addEventListener('pointerup', handlePointerUp, true);\n };\n function destroy() {\n if (liveRegion) liveRegion.remove();\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n if (prevEl) {\n prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\n on('beforeInit', () => {\n liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n liveRegion.setAttribute('aria-live', 'assertive');\n liveRegion.setAttribute('aria-atomic', 'true');\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}\n\nexport { A11y as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\n\nfunction History(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides[index];\n let value = slugify(slide.getAttribute('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key ? `${key}/` : ''}${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key ? `${key}/` : ''}${value}`;\n }\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides[i];\n const slideHistory = slugify(slide.getAttribute('data-history'));\n if (slideHistory === value) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) {\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n return;\n }\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}\n\nexport { History as default };\n", "import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren } from '../shared/utils.mjs';\n\nfunction HashNavigation(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n on\n } = _ref;\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n getSlideIndex(_s, hash) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0];\n if (!slideWithHash) return 0;\n const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);\n return index;\n }\n return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${hash}\"], swiper-slide[data-hash=\"${hash}\"]`)[0]);\n }\n }\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);\n if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${activeSlideHash}` || '');\n emit('hashSet');\n } else {\n document.location.hash = activeSlideHash || '';\n emit('hashSet');\n }\n };\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);\n swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);\n }\n if (swiper.params.hashNavigation.watchState) {\n window.addEventListener('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n window.removeEventListener('hashchange', onHashChange);\n }\n };\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}\n\nexport { HashNavigation as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime;\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n autoplayStartTime = new Date().getTime();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { j as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}\n\nexport { Thumb as default };\n", "import { d as now, i as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n if (swiper.params.cssMode) return;\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n if (swiper.params.cssMode) return;\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n if (swiper.params.cssMode) return;\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}\n\nexport { freeMode as default };\n", "function Grid(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n let wasMultiRow;\n const getSpaceBetween = () => {\n let spaceBetween = swiper.params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n return spaceBetween;\n };\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n slidesPerRow = slidesNumberEvenToRows / rows;\n };\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows,\n fill\n } = swiper.params.grid;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.style.order = newSlideOrderIndex;\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.row = row;\n slide.column = column;\n slide.style[getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\n };\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n centeredSlides,\n roundLengths\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n if (centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.splice(0, snapGrid.length);\n snapGrid.push(...newSlidesGrid);\n }\n };\n const onInit = () => {\n wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;\n };\n const onUpdate = () => {\n const {\n params,\n el\n } = swiper;\n const isMultiRow = params.grid && params.grid.rows > 1;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n numFullColumns = 1;\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n wasMultiRow = isMultiRow;\n };\n on('init', onInit);\n on('update', onUpdate);\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n}\n\nexport { Grid as default };\n", "function appendSlide(slides) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n const appendElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.append(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.append(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) appendElement(slides[i]);\n }\n } else {\n appendElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n}\n\nfunction prependSlide(slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n const prependElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.prepend(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.prepend(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) prependElement(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n prependElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide(index, slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.recalcSlides();\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides[i];\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) slidesEl.append(slides[i]);\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n slidesEl.append(slides);\n }\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n slidesEl.append(slidesBuffer[i]);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n\nfunction Manipulation(_ref) {\n let {\n swiper\n } = _ref;\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n}\n\nexport { Manipulation as default };\n", "function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return;\n // remove shadows\n swiper.slides.forEach(slideEl => {\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());\n });\n // create new one\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}\n\nexport { effectInit as e };\n", "import { k as getSlideTransformEl } from './utils.mjs';\n\nfunction effectTarget(effectParams, slideEl) {\n const transformEl = getSlideTransformEl(slideEl);\n if (transformEl !== slideEl) {\n transformEl.style.backfaceVisibility = 'hidden';\n transformEl.style['-webkit-backface-visibility'] = 'hidden';\n }\n return transformEl;\n}\n\nexport { effectTarget as e };\n", "import { i as elementTransitionEnd } from './utils.mjs';\n\nfunction effectVirtualTransitionEnd(_ref) {\n let {\n swiper,\n duration,\n transformElements,\n allSlides\n } = _ref;\n const {\n activeIndex\n } = swiper;\n const getSlide = el => {\n if (!el.parentElement) {\n // assume shadow root\n const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0];\n return slide;\n }\n return el.parentElement;\n };\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let transitionEndTarget;\n if (allSlides) {\n transitionEndTarget = transformElements;\n } else {\n transitionEndTarget = transformElements.filter(transformEl => {\n const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\n return swiper.getSlideIndex(el) === activeIndex;\n });\n }\n transitionEndTarget.forEach(el => {\n elementTransitionEnd(el, () => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n });\n });\n }\n}\n\nexport { effectVirtualTransitionEnd as e };\n", "import { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectFade(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n fadeEffect: {\n crossFade: false\n }\n });\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = swiper.slides[i];\n const offset = slideEl.swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.opacity = slideOpacity;\n targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectFade as default };\n", "import { e as effectInit } from '../shared/effect-init.mjs';\nimport { c as createElement } from '../shared/utils.mjs';\n\nfunction EffectCube(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n const createSlideShadows = (slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));\n slideEl.append(shadowBefore);\n }\n if (!shadowAfter) {\n shadowAfter = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));\n slideEl.append(shadowAfter);\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.forEach(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows(slideEl, progress, isHorizontal);\n });\n };\n const setTranslate = () => {\n const {\n el,\n wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n swiper.wrapperEl.append(cubeShadowEl);\n }\n cubeShadowEl.style.height = `${swiperWidth}px`;\n } else {\n cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n el.append(cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n slideEl.style.transform = transform;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress, isHorizontal);\n }\n }\n wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`;\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`;\n }\n }\n const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\n wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;\n wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n const setTransition = duration => {\n const {\n el,\n slides\n } = swiper;\n slides.forEach(slideEl => {\n slideEl.style.transitionDuration = `${duration}ms`;\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {\n subEl.style.transitionDuration = `${duration}ms`;\n });\n });\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n const shadowEl = el.querySelector('.swiper-cube-shadow');\n if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\n }\n };\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n}\n\nexport { EffectCube as default };\n", "import { k as getSlideTransformEl, c as createElement } from './utils.mjs';\n\nfunction createShadow(suffix, slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;\n const shadowContainer = getSlideTransformEl(slideEl);\n let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);\n if (!shadowEl) {\n shadowEl = createElement('div', shadowClass.split(' '));\n shadowContainer.append(shadowEl);\n }\n return shadowEl;\n}\n\nexport { createShadow as c };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectFlip(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true\n }\n });\n const createSlideShadows = (slideEl, progress) => {\n let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createShadow('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (!shadowAfter) {\n shadowAfter = createShadow('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // Set shadows\n swiper.params.flipEffect;\n swiper.slides.forEach(slideEl => {\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n createSlideShadows(slideEl, progress);\n });\n };\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n const offset = slideEl.swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress);\n }\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectFlip as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCoverflow(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true\n }\n });\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const slideEl = slides[i];\n const slideSize = slidesSizesGrid[i];\n const slideOffset = slideEl.swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = slideTransform;\n slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBeforeEl) {\n shadowBeforeEl = createShadow('coverflow', slideEl, isHorizontal ? 'left' : 'top');\n }\n if (!shadowAfterEl) {\n shadowAfterEl = createShadow('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n };\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}\n\nexport { EffectCoverflow as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCreative(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n creativeEffect: {\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n const setTranslate = () => {\n const {\n slides,\n wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\n }\n const offset = slideEl.swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if (custom && data.shadow || !custom) {\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl && data.shadow) {\n shadowEl = createShadow('creative', slideEl);\n }\n if (shadowEl) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n targetEl.style.opacity = opacityString;\n if (data.origin) {\n targetEl.style.transformOrigin = data.origin;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectCreative as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCards(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cardsEffect: {\n slideShadows: true,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\n });\n const setTranslate = () => {\n const {\n slides,\n activeIndex,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = rtl ? -swiper.translate : swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = slideEl.swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n if (progress < 0) {\n // next\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n\n /* eslint-disable */\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)\n scale(${scaleString})\n `;\n /* eslint-enable */\n\n if (params.slideShadows) {\n // Set shadows\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl) {\n shadowEl = createShadow('cards', slideEl);\n }\n if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectCards as default };\n", "/**\n * Swiper 10.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 28, 2023\n */\n\nimport { S as Swiper } from './shared/swiper-core.mjs';\nimport Virtual from './modules/virtual.mjs';\nimport Keyboard from './modules/keyboard.mjs';\nimport Mousewheel from './modules/mousewheel.mjs';\nimport Navigation from './modules/navigation.mjs';\nimport Pagination from './modules/pagination.mjs';\nimport Scrollbar from './modules/scrollbar.mjs';\nimport Parallax from './modules/parallax.mjs';\nimport Zoom from './modules/zoom.mjs';\nimport Controller from './modules/controller.mjs';\nimport A11y from './modules/a11y.mjs';\nimport History from './modules/history.mjs';\nimport HashNavigation from './modules/hash-navigation.mjs';\nimport Autoplay from './modules/autoplay.mjs';\nimport Thumb from './modules/thumbs.mjs';\nimport freeMode from './modules/free-mode.mjs';\nimport Grid from './modules/grid.mjs';\nimport Manipulation from './modules/manipulation.mjs';\nimport EffectFade from './modules/effect-fade.mjs';\nimport EffectCube from './modules/effect-cube.mjs';\nimport EffectFlip from './modules/effect-flip.mjs';\nimport EffectCoverflow from './modules/effect-coverflow.mjs';\nimport EffectCreative from './modules/effect-creative.mjs';\nimport EffectCards from './modules/effect-cards.mjs';\n\n// Swiper Class\nconst modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\nSwiper.use(modules);\n\nexport { Swiper, Swiper as default };\n", "/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopedSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideNextClass', 'slidePrevClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params) {\n if (params === void 0) {\n params = {};\n }\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params) {\n if (params === void 0) {\n params = {};\n }\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params) {\n if (params === void 0) {\n params = {};\n }\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames) {\n if (classNames === void 0) {\n classNames = '';\n }\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName) {\n if (attrName === void 0) {\n attrName = '';\n }\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className) {\n if (className === void 0) {\n className = '';\n }\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper(_ref) {\n let {\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n } = _ref;\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n extend(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n nextEl.innerHTML = swiper.hostEl.constructor.nextButtonSvg;\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n prevEl.innerHTML = swiper.hostEl.constructor.prevButtonSvg;\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n", "import { e as extend, i as isObject, c as attrToProp, p as paramsList } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nconst formatValue = val => {\n if (parseFloat(val) === Number(val)) return Number(val);\n if (val === 'true') return true;\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'null') return null;\n if (val === 'undefined') return undefined;\n if (typeof val === 'string' && val.includes('{') && val.includes('}') && val.includes('\"')) {\n let v;\n try {\n v = JSON.parse(val);\n } catch (err) {\n v = val;\n }\n return v;\n }\n return val;\n};\nconst modulesParamsList = ['a11y', 'autoplay', 'controller', 'cards-effect', 'coverflow-effect', 'creative-effect', 'cube-effect', 'fade-effect', 'flip-effect', 'free-mode', 'grid', 'hash-navigation', 'history', 'keyboard', 'mousewheel', 'navigation', 'pagination', 'parallax', 'scrollbar', 'thumbs', 'virtual', 'zoom'];\nfunction getParams(element, propName, propValue) {\n const params = {};\n const passedParams = {};\n extend(params, defaults);\n const localParamsList = [...paramsList, 'on'];\n const allowedParams = localParamsList.map(key => key.replace(/_/, ''));\n\n // First check props\n localParamsList.forEach(paramName => {\n paramName = paramName.replace('_', '');\n if (typeof element[paramName] !== 'undefined') {\n passedParams[paramName] = element[paramName];\n }\n });\n\n // Attributes\n const attrsList = [...element.attributes];\n if (typeof propName === 'string' && typeof propValue !== 'undefined') {\n attrsList.push({\n name: propName,\n value: isObject(propValue) ? {\n ...propValue\n } : propValue\n });\n }\n attrsList.forEach(attr => {\n const moduleParam = modulesParamsList.filter(mParam => attr.name.indexOf(`${mParam}-`) === 0)[0];\n if (moduleParam) {\n const parentObjName = attrToProp(moduleParam);\n const subObjName = attrToProp(attr.name.split(`${moduleParam}-`)[1]);\n if (typeof passedParams[parentObjName] === 'undefined') passedParams[parentObjName] = {};\n if (passedParams[parentObjName] === true) {\n passedParams[parentObjName] = {\n enabled: true\n };\n }\n passedParams[parentObjName][subObjName] = formatValue(attr.value);\n } else {\n const name = attrToProp(attr.name);\n if (!allowedParams.includes(name)) return;\n const value = formatValue(attr.value);\n if (passedParams[name] && modulesParamsList.includes(attr.name) && !isObject(value)) {\n if (passedParams[name].constructor !== Object) {\n passedParams[name] = {};\n }\n passedParams[name].enabled = !!value;\n } else {\n passedParams[name] = value;\n }\n }\n });\n extend(params, passedParams);\n if (params.navigation) {\n params.navigation = {\n prevEl: '.swiper-button-prev',\n nextEl: '.swiper-button-next',\n ...(params.navigation !== true ? params.navigation : {})\n };\n } else if (params.navigation === false) {\n delete params.navigation;\n }\n if (params.scrollbar) {\n params.scrollbar = {\n el: '.swiper-scrollbar',\n ...(params.scrollbar !== true ? params.scrollbar : {})\n };\n } else if (params.scrollbar === false) {\n delete params.scrollbar;\n }\n if (params.pagination) {\n params.pagination = {\n el: '.swiper-pagination',\n ...(params.pagination !== true ? params.pagination : {})\n };\n } else if (params.pagination === false) {\n delete params.pagination;\n }\n return {\n params,\n passedParams\n };\n}\n\nexport { getParams as g };\n", "/**\n * Swiper Custom Element 10.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 28, 2023\n */\n\nimport './swiper-bundle.mjs';\nimport { p as paramsList, n as needsNavigation, a as needsPagination, b as needsScrollbar, u as updateSwiper, c as attrToProp } from './shared/update-swiper.mjs';\nimport { g as getParams } from './shared/get-element-params.mjs';\nimport { S as Swiper } from './shared/swiper-core.mjs';\n\n/* eslint-disable spaced-comment */\n\nconst SwiperCSS = `:host{--swiper-theme-color:#007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{width:100%;height:100%;margin-left:auto;margin-right:auto;position:relative;overflow:hidden;overflow:clip;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);box-sizing:content-box}.swiper-android ::slotted(swiper-slide),.swiper-ios ::slotted(swiper-slide),.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}::slotted(swiper-slide){flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}::slotted(.swiper-slide-invisible-blank){visibility:hidden}.swiper-autoheight,.swiper-autoheight ::slotted(swiper-slide){height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden ::slotted(swiper-slide){transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d ::slotted(swiper-slide){transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode ::slotted(swiper-slide){scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode ::slotted(swiper-slide){scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered ::slotted(swiper-slide){scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal ::slotted(swiper-slide):first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical ::slotted(swiper-slide):first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-virtual ::slotted(swiper-slide){-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:host{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:var(--swiper-navigation-top-offset,50%);width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next svg,.swiper-button-prev svg{width:100%;height:100%;object-fit:contain;transform-origin:center}.swiper-rtl .swiper-button-next svg,.swiper-rtl .swiper-button-prev svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:var(--swiper-navigation-sides-offset,10px);right:auto}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:var(--swiper-pagination-bottom,8px);top:var(--swiper-pagination-top,auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius,50%);background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:var(--swiper-pagination-right,8px);left:var(--swiper-pagination-left,auto);top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color,inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color,rgba(0,0,0,.25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size,4px);left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:var(--swiper-pagination-progressbar-size,4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:var(--swiper-scrollbar-border-radius,10px);position:relative;touch-action:none;background:var(--swiper-scrollbar-bg-color,rgba(0,0,0,.1))}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:var(--swiper-scrollbar-sides-offset,1%);bottom:var(--swiper-scrollbar-bottom,4px);top:var(--swiper-scrollbar-top,auto);z-index:50;height:var(--swiper-scrollbar-size,4px);width:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar.swiper-scrollbar-vertical,.swiper-vertical>.swiper-scrollbar{position:absolute;left:var(--swiper-scrollbar-left,auto);right:var(--swiper-scrollbar-right,4px);top:var(--swiper-scrollbar-sides-offset,1%);z-index:50;width:var(--swiper-scrollbar-size,4px);height:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:var(--swiper-scrollbar-drag-bg-color,rgba(0,0,0,.5));border-radius:var(--swiper-scrollbar-border-radius,10px);left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}::slotted(.swiper-slide-zoomed){cursor:move;touch-action:none}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode ::slotted(swiper-slide){transition-timing-function:ease-out}.swiper-fade ::slotted(swiper-slide){pointer-events:none;transition-property:opacity}.swiper-fade ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-fade ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-fade ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube ::slotted(swiper-slide){pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-cube.swiper-rtl ::slotted(swiper-slide){transform-origin:100% 0}.swiper-cube ::slotted(.swiper-slide-active),.swiper-cube ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-cube ::slotted(.swiper-slide-active),.swiper-cube ::slotted(.swiper-slide-next),.swiper-cube ::slotted(.swiper-slide-prev){pointer-events:auto;visibility:visible}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-cube ::slotted(.swiper-slide-next)+::slotted(swiper-slide){pointer-events:auto;visibility:visible}.swiper-flip{overflow:visible}.swiper-flip ::slotted(swiper-slide){pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-flip ::slotted(.swiper-slide-active),.swiper-flip ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-creative ::slotted(swiper-slide){-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards ::slotted(swiper-slide){transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden}`\nconst SwiperSlideCSS = `::slotted(.swiper-slide-shadow),::slotted(.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-top){position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}::slotted(.swiper-slide-shadow){background:rgba(0,0,0,.15)}::slotted(.swiper-slide-shadow-left){background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-right){background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-top){background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-bottom){background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear;width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-top){z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-top){z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}::slotted(.swiper-zoom-container){width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}::slotted(.swiper-zoom-container)>canvas,::slotted(.swiper-zoom-container)>img,::slotted(.swiper-zoom-container)>svg{max-width:100%;max-height:100%;object-fit:contain}`\n\nclass DummyHTMLElement {}\nconst ClassToExtend = typeof window === 'undefined' || typeof HTMLElement === 'undefined' ? DummyHTMLElement : HTMLElement;\nconst arrowSvg = `\n `;\nconst addStyle = (shadowRoot, styles) => {\n if (typeof CSSStyleSheet !== 'undefined' && shadowRoot.adoptedStyleSheets) {\n const styleSheet = new CSSStyleSheet();\n styleSheet.replaceSync(styles);\n shadowRoot.adoptedStyleSheets = [styleSheet];\n } else {\n const style = document.createElement('style');\n style.rel = 'stylesheet';\n style.textContent = styles;\n shadowRoot.appendChild(style);\n }\n};\nclass SwiperContainer extends ClassToExtend {\n constructor() {\n super();\n this.attachShadow({\n mode: 'open'\n });\n }\n static get nextButtonSvg() {\n return arrowSvg;\n }\n static get prevButtonSvg() {\n return arrowSvg.replace('/>', ' transform-origin=\"center\" transform=\"rotate(180)\"/>');\n }\n cssStyles() {\n return [SwiperCSS,\n // eslint-disable-line\n ...(this.injectStyles && Array.isArray(this.injectStyles) ? this.injectStyles : [])].join('\\n');\n }\n cssLinks() {\n return this.injectStylesUrls || [];\n }\n calcSlideSlots() {\n const currentSideSlots = this.slideSlots || 0;\n // slide slots\n const slideSlotChildren = [...this.querySelectorAll(`[slot^=slide-]`)].map(child => {\n return parseInt(child.getAttribute('slot').split('slide-')[1], 10);\n });\n this.slideSlots = slideSlotChildren.length ? Math.max(...slideSlotChildren) + 1 : 0;\n if (!this.rendered) return;\n if (this.slideSlots > currentSideSlots) {\n for (let i = currentSideSlots; i < this.slideSlots; i += 1) {\n const slideEl = document.createElement('swiper-slide');\n slideEl.setAttribute('part', `slide slide-${i + 1}`);\n const slotEl = document.createElement('slot');\n slotEl.setAttribute('name', `slide-${i + 1}`);\n slideEl.appendChild(slotEl);\n this.shadowRoot.querySelector('.swiper-wrapper').appendChild(slideEl);\n }\n } else if (this.slideSlots < currentSideSlots) {\n const slides = this.swiper.slides;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (i > this.slideSlots) {\n slides[i].remove();\n }\n }\n }\n }\n render() {\n if (this.rendered) return;\n this.calcSlideSlots();\n\n // local styles\n let localStyles = this.cssStyles();\n if (this.slideSlots > 0) {\n localStyles = localStyles.replace(/::slotted\\(([a-z-0-9.]*)\\)/g, '$1');\n }\n if (localStyles.length) {\n addStyle(this.shadowRoot, localStyles);\n }\n this.cssLinks().forEach(url => {\n const linkExists = this.shadowRoot.querySelector(`link[href=\"${url}\"]`);\n if (linkExists) return;\n const linkEl = document.createElement('link');\n linkEl.rel = 'stylesheet';\n linkEl.href = url;\n this.shadowRoot.appendChild(linkEl);\n });\n // prettier-ignore\n const el = document.createElement('div');\n el.classList.add('swiper');\n el.part = 'container';\n\n // prettier-ignore\n el.innerHTML = `\n \n \n \n ${Array.from({\n length: this.slideSlots\n }).map((_, index) => `\n \n \n \n `).join('')}\n
\n \n ${needsNavigation(this.passedParams) ? `\n ${this.constructor.prevButtonSvg}
\n ${this.constructor.nextButtonSvg}
\n ` : ''}\n ${needsPagination(this.passedParams) ? `\n \n ` : ''}\n ${needsScrollbar(this.passedParams) ? `\n \n ` : ''}\n `;\n this.shadowRoot.appendChild(el);\n this.rendered = true;\n }\n initialize() {\n var _this = this;\n if (this.initialized) return;\n this.initialized = true;\n const {\n params: swiperParams,\n passedParams\n } = getParams(this);\n this.swiperParams = swiperParams;\n this.passedParams = passedParams;\n delete this.swiperParams.init;\n this.render();\n\n // eslint-disable-next-line\n this.swiper = new Swiper(this.shadowRoot.querySelector('.swiper'), {\n ...(swiperParams.virtual ? {} : {\n observer: true,\n observeSlideChildren: this.slideSlots > 0\n }),\n ...swiperParams,\n touchEventsTarget: 'container',\n onAny: function (name) {\n if (name === 'observerUpdate') {\n _this.calcSlideSlots();\n }\n const eventName = swiperParams.eventsPrefix ? `${swiperParams.eventsPrefix}${name.toLowerCase()}` : name.toLowerCase();\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const event = new CustomEvent(eventName, {\n detail: args,\n bubbles: name !== 'hashChange',\n cancelable: true\n });\n _this.dispatchEvent(event);\n }\n });\n }\n connectedCallback() {\n if (this.initialized && this.nested && this.closest('swiper-slide') && this.closest('swiper-slide').swiperLoopMoveDOM) {\n return;\n }\n if (this.init === false || this.getAttribute('init') === 'false') {\n return;\n }\n this.initialize();\n }\n disconnectedCallback() {\n if (this.nested && this.closest('swiper-slide') && this.closest('swiper-slide').swiperLoopMoveDOM) {\n return;\n }\n if (this.swiper && this.swiper.destroy) {\n this.swiper.destroy();\n }\n this.initialized = false;\n }\n updateSwiperOnPropChange(propName, propValue) {\n const {\n params: swiperParams,\n passedParams\n } = getParams(this, propName, propValue);\n this.passedParams = passedParams;\n this.swiperParams = swiperParams;\n updateSwiper({\n swiper: this.swiper,\n passedParams: this.passedParams,\n changedParams: [attrToProp(propName)],\n ...(propName === 'navigation' && passedParams[propName] ? {\n prevEl: '.swiper-button-prev',\n nextEl: '.swiper-button-next'\n } : {}),\n ...(propName === 'pagination' && passedParams[propName] ? {\n paginationEl: '.swiper-pagination'\n } : {}),\n ...(propName === 'scrollbar' && passedParams[propName] ? {\n scrollbarEl: '.swiper-scrollbar'\n } : {})\n });\n }\n attributeChangedCallback(attr, prevValue, newValue) {\n if (!this.initialized) return;\n if (prevValue === 'true' && newValue === null) {\n newValue = false;\n }\n this.updateSwiperOnPropChange(attr, newValue);\n }\n static get observedAttributes() {\n const attrs = paramsList.filter(param => param.includes('_')).map(param => param.replace(/[A-Z]/g, v => `-${v}`).replace('_', '').toLowerCase());\n return attrs;\n }\n}\nparamsList.forEach(paramName => {\n if (paramName === 'init') return;\n paramName = paramName.replace('_', '');\n Object.defineProperty(SwiperContainer.prototype, paramName, {\n configurable: true,\n get() {\n return (this.passedParams || {})[paramName];\n },\n set(value) {\n if (!this.passedParams) this.passedParams = {};\n this.passedParams[paramName] = value;\n if (!this.initialized) return;\n this.updateSwiperOnPropChange(paramName, value);\n }\n });\n});\nclass SwiperSlide extends ClassToExtend {\n constructor() {\n super();\n this.attachShadow({\n mode: 'open'\n });\n }\n render() {\n const lazy = this.lazy || this.getAttribute('lazy') === '' || this.getAttribute('lazy') === 'true';\n addStyle(this.shadowRoot, SwiperSlideCSS);\n this.shadowRoot.appendChild(document.createElement('slot'));\n if (lazy) {\n const lazyDiv = document.createElement('div');\n lazyDiv.classList.add('swiper-lazy-preloader');\n lazyDiv.part.add('preloader');\n this.shadowRoot.appendChild(lazyDiv);\n }\n }\n initialize() {\n this.render();\n }\n connectedCallback() {\n this.initialize();\n }\n}\n\n// eslint-disable-next-line\nconst register = () => {\n if (typeof window === 'undefined') return;\n if (!window.customElements.get('swiper-container')) window.customElements.define('swiper-container', SwiperContainer);\n if (!window.customElements.get('swiper-slide')) window.customElements.define('swiper-slide', SwiperSlide);\n};\nif (typeof window !== 'undefined') {\n window.SwiperElementRegisterParams = params => {\n paramsList.push(...params);\n };\n}\n\nexport { SwiperContainer, SwiperSlide, register };\n", "// eslint-disable-next-line\nimport Swiper from 'swiper/bundle';\n// eslint-disable-next-line\nimport { register } from 'swiper/element/bundle';\nimport $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nregister();\n\n\n\nfunction initSwiper(swiperEl) {\n const app = this;\n const $swiperEl = $(swiperEl);\n if ($swiperEl.length === 0) return;\n const isElement = $swiperEl[0].swiper && $swiperEl[0].swiper.isElement;\n if ($swiperEl[0].swiper && !$swiperEl[0].swiper.isElement) return;\n let initialSlide;\n let params = {};\n let isTabs;\n let isRoutableTabs;\n if ($swiperEl.hasClass('tabs')) {\n initialSlide = $swiperEl.children('swiper-slide').indexOf($swiperEl.children('.tab-active')[0]);\n isTabs = true;\n isRoutableTabs = $swiperEl.find('.tabs-routable').length > 0;\n }\n if ($swiperEl.attr('data-swiper')) {\n params = JSON.parse($swiperEl.attr('data-swiper'));\n } else if ($swiperEl[0].f7SwiperParams) {\n params = $swiperEl[0].f7SwiperParams;\n } else {\n params = $swiperEl.dataset();\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (typeof value === 'string' && value.indexOf('{') === 0 && value.indexOf('}') > 0) {\n try {\n params[key] = JSON.parse(value);\n } catch (e) {\n // not JSON\n }\n }\n });\n }\n if (typeof params.initialSlide === 'undefined' && typeof initialSlide !== 'undefined') {\n params.initialSlide = initialSlide;\n }\n const swiper = isElement ? $swiperEl[0].swiper : app.swiper.create($swiperEl[0], params);\n if (isElement) {\n swiper.slideTo(initialSlide, 0);\n }\n function updateSwiper() {\n swiper.update();\n }\n const $tabEl = $swiperEl.parents('.tab').filter(tabEl => {\n return $(tabEl).parent('.tabs').parent('.tabs-animated-wrap, swiper-container.tabs').length === 0;\n }).eq(0);\n $swiperEl.parents('.popup, .login-screen, .sheet-modal, .popover').on('modal:open', updateSwiper);\n $swiperEl.parents('.panel').on('panel:open', updateSwiper);\n if ($tabEl && $tabEl.length) {\n $tabEl.on('tab:show', updateSwiper);\n }\n swiper.on('beforeDestroy', () => {\n $swiperEl.parents('.popup, .login-screen, .sheet-modal, .popover').off('modal:open', updateSwiper);\n $swiperEl.parents('.panel').off('panel:open', updateSwiper);\n if ($tabEl && $tabEl.length) {\n $tabEl.off('tab:show', updateSwiper);\n }\n });\n if (isTabs) {\n swiper.on('slideChange', () => {\n if (isRoutableTabs) {\n let view = app.views.get($swiperEl.parents('.view'));\n if (!view) view = app.views.main;\n const router = view.router;\n const tabRouteUrl = router.findTabRouteUrl($(swiper.slides).eq(swiper.activeIndex)[0]);\n if (tabRouteUrl) {\n setTimeout(() => {\n router.navigate(tabRouteUrl);\n }, 0);\n }\n } else {\n app.tab.show({\n tabEl: $(swiper.slides).eq(swiper.activeIndex)\n });\n }\n });\n }\n}\nexport default {\n name: 'swiper',\n static: {\n Swiper\n },\n create() {\n const app = this;\n app.swiper = ConstructorMethods({\n defaultSelector: '.swiper',\n constructor: Swiper,\n domProp: 'swiper'\n });\n },\n on: {\n pageMounted(page) {\n const app = this;\n page.$el.find('swiper-container.tabs').each(swiperEl => {\n initSwiper.call(app, swiperEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('swiper-container.tabs').each(swiperEl => {\n initSwiper.call(app, swiperEl);\n });\n },\n pageReinit(page) {\n const app = this;\n page.$el.find('swiper-container.tabs').each(swiperEl => {\n const swiper = app.swiper.get(swiperEl);\n if (swiper && swiper.update) swiper.update();\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('swiper-container.tabs').each(swiperEl => {\n initSwiper.call(app, swiperEl);\n });\n },\n tabShow(tabEl) {\n const app = this;\n $(tabEl).find('swiper-container.tabs').each(swiperEl => {\n const swiper = app.swiper.get(swiperEl);\n if (swiper && swiper.update) swiper.update();\n });\n },\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('swiper-container.tabs').each(swiperEl => {\n app.swiper.destroy(swiperEl);\n });\n }\n }\n};", "/* eslint indent: [\"off\"] */\nimport { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, now, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass PhotoBrowser extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const pb = this;\n pb.app = app;\n const defaults = extend({\n on: {}\n }, app.params.photoBrowser);\n\n // Extend defaults with modules params\n pb.useModulesParams(defaults);\n pb.params = extend(defaults, params);\n extend(pb, {\n exposed: false,\n opened: false,\n activeIndex: pb.params.swiper.initialSlide,\n url: pb.params.url,\n swipeToClose: {\n allow: true,\n isTouched: false,\n diff: undefined,\n start: undefined,\n current: undefined,\n started: false,\n activeSlide: undefined,\n timeStart: undefined\n }\n });\n\n // Install Modules\n pb.useModules();\n\n // Init\n pb.init();\n }\n get view() {\n const {\n params,\n app\n } = this;\n return params.view || app.views.main;\n }\n onSlideChange(swiper) {\n const pb = this;\n pb.activeIndex = swiper.activeIndex;\n let current = swiper.activeIndex + 1;\n let total = pb.params.virtualSlides ? pb.params.photos.length : swiper.slides.length;\n if (swiper.params.loop) {\n total -= 2;\n current -= swiper.loopedSlides;\n if (current < 1) current = total + current;\n if (current > total) current -= total;\n }\n const $activeSlideEl = pb.params.virtualSlides ? $(swiper.wrapperEl).find(`.swiper-slide[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : $(swiper.slides).eq(swiper.activeIndex);\n const $previousSlideEl = pb.params.virtualSlides ? $(swiper.wrapperEl).find(`.swiper-slide[data-swiper-slide-index=\"${swiper.previousIndex}\"]`) : $(swiper.slides).eq(swiper.previousIndex);\n let $currentEl = pb.$el.find('.photo-browser-current');\n let $totalEl = pb.$el.find('.photo-browser-total');\n let navbarEl;\n if (pb.params.type === 'page' && pb.params.navbar && $currentEl.length === 0 && pb.app.theme === 'ios') {\n navbarEl = pb.app.navbar.getElByPage(pb.$el);\n if (navbarEl) {\n $currentEl = $(navbarEl).find('.photo-browser-current');\n $totalEl = $(navbarEl).find('.photo-browser-total');\n }\n }\n if ($currentEl.length && $totalEl.length) {\n $currentEl.text(current);\n $totalEl.text(total);\n if (!navbarEl) navbarEl = $currentEl.parents('.navbar')[0];\n if (navbarEl) {\n pb.app.navbar.size(navbarEl);\n }\n }\n\n // Update captions\n if (pb.captions.length > 0) {\n const captionIndex = swiper.params.loop ? $activeSlideEl.attr('data-swiper-slide-index') : pb.activeIndex;\n pb.$captionsContainerEl.find('.photo-browser-caption-active').removeClass('photo-browser-caption-active');\n pb.$captionsContainerEl.find(`[data-caption-index=\"${captionIndex}\"]`).addClass('photo-browser-caption-active');\n }\n\n // Stop Video\n const previousSlideVideo = $previousSlideEl.find('video');\n if (previousSlideVideo.length > 0) {\n if ('pause' in previousSlideVideo[0]) previousSlideVideo[0].pause();\n }\n }\n onTouchStart() {\n const pb = this;\n const swipeToClose = pb.swipeToClose;\n if (!swipeToClose.allow) return;\n swipeToClose.isTouched = true;\n }\n onTouchMove(e) {\n const pb = this;\n const swipeToClose = pb.swipeToClose;\n if (!swipeToClose.isTouched) return;\n if (!swipeToClose.started) {\n swipeToClose.started = true;\n swipeToClose.start = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (pb.params.virtualSlides) {\n swipeToClose.activeSlide = $(pb.swiper.wrapperEl).children('.swiper-slide-active');\n } else {\n swipeToClose.activeSlide = $(pb.swiper.slides).eq(pb.swiper.activeIndex);\n }\n swipeToClose.timeStart = now();\n }\n e.preventDefault();\n swipeToClose.current = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n swipeToClose.diff = swipeToClose.start - swipeToClose.current;\n pb.$el.transition(0).transform(`translate3d(0,${-swipeToClose.diff}px,0)`);\n }\n onTouchEnd() {\n const pb = this;\n const swipeToClose = pb.swipeToClose;\n swipeToClose.isTouched = false;\n if (!swipeToClose.started) {\n swipeToClose.started = false;\n return;\n }\n swipeToClose.started = false;\n swipeToClose.allow = false;\n const diff = Math.abs(swipeToClose.diff);\n const timeDiff = new Date().getTime() - swipeToClose.timeStart;\n if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > 100) {\n nextTick(() => {\n if (pb.$el) {\n if (swipeToClose.diff < 0) pb.$el.addClass('swipe-close-to-bottom');else pb.$el.addClass('swipe-close-to-top');\n }\n pb.emit('local::swipeToClose', pb);\n pb.$el.transform('').transition('');\n pb.close();\n swipeToClose.allow = true;\n });\n return;\n }\n if (diff !== 0) {\n pb.$el.addClass('photo-browser-transitioning').transitionEnd(() => {\n swipeToClose.allow = true;\n pb.$el.removeClass('photo-browser-transitioning');\n });\n } else {\n swipeToClose.allow = true;\n }\n nextTick(() => {\n pb.$el.transform('').transition('');\n });\n }\n\n // Render Functions\n renderNavbar() {\n const pb = this;\n if (pb.params.renderNavbar) return pb.params.renderNavbar.call(pb);\n const iconsColor = pb.params.iconsColor;\n const pageBackLinkText = pb.app.theme === 'ios' && pb.params.pageBackLinkText ? pb.params.pageBackLinkText : '';\n const renderNavbarCount = typeof pb.params.navbarShowCount === 'undefined' ? pb.params.photos.length > 1 : pb.params.navbarShowCount;\n const isPopup = pb.params.type !== 'page';\n return $jsx(\"div\", {\n class: `navbar navbar-photo-browser ${pb.params.theme === 'dark' ? 'navbar-photo-browser-dark' : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: \"navbar-inner navbar-inner-centered-title sliding\"\n }, !isPopup && $jsx(\"div\", {\n class: \"left\"\n }, $jsx(\"a\", {\n class: `link ${!pageBackLinkText ? 'icon-only' : ''} back`\n }, $jsx(\"i\", {\n class: `icon icon-back ${iconsColor ? `color-${iconsColor}` : ''}`\n }), pageBackLinkText && $jsx(\"span\", null, pageBackLinkText))), renderNavbarCount && $jsx(\"div\", {\n class: \"title\"\n }, $jsx(\"span\", {\n class: \"photo-browser-current\"\n }), $jsx(\"span\", {\n class: \"photo-browser-of\"\n }, pb.params.navbarOfText), $jsx(\"span\", {\n class: \"photo-browser-total\"\n })), isPopup && (pb.params.popupCloseLinkText || pb.params.popupCloseLinkIcon) && $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": \".photo-browser-popup\"\n }, pb.params.popupCloseLinkIcon && pb.app.theme === 'ios' && $jsx(\"i\", null, $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"56\",\n height: \"56\",\n viewBox: \"0 0 56 56\"\n }, $jsx(\"path\", {\n fill: \"currentColor\",\n d: \"M 10.0234 43.0234 C 9.2266 43.8203 9.2031 45.1797 10.0234 45.9766 C 10.8438 46.7734 12.1797 46.7734 13.0000 45.9766 L 28.0000 30.9766 L 43.0000 45.9766 C 43.7969 46.7734 45.1563 46.7969 45.9766 45.9766 C 46.7734 45.1562 46.7734 43.8203 45.9766 43.0234 L 30.9531 28.0000 L 45.9766 13.0000 C 46.7734 12.2031 46.7969 10.8437 45.9766 10.0469 C 45.1328 9.2266 43.7969 9.2266 43.0000 10.0469 L 28.0000 25.0469 L 13.0000 10.0469 C 12.1797 9.2266 10.8203 9.2031 10.0234 10.0469 C 9.2266 10.8672 9.2266 12.2031 10.0234 13.0000 L 25.0234 28.0000 Z\"\n }))), pb.params.popupCloseLinkIcon && pb.app.theme === 'md' && $jsx(\"i\", null, $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"currentColor\"\n }, $jsx(\"path\", {\n d: \"M0 0h24v24H0V0z\",\n fill: \"none\"\n }), $jsx(\"path\", {\n d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"\n }))), pb.params.popupCloseLinkText && $jsx(\"span\", null, pb.params.popupCloseLinkText)))));\n }\n renderToolbar() {\n const pb = this;\n if (pb.params.renderToolbar) return pb.params.renderToolbar.call(pb);\n const iconsColor = pb.params.iconsColor;\n return $jsx(\"div\", {\n class: \"toolbar toolbar-bottom tabbar\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"a\", {\n class: \"link photo-browser-prev\"\n }, $jsx(\"i\", {\n class: `icon icon-back ${iconsColor ? `color-${iconsColor}` : ''}`\n })), $jsx(\"a\", {\n class: \"link photo-browser-next\"\n }, $jsx(\"i\", {\n class: `icon icon-forward ${iconsColor ? `color-${iconsColor}` : ''}`\n }))));\n }\n renderThumbs() {\n const pb = this;\n return $jsx(\"div\", {\n class: \"toolbar toolbar-bottom photo-browser-thumbs\"\n }, $jsx(\"div\", {\n class: \"swiper\"\n }, $jsx(\"div\", {\n class: \"swiper-wrapper\"\n }, pb.params.thumbs.map((thumb, index) => pb.renderThumb(thumb, index)))));\n }\n renderCaption(caption, index) {\n const pb = this;\n if (pb.params.renderCaption) return pb.params.renderCaption.call(pb, caption, index);\n return $jsx(\"div\", {\n class: \"photo-browser-caption\",\n \"data-caption-index\": index\n }, caption);\n }\n renderObject(photo, index) {\n const pb = this;\n if (pb.params.renderObject) return pb.params.renderObject.call(pb, photo, index);\n return $jsx(\"div\", {\n class: \"photo-browser-slide photo-browser-object-slide swiper-slide\",\n \"data-swiper-slide-index\": index\n }, photo.html ? photo.html : photo);\n }\n renderLazyPhoto(photo, index) {\n const pb = this;\n if (pb.params.renderLazyPhoto) return pb.params.renderLazyPhoto.call(pb, photo, index);\n return $jsx(\"div\", {\n class: \"photo-browser-slide photo-browser-slide-lazy swiper-slide\",\n \"data-swiper-slide-index\": index\n }, $jsx(\"div\", {\n class: \"swiper-lazy-preloader\"\n }), $jsx(\"span\", {\n class: \"swiper-zoom-container\"\n }, $jsx(\"img\", {\n loading: \"lazy\",\n src: photo.url ? photo.url : photo\n })));\n }\n renderPhoto(photo, index) {\n const pb = this;\n if (pb.params.renderPhoto) return pb.params.renderPhoto.call(pb, photo, index);\n return $jsx(\"div\", {\n class: \"photo-browser-slide swiper-slide\",\n \"data-swiper-slide-index\": index\n }, $jsx(\"span\", {\n class: \"swiper-zoom-container\"\n }, $jsx(\"img\", {\n src: photo.url ? photo.url : photo\n })));\n }\n renderThumb(thumb, index) {\n const pb = this;\n const url = typeof thumb === 'string' ? thumb : thumb.url;\n if (pb.params.renderThumb) return pb.params.renderThumb.call(pb, thumb, index);\n return $jsx(\"div\", {\n class: \"photo-browser-thumbs-slide swiper-slide\",\n \"data-swiper-slide-index\": index\n }, url && $jsx(\"img\", {\n src: url,\n loading: \"lazy\"\n }));\n }\n render() {\n const pb = this;\n if (pb.params.render) return pb.params.render.call(pb, pb.params);\n return $jsx(\"div\", {\n class: `photo-browser photo-browser-${pb.params.theme}`\n }, $jsx(\"div\", {\n class: \"view\"\n }, $jsx(\"div\", {\n class: `page photo-browser-page photo-browser-page-${pb.params.theme} no-toolbar ${!pb.params.navbar ? 'no-navbar' : ''}`,\n \"data-name\": \"photo-browser-page\"\n }, pb.params.navbar && pb.renderNavbar(), pb.params.toolbar && pb.renderToolbar(), pb.params.thumbs && pb.params.thumbs.length && pb.renderThumbs(), $jsx(\"div\", {\n class: `photo-browser-captions photo-browser-captions-${pb.params.captionsTheme || pb.params.theme}`\n }, pb.params.photos.map((photo, index) => {\n if (photo.caption) return pb.renderCaption(photo.caption, index);\n return '';\n })), $jsx(\"div\", {\n class: \"photo-browser-swiper-container swiper\"\n }, $jsx(\"div\", {\n class: \"photo-browser-swiper-wrapper swiper-wrapper\"\n }, !pb.params.virtualSlides && pb.params.photos.map((photo, index) => {\n if (photo.html || (typeof photo === 'string' || photo instanceof String) && photo.indexOf('<') >= 0 && photo.indexOf('>') >= 0) {\n return pb.renderObject(photo, index);\n }\n if (pb.params.lazy === true) {\n return pb.renderLazyPhoto(photo, index);\n }\n return pb.renderPhoto(photo, index);\n }))))));\n }\n renderStandalone() {\n const pb = this;\n if (pb.params.renderStandalone) return pb.params.renderStandalone.call(pb);\n const standaloneHtml = ``;\n return standaloneHtml;\n }\n renderPage() {\n const pb = this;\n if (pb.params.renderPage) return pb.params.renderPage.call(pb);\n const pageHtml = pb.render();\n return pageHtml;\n }\n renderPopup() {\n const pb = this;\n if (pb.params.renderPopup) return pb.params.renderPopup.call(pb);\n const popupHtml = ``;\n return popupHtml;\n }\n\n // Callbacks\n onOpen(type, el) {\n const pb = this;\n const app = pb.app;\n const $el = $(el);\n $el[0].f7PhotoBrowser = pb;\n pb.$el = $el;\n pb.el = $el[0];\n pb.openedIn = type;\n pb.opened = true;\n pb.$swiperContainerEl = pb.$el.find('.photo-browser-swiper-container');\n pb.$swiperWrapperEl = pb.$el.find('.photo-browser-swiper-wrapper');\n pb.slides = pb.$el.find('.photo-browser-slide');\n pb.$captionsContainerEl = pb.$el.find('.photo-browser-captions');\n pb.captions = pb.$el.find('.photo-browser-caption');\n const hasThumbs = pb.params.thumbs && pb.params.thumbs.length > 0;\n\n // Init Swiper\n let clickTimeout;\n let preventThumbsSlide;\n let preventMainSlide;\n const initialSlide = pb.activeIndex;\n const swiperParams = extend({}, pb.params.swiper, {\n initialSlide,\n // cssMode:\n // typeof pb.params.swiper.cssMode === 'undefined' && (app.device.ios || app.device.android)\n // ? true\n // : pb.params.swiper.cssMode,\n on: {\n click(e) {\n clearTimeout(clickTimeout);\n if (pb.params.exposition) {\n clickTimeout = setTimeout(() => {\n pb.expositionToggle();\n }, 350);\n }\n pb.emit('local::tap', e);\n pb.emit('local::click', e);\n },\n doubleClick(e) {\n clearTimeout(clickTimeout);\n pb.emit('local::doubleTap', e);\n pb.emit('local::doubleClick', e);\n },\n slideChange() {\n const swiper = this;\n if (hasThumbs && pb.thumbsSwiper && !preventMainSlide) {\n preventThumbsSlide = true;\n pb.thumbsSwiper.slideTo(pb.swiper.activeIndex);\n setTimeout(() => {\n preventThumbsSlide = false;\n });\n }\n pb.onSlideChange(swiper);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n pb.emit('local::slideChange', ...args);\n },\n transitionStart() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n pb.emit('local::transitionStart', ...args);\n },\n transitionEnd() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n pb.emit('local::transitionEnd', ...args);\n },\n slideChangeTransitionStart() {\n const swiper = this;\n pb.onSlideChange(swiper);\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n pb.emit('local::slideChangeTransitionStart', ...args);\n },\n slideChangeTransitionEnd() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n pb.emit('local::slideChangeTransitionEnd', ...args);\n }\n }\n });\n if (pb.params.swipeToClose && pb.params.type !== 'page') {\n extend(swiperParams.on, {\n touchStart(swiper, e) {\n pb.onTouchStart(e);\n pb.emit('local::touchStart', e);\n },\n touchMoveOpposite(swiper, e) {\n pb.onTouchMove(e);\n pb.emit('local::touchMoveOpposite', e);\n },\n touchEnd(swiper, e) {\n pb.onTouchEnd(e);\n pb.emit('local::touchEnd', e);\n }\n });\n }\n if (pb.params.virtualSlides) {\n extend(swiperParams, {\n virtual: {\n slides: pb.params.photos,\n renderSlide(photo, index) {\n if (photo.html || (typeof photo === 'string' || photo instanceof String) && photo.indexOf('<') >= 0 && photo.indexOf('>') >= 0) {\n return pb.renderObject(photo, index);\n }\n if (pb.params.lazy === true) {\n return pb.renderLazyPhoto(photo, index);\n }\n return pb.renderPhoto(photo, index);\n }\n }\n });\n }\n const window = getWindow();\n pb.swiper = app.swiper ? app.swiper.create(pb.$swiperContainerEl[0], swiperParams) : new window.Swiper(pb.$swiperContainerEl[0], swiperParams);\n if (pb.activeIndex === 0 || pb.params.virtualSlides) {\n pb.onSlideChange(pb.swiper);\n }\n if (hasThumbs) {\n const thumbsSwiperParams = {\n el: pb.$el.find('.photo-browser-thumbs .swiper')[0],\n slidesPerView: 'auto',\n centeredSlides: true,\n spaceBetween: 4,\n watchSlidesProgress: true,\n initialSlide,\n on: {\n touchMove() {\n preventMainSlide = true;\n },\n touchEnd() {\n preventMainSlide = false;\n },\n slideChange(s) {\n if (preventThumbsSlide) return;\n pb.swiper.slideTo(s.activeIndex, 0);\n },\n click(s) {\n if (!s.clickedSlide) return;\n const index = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);\n s.slideTo(index, 0);\n }\n }\n };\n pb.thumbsSwiper = app.swiper ? app.swiper.create(thumbsSwiperParams) : new window.Swiper(thumbsSwiperParams);\n }\n if (pb.$el) {\n pb.$el.trigger('photobrowser:open');\n }\n pb.emit('local::open photoBrowserOpen', pb);\n }\n onOpened() {\n const pb = this;\n if (pb.$el && pb.params.type === 'standalone') {\n pb.$el.css('animation', 'none');\n }\n if (pb.$el) {\n pb.$el.trigger('photobrowser:opened');\n }\n pb.emit('local::opened photoBrowserOpened', pb);\n }\n onClose() {\n const pb = this;\n if (pb.destroyed) return;\n\n // Destroy Swiper\n if (pb.swiper && pb.swiper.destroy) {\n pb.swiper.destroy(true, false);\n pb.swiper = null;\n delete pb.swiper;\n }\n if (pb.thumbsSwiper && pb.thumbsSwiper.destroy) {\n pb.thumbsSwiper.destroy(true, false);\n pb.thumbsSwiper = null;\n delete pb.thumbsSwiper;\n }\n if (pb.$el) {\n pb.$el.trigger('photobrowser:close');\n }\n pb.emit('local::close photoBrowserClose', pb);\n }\n onClosed() {\n const pb = this;\n if (pb.destroyed) return;\n pb.opened = false;\n pb.$el = null;\n pb.el = null;\n delete pb.$el;\n delete pb.el;\n if (pb.$el) {\n pb.$el.trigger('photobrowser:closed');\n }\n pb.emit('local::closed photoBrowserClosed', pb);\n }\n\n // Open\n openPage() {\n const pb = this;\n if (pb.opened) return pb;\n const pageHtml = pb.renderPage();\n pb.view.router.navigate({\n url: pb.url,\n route: {\n content: pageHtml,\n path: pb.url,\n on: {\n pageBeforeIn(e, page) {\n pb.view.$el.addClass(`with-photo-browser-page with-photo-browser-page-${pb.params.theme}`);\n pb.onOpen('page', page.el);\n },\n pageAfterIn(e, page) {\n pb.onOpened('page', page.el);\n },\n pageBeforeOut(e, page) {\n pb.view.$el.removeClass(`with-photo-browser-page with-photo-browser-page-exposed with-photo-browser-page-${pb.params.theme}`);\n pb.onClose('page', page.el);\n },\n pageAfterOut(e, page) {\n pb.onClosed('page', page.el);\n }\n }\n }\n });\n return pb;\n }\n openStandalone() {\n const pb = this;\n if (pb.opened) return pb;\n const standaloneHtml = pb.renderStandalone();\n const popupParams = {\n backdrop: false,\n content: standaloneHtml,\n on: {\n popupOpen(popup) {\n pb.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n pb.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n pb.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n pb.onClosed('popup', popup.el);\n }\n }\n };\n if (pb.params.routableModals && pb.view) {\n pb.view.router.navigate({\n url: pb.url,\n route: {\n path: pb.url,\n popup: popupParams\n }\n });\n } else {\n pb.modal = pb.app.popup.create(popupParams).open();\n }\n return pb;\n }\n openPopup() {\n const pb = this;\n if (pb.opened) return pb;\n const popupHtml = pb.renderPopup();\n const popupParams = {\n content: popupHtml,\n push: pb.params.popupPush,\n closeByBackdropClick: pb.params.closeByBackdropClick,\n on: {\n popupOpen(popup) {\n pb.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n pb.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n pb.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n pb.onClosed('popup', popup.el);\n }\n }\n };\n if (pb.params.routableModals && pb.view) {\n pb.view.router.navigate({\n url: pb.url,\n route: {\n path: pb.url,\n popup: popupParams\n }\n });\n } else {\n pb.modal = pb.app.popup.create(popupParams).open();\n }\n return pb;\n }\n\n // Exposition\n expositionEnable() {\n const pb = this;\n if (pb.params.type === 'page') {\n pb.view.$el.addClass('with-photo-browser-page-exposed');\n }\n if (pb.$el) pb.$el.addClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.addClass('photo-browser-captions-exposed');\n pb.exposed = true;\n return pb;\n }\n expositionDisable() {\n const pb = this;\n if (pb.params.type === 'page') {\n pb.view.$el.removeClass('with-photo-browser-page-exposed');\n }\n if (pb.$el) pb.$el.removeClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.removeClass('photo-browser-captions-exposed');\n pb.exposed = false;\n return pb;\n }\n expositionToggle() {\n const pb = this;\n if (pb.params.type === 'page') {\n pb.view.$el.toggleClass('with-photo-browser-page-exposed');\n }\n if (pb.$el) pb.$el.toggleClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.toggleClass('photo-browser-captions-exposed');\n pb.exposed = !pb.exposed;\n return pb;\n }\n open(index) {\n const pb = this;\n const type = pb.params.type;\n if (pb.opened) {\n if (pb.swiper && typeof index !== 'undefined') {\n pb.swiper.slideTo(parseInt(index, 10));\n }\n return pb;\n }\n if (typeof index !== 'undefined') {\n pb.activeIndex = index;\n }\n if (type === 'standalone') {\n pb.openStandalone();\n }\n if (type === 'page') {\n pb.openPage();\n }\n if (type === 'popup') {\n pb.openPopup();\n }\n return pb;\n }\n close() {\n const pb = this;\n if (!pb.opened) return pb;\n if (pb.params.routableModals && pb.view || pb.openedIn === 'page') {\n pb.view.router.back();\n } else {\n pb.modal.once('modalClosed', () => {\n nextTick(() => {\n if (pb.destroyed) return;\n pb.modal.destroy();\n delete pb.modal;\n });\n });\n pb.modal.close();\n }\n return pb;\n }\n // eslint-disable-next-line\n init() {}\n destroy() {\n let pb = this;\n pb.emit('local::beforeDestroy photoBrowserBeforeDestroy', pb);\n if (pb.$el) {\n pb.$el.trigger('photobrowser:beforedestroy');\n pb.$el[0].f7PhotoBrowser = null;\n delete pb.$el[0].f7PhotoBrowser;\n }\n deleteProps(pb);\n pb.destroyed = true;\n pb = null;\n }\n}\nexport default PhotoBrowser;", "import PhotoBrowser from './photo-browser-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'photoBrowser',\n params: {\n photoBrowser: {\n photos: [],\n thumbs: [],\n exposition: true,\n expositionHideCaptions: false,\n type: 'standalone',\n navbar: true,\n toolbar: true,\n theme: 'light',\n captionsTheme: undefined,\n iconsColor: undefined,\n popupPush: false,\n swipeToClose: true,\n pageBackLinkText: 'Back',\n popupCloseLinkText: undefined,\n popupCloseLinkIcon: true,\n navbarOfText: 'of',\n navbarShowCount: undefined,\n view: undefined,\n url: 'photos/',\n routableModals: false,\n virtualSlides: true,\n lazy: true,\n closeByBackdropClick: true,\n renderNavbar: undefined,\n renderToolbar: undefined,\n renderCaption: undefined,\n renderObject: undefined,\n renderLazyPhoto: undefined,\n renderPhoto: undefined,\n renderThumb: undefined,\n renderPage: undefined,\n renderPopup: undefined,\n renderStandalone: undefined,\n swiper: {\n cssMode: false,\n initialSlide: 0,\n spaceBetween: 20,\n speed: 300,\n loop: false,\n keyboard: {\n enabled: true\n },\n navigation: {\n nextEl: '.photo-browser-next',\n prevEl: '.photo-browser-prev'\n },\n zoom: {\n enabled: true,\n maxRatio: 3,\n minRatio: 1\n }\n }\n }\n },\n create() {\n const app = this;\n app.photoBrowser = ConstructorMethods({\n defaultSelector: '.photo-browser-popup, .photo-browser-page',\n constructor: PhotoBrowser,\n app,\n domProp: 'f7PhotoBrowser'\n });\n },\n static: {\n PhotoBrowser\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, now, nextTick } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Notification extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.notification, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const notification = this;\n notification.app = app;\n notification.params = extendedParams;\n const {\n icon,\n title,\n titleRightText,\n subtitle,\n text,\n closeButton,\n closeTimeout,\n cssClass,\n closeOnClick\n } = notification.params;\n let $el;\n if (!notification.params.el) {\n // Find Element\n const notificationHtml = notification.render({\n icon,\n title,\n titleRightText,\n subtitle,\n text,\n closeButton,\n cssClass\n });\n $el = $(notificationHtml);\n } else {\n $el = $(notification.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return notification.destroy();\n }\n extend(notification, {\n $el,\n el: $el[0],\n type: 'notification'\n });\n $el[0].f7Modal = notification;\n if (closeButton) {\n $el.find('.notification-close-button').on('click', () => {\n notification.close();\n });\n }\n $el.on('click', e => {\n if (closeButton && $(e.target).closest('.notification-close-button').length) {\n return;\n }\n notification.emit('local::click notificationClick', notification);\n if (closeOnClick) notification.close();\n });\n notification.on('beforeDestroy', () => {\n $el.off('click');\n });\n\n /* Touch Events */\n let isTouched;\n let isMoved;\n let isScrolling;\n let touchesDiff;\n let touchStartTime;\n let notificationHeight;\n const touchesStart = {};\n function handleTouchStart(e) {\n if (isTouched) return;\n isTouched = true;\n isMoved = false;\n isScrolling = undefined;\n touchStartTime = now();\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) < Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n if (!isMoved) {\n notification.$el.removeClass('notification-transitioning');\n notification.$el.transition(0);\n notificationHeight = notification.$el[0].offsetHeight / 2;\n }\n isMoved = true;\n touchesDiff = pageY - touchesStart.y;\n let newTranslate = touchesDiff;\n if (touchesDiff > 0) {\n newTranslate = touchesDiff ** 0.8;\n }\n notification.$el.transform(`translate3d(0, ${newTranslate}px, 0)`);\n }\n function handleTouchEnd() {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n if (touchesDiff === 0) {\n return;\n }\n const timeDiff = now() - touchStartTime;\n notification.$el.transition('');\n notification.$el.addClass('notification-transitioning');\n notification.$el.transform('');\n if (touchesDiff < -10 && timeDiff < 300 || -touchesDiff >= notificationHeight / 1) {\n notification.close();\n }\n }\n function attachTouchEvents() {\n notification.$el.on(app.touchEvents.start, handleTouchStart, {\n passive: true\n });\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n }\n function detachTouchEvents() {\n notification.$el.off(app.touchEvents.start, handleTouchStart, {\n passive: true\n });\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n }\n let timeoutId;\n function closeOnTimeout() {\n timeoutId = nextTick(() => {\n if (isTouched && isMoved) {\n closeOnTimeout();\n return;\n }\n notification.close();\n }, closeTimeout);\n }\n notification.on('open', () => {\n if (notification.params.swipeToClose) {\n attachTouchEvents();\n }\n $('.notification.modal-in').each(openedEl => {\n const notificationInstance = app.notification.get(openedEl);\n if (openedEl !== notification.el && notificationInstance) {\n notificationInstance.close();\n }\n });\n if (closeTimeout) {\n closeOnTimeout();\n }\n });\n notification.on('close beforeDestroy', () => {\n if (notification.params.swipeToClose) {\n detachTouchEvents();\n }\n clearTimeout(timeoutId);\n });\n return notification;\n }\n render() {\n const notification = this;\n if (notification.params.render) return notification.params.render.call(notification, notification);\n const {\n icon,\n title,\n titleRightText,\n subtitle,\n text,\n closeButton,\n cssClass\n } = notification.params;\n return $jsx(\"div\", {\n class: `notification ${icon ? 'notification-with-icon' : ''} ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"notification-header\"\n }, icon && $jsx(\"div\", {\n class: \"notification-icon\"\n }, icon), title && $jsx(\"div\", {\n class: \"notification-title\"\n }, title), titleRightText && $jsx(\"div\", {\n class: \"notification-title-right-text\"\n }, titleRightText), closeButton && $jsx(\"span\", {\n class: \"notification-close-button\"\n })), $jsx(\"div\", {\n class: \"notification-content\"\n }, subtitle && $jsx(\"div\", {\n class: \"notification-subtitle\"\n }, subtitle), text && $jsx(\"div\", {\n class: \"notification-text\"\n }, text)));\n }\n}\nexport default Notification;", "import { extend } from '../../shared/utils.js';\nimport Notification from './notification-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'notification',\n static: {\n Notification\n },\n create() {\n const app = this;\n app.notification = extend({}, ModalMethods({\n app,\n constructor: Notification,\n defaultSelector: '.notification.modal-in'\n }));\n },\n params: {\n notification: {\n icon: null,\n title: null,\n titleRightText: null,\n subtitle: null,\n text: null,\n closeButton: false,\n closeTimeout: null,\n closeOnClick: false,\n swipeToClose: true,\n cssClass: null,\n render: null,\n containerEl: null\n }\n }\n};", "/* eslint \"no-useless-escape\": \"off\" */\nimport $ from '../../shared/dom7.js';\nimport { extend, id, nextTick, deleteProps, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Autocomplete extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const ac = this;\n ac.app = app;\n const device = getDevice();\n const defaults = extend({\n on: {}\n }, app.params.autocomplete);\n\n // Extend defaults with modules params\n ac.useModulesParams(defaults);\n ac.params = extend(defaults, params);\n let $openerEl;\n if (ac.params.openerEl) {\n $openerEl = $(ac.params.openerEl);\n if ($openerEl.length) $openerEl[0].f7Autocomplete = ac;\n }\n let $inputEl;\n if (ac.params.inputEl) {\n $inputEl = $(ac.params.inputEl);\n if ($inputEl.length) $inputEl[0].f7Autocomplete = ac;\n }\n const uniqueId = id();\n let url = params.url;\n if (!url && $openerEl && $openerEl.length) {\n if ($openerEl.attr('href')) url = $openerEl.attr('href');else if ($openerEl.find('a').length > 0) {\n url = $openerEl.find('a').attr('href');\n }\n }\n if (!url || url === '#' || url === '') url = ac.params.url;\n const inputType = ac.params.multiple ? 'checkbox' : 'radio';\n extend(ac, {\n $openerEl,\n openerEl: $openerEl && $openerEl[0],\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n id: uniqueId,\n url,\n value: ac.params.value || [],\n inputType,\n inputName: `${inputType}-${uniqueId}`,\n $modalEl: undefined,\n $dropdownEl: undefined\n });\n let previousQuery = '';\n function onInputChange() {\n let query = ac.$inputEl.val().trim();\n if (!ac.params.source) return;\n ac.params.source.call(ac, query, items => {\n let itemsHTML = '';\n const limit = ac.params.limit ? Math.min(ac.params.limit, items.length) : items.length;\n ac.items = items;\n let regExp;\n if (ac.params.highlightMatches) {\n query = query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n regExp = new RegExp(`(${query})`, 'i');\n }\n let firstValue;\n let firstItem;\n for (let i = 0; i < limit; i += 1) {\n const itemValue = typeof items[i] === 'object' ? items[i][ac.params.valueProperty] : items[i];\n const itemText = typeof items[i] === 'object' ? items[i][ac.params.textProperty] : items[i];\n if (i === 0) {\n firstValue = itemValue;\n firstItem = ac.items[i];\n }\n itemsHTML += ac.renderItem({\n value: itemValue,\n text: ac.params.highlightMatches ? itemText.replace(regExp, '$1') : itemText\n }, i);\n }\n if (itemsHTML === '' && query === '' && ac.params.dropdownPlaceholderText) {\n itemsHTML += ac.renderItem({\n placeholder: true,\n text: ac.params.dropdownPlaceholderText\n });\n }\n ac.$dropdownEl.find('ul').html(itemsHTML);\n if (ac.params.typeahead) {\n if (!firstValue || !firstItem) {\n return;\n }\n if (firstValue.toLowerCase().indexOf(query.toLowerCase()) !== 0) {\n return;\n }\n if (previousQuery.toLowerCase() === query.toLowerCase()) {\n ac.value = [];\n return;\n }\n if (previousQuery.toLowerCase().indexOf(query.toLowerCase()) === 0) {\n previousQuery = query;\n ac.value = [];\n return;\n }\n $inputEl.val(firstValue);\n $inputEl[0].setSelectionRange(query.length, firstValue.length);\n const previousValue = typeof ac.value[0] === 'object' ? ac.value[0][ac.params.valueProperty] : ac.value[0];\n if (!previousValue || firstValue.toLowerCase() !== previousValue.toLowerCase()) {\n ac.value = [firstItem];\n ac.emit('local::change autocompleteChange', [firstItem]);\n }\n }\n previousQuery = query;\n });\n }\n function onPageInputChange() {\n const inputEl = this;\n const value = inputEl.value;\n const isValues = $(inputEl).parents('.autocomplete-values').length > 0;\n let item;\n let itemValue;\n let aValue;\n if (isValues) {\n if (ac.inputType === 'checkbox' && !inputEl.checked) {\n for (let i = 0; i < ac.value.length; i += 1) {\n aValue = typeof ac.value[i] === 'string' ? ac.value[i] : ac.value[i][ac.params.valueProperty];\n if (aValue === value || aValue * 1 === value * 1) {\n ac.value.splice(i, 1);\n }\n }\n ac.updateValues();\n ac.emit('local::change autocompleteChange', ac.value);\n }\n return;\n }\n\n // Find Related Item\n for (let i = 0; i < ac.items.length; i += 1) {\n itemValue = typeof ac.items[i] === 'object' ? ac.items[i][ac.params.valueProperty] : ac.items[i];\n if (itemValue === value || itemValue * 1 === value * 1) item = ac.items[i];\n }\n if (ac.inputType === 'radio') {\n ac.value = [item];\n } else if (inputEl.checked) {\n ac.value.push(item);\n } else {\n for (let i = 0; i < ac.value.length; i += 1) {\n aValue = typeof ac.value[i] === 'object' ? ac.value[i][ac.params.valueProperty] : ac.value[i];\n if (aValue === value || aValue * 1 === value * 1) {\n ac.value.splice(i, 1);\n }\n }\n }\n\n // Update Values Block\n ac.updateValues();\n\n // On Select Callback\n if (ac.inputType === 'radio' && inputEl.checked || ac.inputType === 'checkbox') {\n ac.emit('local::change autocompleteChange', ac.value);\n }\n }\n function onHtmlClick(e) {\n const $targetEl = $(e.target);\n if ($targetEl.is(ac.$inputEl[0]) || ac.$dropdownEl && $targetEl.closest(ac.$dropdownEl[0]).length) return;\n ac.close();\n }\n function onOpenerClick() {\n ac.open();\n }\n function onInputFocus() {\n ac.open();\n }\n function onInputBlur() {\n if (ac.$dropdownEl.find('label.active-state').length > 0) return;\n setTimeout(() => {\n ac.close();\n }, 0);\n }\n function onResize() {\n ac.positionDropdown();\n }\n function onKeyDown(e) {\n if (!ac.opened) return;\n if (e.keyCode === 27) {\n // ESC\n e.preventDefault();\n ac.$inputEl.blur();\n return;\n }\n if (e.keyCode === 13) {\n // Enter\n const $selectedItemLabel = ac.$dropdownEl.find('.autocomplete-dropdown-selected label');\n if ($selectedItemLabel.length) {\n e.preventDefault();\n $selectedItemLabel.trigger('click');\n ac.$inputEl.blur();\n return;\n }\n if (ac.params.typeahead) {\n e.preventDefault();\n ac.$inputEl.blur();\n }\n return;\n }\n if (e.keyCode !== 40 && e.keyCode !== 38) return;\n e.preventDefault();\n const $selectedItem = ac.$dropdownEl.find('.autocomplete-dropdown-selected');\n let $newItem;\n if ($selectedItem.length) {\n $newItem = $selectedItem[e.keyCode === 40 ? 'next' : 'prev']('li');\n if (!$newItem.length) {\n $newItem = ac.$dropdownEl.find('li').eq(e.keyCode === 40 ? 0 : ac.$dropdownEl.find('li').length - 1);\n }\n } else {\n $newItem = ac.$dropdownEl.find('li').eq(e.keyCode === 40 ? 0 : ac.$dropdownEl.find('li').length - 1);\n }\n if ($newItem.hasClass('autocomplete-dropdown-placeholder')) return;\n $selectedItem.removeClass('autocomplete-dropdown-selected');\n $newItem.addClass('autocomplete-dropdown-selected');\n }\n function onDropdownClick() {\n const $clickedEl = $(this);\n let clickedItem;\n for (let i = 0; i < ac.items.length; i += 1) {\n const itemValue = typeof ac.items[i] === 'object' ? ac.items[i][ac.params.valueProperty] : ac.items[i];\n const value = $clickedEl.attr('data-value');\n if (itemValue === value || itemValue * 1 === value * 1) {\n clickedItem = ac.items[i];\n }\n }\n if (ac.params.updateInputValueOnSelect) {\n ac.$inputEl.val(typeof clickedItem === 'object' ? clickedItem[ac.params.valueProperty] : clickedItem);\n ac.$inputEl.trigger('input change');\n }\n ac.value = [clickedItem];\n ac.emit('local::change autocompleteChange', [clickedItem]);\n ac.close();\n }\n ac.attachEvents = function attachEvents() {\n if (ac.params.openIn !== 'dropdown' && ac.$openerEl) {\n ac.$openerEl.on('click', onOpenerClick);\n }\n if (ac.params.openIn === 'dropdown' && ac.$inputEl) {\n ac.$inputEl.on('focus', onInputFocus);\n ac.$inputEl.on(ac.params.inputEvents, onInputChange);\n if (device.android) {\n $('html').on('click', onHtmlClick);\n } else {\n ac.$inputEl.on('blur', onInputBlur);\n }\n ac.$inputEl.on('keydown', onKeyDown);\n }\n };\n ac.detachEvents = function attachEvents() {\n if (ac.params.openIn !== 'dropdown' && ac.$openerEl) {\n ac.$openerEl.off('click', onOpenerClick);\n }\n if (ac.params.openIn === 'dropdown' && ac.$inputEl) {\n ac.$inputEl.off('focus', onInputFocus);\n ac.$inputEl.off(ac.params.inputEvents, onInputChange);\n if (device.android) {\n $('html').off('click', onHtmlClick);\n } else {\n ac.$inputEl.off('blur', onInputBlur);\n }\n ac.$inputEl.off('keydown', onKeyDown);\n }\n };\n ac.attachDropdownEvents = function attachDropdownEvents() {\n ac.$dropdownEl.on('click', 'label', onDropdownClick);\n app.on('resize', onResize);\n };\n ac.detachDropdownEvents = function detachDropdownEvents() {\n ac.$dropdownEl.off('click', 'label', onDropdownClick);\n app.off('resize', onResize);\n };\n ac.attachPageEvents = function attachPageEvents() {\n ac.$el.on('change', 'input[type=\"radio\"], input[type=\"checkbox\"]', onPageInputChange);\n if (ac.params.closeOnSelect && !ac.params.multiple) {\n ac.$el.once('click', '.list label', () => {\n nextTick(() => {\n ac.close();\n });\n });\n }\n };\n ac.detachPageEvents = function detachPageEvents() {\n ac.$el.off('change', 'input[type=\"radio\"], input[type=\"checkbox\"]', onPageInputChange);\n };\n\n // Install Modules\n ac.useModules();\n\n // Init\n ac.init();\n return ac;\n }\n get view() {\n const ac = this;\n const {\n $openerEl,\n $inputEl,\n app\n } = ac;\n let view;\n if (ac.params.view) {\n view = ac.params.view;\n } else if ($openerEl || $inputEl) {\n const $el = $openerEl || $inputEl;\n view = $el.closest('.view').length && $el.closest('.view')[0].f7View;\n }\n if (!view) view = app.views.main;\n return view;\n }\n positionDropdown() {\n const ac = this;\n const {\n $inputEl,\n app,\n $dropdownEl\n } = ac;\n const $pageContentEl = $inputEl.parents('.page-content');\n if ($pageContentEl.length === 0) return;\n const inputOffset = $inputEl.offset();\n const inputOffsetWidth = $inputEl[0].offsetWidth;\n const inputOffsetHeight = $inputEl[0].offsetHeight;\n const $listEl = $inputEl.parents('.list');\n let $listParent;\n $listEl.parents().each(parentEl => {\n if ($listParent) return;\n const $parentEl = $(parentEl);\n if ($parentEl.parent($pageContentEl).length) $listParent = $parentEl;\n });\n const listOffset = $listEl.offset();\n const paddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n const listOffsetLeft = $listEl.length > 0 ? listOffset.left - $pageContentEl.offset().left : 0;\n const inputOffsetLeft = inputOffset.left - ($listEl.length > 0 ? listOffset.left : 0) - (app.rtl ? 0 : 0);\n const inputOffsetTop = inputOffset.top - ($pageContentEl.offset().top - $pageContentEl[0].scrollTop);\n const maxHeight = $pageContentEl[0].scrollHeight - paddingBottom - (inputOffsetTop + $pageContentEl[0].scrollTop) - $inputEl[0].offsetHeight;\n const paddingProp = app.rtl ? 'padding-right' : 'padding-left';\n let paddingValue;\n if ($listEl.length) {\n paddingValue = (app.rtl ? $listEl[0].offsetWidth - inputOffsetLeft - inputOffsetWidth : inputOffsetLeft) - (app.theme === 'md' ? 16 : 15);\n }\n $dropdownEl.css({\n left: `${$listEl.length > 0 ? listOffsetLeft : inputOffsetLeft}px`,\n top: `${inputOffsetTop + $pageContentEl[0].scrollTop + inputOffsetHeight}px`,\n width: `${$listEl.length > 0 ? $listEl[0].offsetWidth : inputOffsetWidth}px`\n });\n $dropdownEl.children('.autocomplete-dropdown-inner').css({\n maxHeight: `${maxHeight}px`,\n [paddingProp]: $listEl.length > 0 ? `${paddingValue}px` : ''\n });\n }\n focus() {\n const ac = this;\n ac.$el.find('input[type=search]').focus();\n }\n source(query) {\n const ac = this;\n if (!ac.params.source) return;\n const {\n $el\n } = ac;\n ac.params.source.call(ac, query, items => {\n let itemsHTML = '';\n const limit = ac.params.limit ? Math.min(ac.params.limit, items.length) : items.length;\n ac.items = items;\n for (let i = 0; i < limit; i += 1) {\n let selected = false;\n const itemValue = typeof items[i] === 'object' ? items[i][ac.params.valueProperty] : items[i];\n for (let j = 0; j < ac.value.length; j += 1) {\n const aValue = typeof ac.value[j] === 'object' ? ac.value[j][ac.params.valueProperty] : ac.value[j];\n if (aValue === itemValue || aValue * 1 === itemValue * 1) selected = true;\n }\n itemsHTML += ac.renderItem({\n value: itemValue,\n text: typeof items[i] === 'object' ? items[i][ac.params.textProperty] : items[i],\n inputType: ac.inputType,\n id: ac.id,\n inputName: ac.inputName,\n selected\n }, i);\n }\n $el.find('.autocomplete-found ul').html(itemsHTML);\n if (items.length === 0) {\n if (query.length !== 0) {\n $el.find('.autocomplete-not-found').show();\n $el.find('.autocomplete-found, .autocomplete-values').hide();\n } else {\n $el.find('.autocomplete-values').show();\n $el.find('.autocomplete-found, .autocomplete-not-found').hide();\n }\n } else {\n $el.find('.autocomplete-found').show();\n $el.find('.autocomplete-not-found, .autocomplete-values').hide();\n }\n });\n }\n updateValues() {\n const ac = this;\n let valuesHTML = '';\n for (let i = 0; i < ac.value.length; i += 1) {\n valuesHTML += ac.renderItem({\n value: typeof ac.value[i] === 'object' ? ac.value[i][ac.params.valueProperty] : ac.value[i],\n text: typeof ac.value[i] === 'object' ? ac.value[i][ac.params.textProperty] : ac.value[i],\n inputType: ac.inputType,\n id: ac.id,\n inputName: `${ac.inputName}-checked}`,\n selected: true\n }, i);\n }\n ac.$el.find('.autocomplete-values ul').html(valuesHTML);\n }\n preloaderHide() {\n const ac = this;\n if (ac.params.openIn === 'dropdown' && ac.$dropdownEl) {\n ac.$dropdownEl.find('.autocomplete-preloader').removeClass('autocomplete-preloader-visible');\n } else {\n $('.autocomplete-preloader').removeClass('autocomplete-preloader-visible');\n }\n }\n preloaderShow() {\n const ac = this;\n if (ac.params.openIn === 'dropdown' && ac.$dropdownEl) {\n ac.$dropdownEl.find('.autocomplete-preloader').addClass('autocomplete-preloader-visible');\n } else {\n $('.autocomplete-preloader').addClass('autocomplete-preloader-visible');\n }\n }\n renderPreloader() {\n const ac = this;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n return $jsx(\"div\", {\n class: `autocomplete-preloader preloader ${ac.params.preloaderColor ? `color-${ac.params.preloaderColor}` : ''}`\n }, preloaders[`${ac.app.theme}PreloaderContent`] || '');\n }\n renderSearchbar() {\n const ac = this;\n if (ac.params.renderSearchbar) return ac.params.renderSearchbar.call(ac);\n return $jsx(\"form\", {\n class: \"searchbar\"\n }, $jsx(\"div\", {\n class: \"searchbar-inner\"\n }, $jsx(\"div\", {\n class: \"searchbar-input-wrap\"\n }, $jsx(\"input\", {\n type: \"search\",\n spellcheck: ac.params.searchbarSpellcheck || 'false',\n placeholder: ac.params.searchbarPlaceholder\n }), $jsx(\"i\", {\n class: \"searchbar-icon\"\n }), $jsx(\"span\", {\n class: \"input-clear-button\"\n })), ac.params.searchbarDisableButton && $jsx(\"span\", {\n class: \"searchbar-disable-button\"\n }, ac.params.searchbarDisableText)));\n }\n renderItem(item, index) {\n const ac = this;\n if (ac.params.renderItem) return ac.params.renderItem.call(ac, item, index);\n const itemValue = item.value && typeof item.value === 'string' ? item.value.replace(/\"/g, '"') : item.value;\n if (ac.params.openIn !== 'dropdown') {\n return $jsx(\"li\", null, $jsx(\"label\", {\n class: `item-${item.inputType} item-content`\n }, $jsx(\"input\", {\n type: item.inputType,\n name: item.inputName,\n value: itemValue,\n _checked: item.selected\n }), $jsx(\"i\", {\n class: `icon icon-${item.inputType}`\n }), $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, item.text))));\n }\n // Dropdown\n if (!item.placeholder) {\n return $jsx(\"li\", null, $jsx(\"label\", {\n class: \"item-radio item-content\",\n \"data-value\": itemValue\n }, $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, item.text))));\n }\n\n // Dropwdown placeholder\n return $jsx(\"li\", {\n class: \"autocomplete-dropdown-placeholder\"\n }, $jsx(\"label\", {\n class: \"item-content\"\n }, $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, item.text))));\n }\n renderNavbar() {\n const ac = this;\n if (ac.params.renderNavbar) return ac.params.renderNavbar.call(ac);\n let pageTitle = ac.params.pageTitle;\n if (typeof pageTitle === 'undefined' && ac.$openerEl && ac.$openerEl.length) {\n pageTitle = ac.$openerEl.find('.item-title').text().trim();\n }\n const inPopup = ac.params.openIn === 'popup';\n\n // eslint-disable-next-line\n const navbarLeft = inPopup ? ac.params.preloader && $jsx(\"div\", {\n class: \"left\"\n }, ac.renderPreloader()) : $jsx(\"div\", {\n class: \"left sliding\"\n }, $jsx(\"a\", {\n class: \"link back\"\n }, $jsx(\"i\", {\n class: \"icon icon-back\"\n }), $jsx(\"span\", {\n class: \"if-not-md\"\n }, ac.params.pageBackLinkText)));\n const navbarRight = inPopup ? $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": \".autocomplete-popup\"\n }, ac.params.popupCloseLinkText)) : ac.params.preloader && $jsx(\"div\", {\n class: \"right\"\n }, ac.renderPreloader());\n return $jsx(\"div\", {\n class: `navbar ${ac.params.navbarColorTheme ? `color-${ac.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: `navbar-inner ${ac.params.navbarColorTheme ? `color-${ac.params.navbarColorTheme}` : ''}`\n }, navbarLeft, pageTitle && $jsx(\"div\", {\n class: \"title sliding\"\n }, pageTitle), navbarRight, $jsx(\"div\", {\n class: \"subnavbar sliding\"\n }, ac.renderSearchbar())));\n }\n renderDropdown() {\n const ac = this;\n if (ac.params.renderDropdown) return ac.params.renderDropdown.call(ac, ac.items);\n return $jsx(\"div\", {\n class: \"autocomplete-dropdown\"\n }, $jsx(\"div\", {\n class: \"autocomplete-dropdown-inner\"\n }, $jsx(\"div\", {\n class: `list no-safe-areas`\n }, $jsx(\"ul\", null))), ac.params.preloader && ac.renderPreloader());\n }\n renderPage(inPopup) {\n const ac = this;\n if (ac.params.renderPage) return ac.params.renderPage.call(ac, ac.items);\n return $jsx(\"div\", {\n class: \"page page-with-subnavbar autocomplete-page\",\n \"data-name\": \"autocomplete-page\"\n }, ac.renderNavbar(inPopup), $jsx(\"div\", {\n class: \"searchbar-backdrop\"\n }), $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list autocomplete-list autocomplete-found autocomplete-list-${ac.id} ${ac.params.formColorTheme ? `color-${ac.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null)), $jsx(\"div\", {\n class: \"list autocomplete-not-found\"\n }, $jsx(\"ul\", null, $jsx(\"li\", {\n class: \"item-content\"\n }, $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, ac.params.notFoundText))))), $jsx(\"div\", {\n class: \"list autocomplete-values\"\n }, $jsx(\"ul\", null))));\n }\n renderPopup() {\n const ac = this;\n if (ac.params.renderPopup) return ac.params.renderPopup.call(ac, ac.items);\n return $jsx(\"div\", {\n class: \"popup autocomplete-popup\"\n }, $jsx(\"div\", {\n class: \"view\"\n }, ac.renderPage(true), \";\"));\n }\n onOpen(type, el) {\n const ac = this;\n const app = ac.app;\n const $el = $(el);\n ac.$el = $el;\n ac.el = $el[0];\n ac.openedIn = type;\n ac.opened = true;\n if (ac.params.openIn === 'dropdown') {\n ac.attachDropdownEvents();\n ac.$dropdownEl.addClass('autocomplete-dropdown-in');\n ac.$inputEl.trigger('input');\n } else {\n // Init SB\n let $searchbarEl = $el.find('.searchbar');\n if (ac.params.openIn === 'page' && app.theme === 'ios' && $searchbarEl.length === 0) {\n $searchbarEl = $(app.navbar.getElByPage($el)).find('.searchbar');\n }\n ac.searchbar = app.searchbar.create({\n el: $searchbarEl,\n backdropEl: $el.find('.searchbar-backdrop'),\n customSearch: true,\n on: {\n search(sb, query) {\n if (query.length === 0 && ac.searchbar.enabled) {\n ac.searchbar.backdropShow();\n } else {\n ac.searchbar.backdropHide();\n }\n ac.source(query);\n }\n }\n });\n\n // Attach page events\n ac.attachPageEvents();\n\n // Update Values On Page Init\n ac.updateValues();\n\n // Source on load\n if (ac.params.requestSourceOnOpen) ac.source('');\n }\n ac.emit('local::open autocompleteOpen', ac);\n }\n autoFocus() {\n const ac = this;\n if (ac.searchbar && ac.searchbar.$inputEl) {\n ac.searchbar.$inputEl.focus();\n }\n return ac;\n }\n onOpened() {\n const ac = this;\n if (ac.params.openIn !== 'dropdown' && ac.params.autoFocus) {\n ac.autoFocus();\n }\n ac.emit('local::opened autocompleteOpened', ac);\n }\n onClose() {\n const ac = this;\n if (ac.destroyed) return;\n\n // Destroy SB\n if (ac.searchbar && ac.searchbar.destroy) {\n ac.searchbar.destroy();\n ac.searchbar = null;\n delete ac.searchbar;\n }\n if (ac.params.openIn === 'dropdown') {\n ac.detachDropdownEvents();\n ac.$dropdownEl.removeClass('autocomplete-dropdown-in').remove();\n } else {\n ac.detachPageEvents();\n }\n ac.emit('local::close autocompleteClose', ac);\n }\n onClosed() {\n const ac = this;\n if (ac.destroyed) return;\n ac.opened = false;\n ac.$el = null;\n ac.el = null;\n delete ac.$el;\n delete ac.el;\n ac.emit('local::closed autocompleteClosed', ac);\n }\n openPage() {\n const ac = this;\n if (ac.opened) return ac;\n const pageHtml = ac.renderPage();\n ac.view.router.navigate({\n url: ac.url,\n route: {\n content: pageHtml,\n path: ac.url,\n on: {\n pageBeforeIn(e, page) {\n ac.onOpen('page', page.el);\n },\n pageAfterIn(e, page) {\n ac.onOpened('page', page.el);\n },\n pageBeforeOut(e, page) {\n ac.onClose('page', page.el);\n },\n pageAfterOut(e, page) {\n ac.onClosed('page', page.el);\n }\n },\n options: {\n animate: ac.params.animate\n }\n }\n });\n return ac;\n }\n openPopup() {\n const ac = this;\n if (ac.opened) return ac;\n const popupHtml = ac.renderPopup();\n const popupParams = {\n content: popupHtml,\n animate: ac.params.animate,\n push: ac.params.popupPush,\n swipeToClose: ac.params.popupSwipeToClose,\n on: {\n popupOpen(popup) {\n ac.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n ac.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n ac.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n ac.onClosed('popup', popup.el);\n }\n }\n };\n if (ac.params.routableModals && ac.view) {\n ac.view.router.navigate({\n url: ac.url,\n route: {\n path: ac.url,\n popup: popupParams\n }\n });\n } else {\n ac.modal = ac.app.popup.create(popupParams).open(ac.params.animate);\n }\n return ac;\n }\n openDropdown() {\n const ac = this;\n if (!ac.$dropdownEl) {\n ac.$dropdownEl = $(ac.renderDropdown());\n }\n const $pageContentEl = ac.$inputEl.parents('.page-content');\n if (ac.params.dropdownContainerEl) {\n $(ac.params.dropdownContainerEl).append(ac.$dropdownEl);\n } else if ($pageContentEl.length === 0) {\n ac.$dropdownEl.insertAfter(ac.$inputEl);\n } else {\n ac.positionDropdown();\n $pageContentEl.append(ac.$dropdownEl);\n }\n ac.onOpen('dropdown', ac.$dropdownEl);\n ac.onOpened('dropdown', ac.$dropdownEl);\n }\n open() {\n const ac = this;\n if (ac.opened) return ac;\n const openIn = ac.params.openIn;\n ac[`open${openIn.split('').map((el, index) => {\n if (index === 0) return el.toUpperCase();\n return el;\n }).join('')}`]();\n return ac;\n }\n close() {\n const ac = this;\n if (!ac.opened) return ac;\n if (ac.params.openIn === 'dropdown') {\n ac.onClose();\n ac.onClosed();\n } else if (ac.params.routableModals && ac.view || ac.openedIn === 'page') {\n ac.view.router.back({\n animate: ac.params.animate\n });\n } else {\n ac.modal.once('modalClosed', () => {\n nextTick(() => {\n if (ac.destroyed) return;\n ac.modal.destroy();\n delete ac.modal;\n });\n });\n ac.modal.close();\n }\n return ac;\n }\n init() {\n const ac = this;\n ac.attachEvents();\n }\n destroy() {\n const ac = this;\n ac.emit('local::beforeDestroy autocompleteBeforeDestroy', ac);\n ac.detachEvents();\n if (ac.$inputEl && ac.$inputEl[0]) {\n delete ac.$inputEl[0].f7Autocomplete;\n }\n if (ac.$openerEl && ac.$openerEl[0]) {\n delete ac.$openerEl[0].f7Autocomplete;\n }\n deleteProps(ac);\n ac.destroyed = true;\n }\n}\nexport default Autocomplete;", "import { extend } from '../../shared/utils.js';\nimport Autocomplete from './autocomplete-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'autocomplete',\n params: {\n autocomplete: {\n openerEl: undefined,\n inputEl: undefined,\n view: undefined,\n // DropDown\n dropdownContainerEl: undefined,\n dropdownPlaceholderText: undefined,\n typeahead: false,\n highlightMatches: true,\n updateInputValueOnSelect: true,\n inputEvents: 'input',\n value: undefined,\n multiple: false,\n source: undefined,\n limit: undefined,\n valueProperty: 'id',\n textProperty: 'text',\n openIn: 'page',\n // or 'popup' or 'dropdown'\n pageBackLinkText: 'Back',\n popupCloseLinkText: 'Close',\n pageTitle: undefined,\n searchbarPlaceholder: 'Search...',\n searchbarDisableText: 'Cancel',\n searchbarDisableButton: true,\n searchbarSpellcheck: false,\n popupPush: false,\n popupSwipeToClose: undefined,\n animate: true,\n autoFocus: false,\n closeOnSelect: false,\n notFoundText: 'Nothing found',\n requestSourceOnOpen: false,\n // Preloader\n preloaderColor: undefined,\n preloader: false,\n // Colors\n formColorTheme: undefined,\n navbarColorTheme: undefined,\n // Routing\n routableModals: false,\n url: 'select/',\n // Custom render functions\n renderDropdown: undefined,\n renderPage: undefined,\n renderPopup: undefined,\n renderItem: undefined,\n renderSearchbar: undefined,\n renderNavbar: undefined\n }\n },\n static: {\n Autocomplete\n },\n create() {\n const app = this;\n app.autocomplete = extend(ConstructorMethods({\n defaultSelector: undefined,\n constructor: Autocomplete,\n app,\n domProp: 'f7Autocomplete'\n }), {\n open(autocompleteEl) {\n const ac = app.autocomplete.get(autocompleteEl);\n if (ac && ac.open) return ac.open();\n return undefined;\n },\n close(autocompleteEl) {\n const ac = app.autocomplete.get(autocompleteEl);\n if (ac && ac.close) return ac.close();\n return undefined;\n }\n });\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport Framework7Class from '../../shared/class.js';\nclass Tooltip extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const tooltip = this;\n const support = getSupport();\n const defaults = extend({}, app.params.tooltip);\n const document = getDocument();\n\n // Extend defaults with modules params\n tooltip.useModulesParams(defaults);\n tooltip.params = extend(defaults, params);\n if (typeof params.offset === 'undefined' && support.touch && tooltip.params.trigger === 'hover') {\n tooltip.params.offset = 10;\n }\n const {\n targetEl,\n containerEl\n } = tooltip.params;\n if (!targetEl && !tooltip.params.delegated) return tooltip;\n const $targetEl = $(targetEl);\n if ($targetEl.length === 0 && !tooltip.params.delegated) return tooltip;\n if ($targetEl[0] && $targetEl[0].f7Tooltip && !tooltip.params.delegated) return $targetEl[0].f7Tooltip;\n let $containerEl = $(containerEl || app.$el).eq(0);\n if ($containerEl.length === 0) {\n $containerEl = app.$el;\n }\n const $el = $(tooltip.render()).eq(0);\n extend(tooltip, {\n app,\n $targetEl,\n targetEl: $targetEl && $targetEl[0],\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n $el,\n el: $el && $el[0],\n text: tooltip.params.text || '',\n visible: false,\n opened: false\n });\n if ($targetEl[0]) $targetEl[0].f7Tooltip = tooltip;\n const touchesStart = {};\n let isTouched;\n function handleClick() {\n if (tooltip.opened) tooltip.hide();else tooltip.show(this);\n }\n function handleClickOut(e) {\n if (tooltip.opened && ($(e.target).closest($targetEl).length || $(e.target).closest(tooltip.$el).length)) return;\n tooltip.hide();\n }\n function handleTouchStart(e) {\n if (isTouched) return;\n isTouched = true;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n tooltip.show(this);\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n const distance = ((x - touchesStart.x) ** 2 + (y - touchesStart.y) ** 2) ** 0.5;\n if (distance > 50) {\n isTouched = false;\n tooltip.hide();\n }\n }\n function handleTouchEnd() {\n if (!isTouched) return;\n isTouched = false;\n tooltip.hide();\n }\n function handleMouseEnter() {\n tooltip.show(this);\n }\n function handleMouseLeave() {\n tooltip.hide();\n }\n function handleTransitionEnd() {\n if (!$el.hasClass('tooltip-in')) {\n $el.removeClass('tooltip-out').remove();\n }\n }\n tooltip.attachEvents = function attachEvents() {\n $el.on('transitionend', handleTransitionEnd);\n if (tooltip.params.trigger === 'click') {\n if (tooltip.params.delegated) {\n $(document).on('click', tooltip.params.targetEl, handleClick);\n } else {\n tooltip.$targetEl.on('click', handleClick);\n }\n $('html').on('click', handleClickOut);\n return;\n }\n if (tooltip.params.trigger === 'manual') return;\n if (support.touch) {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (tooltip.params.delegated) {\n $(document).on(app.touchEvents.start, tooltip.params.targetEl, handleTouchStart, passive);\n } else {\n tooltip.$targetEl.on(app.touchEvents.start, handleTouchStart, passive);\n }\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n } else {\n // eslint-disable-next-line\n if (tooltip.params.delegated) {\n $(document).on(support.pointerEvents ? 'pointerenter' : 'mouseenter', tooltip.params.targetEl, handleMouseEnter, true);\n $(document).on(support.pointerEvents ? 'pointerleave' : 'mouseleave', tooltip.params.targetEl, handleMouseLeave, true);\n } else {\n tooltip.$targetEl.on(support.pointerEvents ? 'pointerenter' : 'mouseenter', handleMouseEnter);\n tooltip.$targetEl.on(support.pointerEvents ? 'pointerleave' : 'mouseleave', handleMouseLeave);\n }\n }\n };\n tooltip.detachEvents = function detachEvents() {\n $el.off('transitionend', handleTransitionEnd);\n if (tooltip.params.trigger === 'click') {\n if (tooltip.params.delegated) {\n $(document).on('click', tooltip.params.targetEl, handleClick);\n } else {\n tooltip.$targetEl.off('click', handleClick);\n }\n $('html').off('click', handleClickOut);\n return;\n }\n if (tooltip.params.trigger === 'manual') return;\n if (support.touch) {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (tooltip.params.delegated) {\n $(document).off(app.touchEvents.start, tooltip.params.targetEl, handleTouchStart, passive);\n } else {\n tooltip.$targetEl.off(app.touchEvents.start, handleTouchStart, passive);\n }\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n } else {\n // eslint-disable-next-line\n if (tooltip.params.delegated) {\n $(document).off(support.pointerEvents ? 'pointerenter' : 'mouseenter', tooltip.params.targetEl, handleMouseEnter, true);\n $(document).off(support.pointerEvents ? 'pointerleave' : 'mouseleave', tooltip.params.targetEl, handleMouseLeave, true);\n } else {\n tooltip.$targetEl.off(support.pointerEvents ? 'pointerenter' : 'mouseenter', handleMouseEnter);\n tooltip.$targetEl.off(support.pointerEvents ? 'pointerleave' : 'mouseleave', handleMouseLeave);\n }\n }\n };\n\n // Install Modules\n tooltip.useModules();\n tooltip.init();\n return tooltip;\n }\n setTargetEl(targetEl) {\n const tooltip = this;\n tooltip.detachEvents();\n tooltip.$targetEl = $(targetEl);\n tooltip.targetEl = tooltip.$targetEl[0];\n tooltip.attachEvents();\n return tooltip;\n }\n position(targetEl) {\n const tooltip = this;\n const {\n $el,\n app,\n $containerEl\n } = tooltip;\n const hasContainerEl = !!tooltip.params.containerEl;\n const tooltipOffset = tooltip.params.offset || 0;\n $el.css({\n left: '',\n top: ''\n });\n const $targetEl = $(targetEl || tooltip.targetEl);\n const [width, height] = [$el.width(), $el.height()];\n $el.css({\n left: '',\n top: ''\n });\n let targetWidth;\n let targetHeight;\n let targetOffsetLeft;\n let targetOffsetTop;\n const boundaries = hasContainerEl && $containerEl.length ? $containerEl[0].getBoundingClientRect() : app;\n if ($targetEl && $targetEl.length > 0) {\n targetWidth = $targetEl.outerWidth();\n targetHeight = $targetEl.outerHeight();\n if (typeof targetWidth === 'undefined' && typeof targetHeight === 'undefined') {\n const clientRect = $targetEl[0].getBoundingClientRect();\n targetWidth = clientRect.width;\n targetHeight = clientRect.height;\n }\n const targetOffset = $targetEl.offset();\n targetOffsetLeft = targetOffset.left - boundaries.left;\n targetOffsetTop = targetOffset.top - boundaries.top;\n const targetParentPage = $targetEl.parents('.page');\n if (targetParentPage.length > 0) {\n targetOffsetTop -= targetParentPage[0].scrollTop;\n }\n }\n let [left, top] = [0, 0, 0];\n\n // Top Position\n let position = 'top';\n if (height + tooltipOffset < targetOffsetTop) {\n // On top\n top = targetOffsetTop - height - tooltipOffset;\n } else if (height < boundaries.height - targetOffsetTop - targetHeight) {\n // On bottom\n position = 'bottom';\n top = targetOffsetTop + targetHeight + tooltipOffset;\n } else {\n // On middle\n position = 'middle';\n top = targetHeight / 2 + targetOffsetTop - height / 2;\n if (top <= 0) {\n top = 8;\n } else if (top + height >= boundaries.height) {\n top = boundaries.height - height - 8;\n }\n }\n\n // Horizontal Position\n if (position === 'top' || position === 'bottom') {\n left = targetWidth / 2 + targetOffsetLeft - width / 2;\n if (left < 8) left = 8;\n if (left + width > boundaries.width) left = boundaries.width - width - 8;\n if (left < 0) left = 0;\n } else if (position === 'middle') {\n left = targetOffsetLeft - width;\n if (left < 8 || left + width > boundaries.width) {\n if (left < 8) left = targetOffsetLeft + targetWidth;\n if (left + width > boundaries.width) left = boundaries.width - width - 8;\n }\n }\n\n // Apply Styles\n $el.css({\n top: `${top}px`,\n left: `${left}px`\n });\n }\n show(aroundEl) {\n const tooltip = this;\n const {\n $el,\n $targetEl,\n $containerEl\n } = tooltip;\n if ($containerEl[0] && $el[0] && !$containerEl[0].contains($el[0])) {\n $containerEl.append($el);\n }\n tooltip.position(aroundEl);\n const $aroundEl = $(aroundEl);\n tooltip.visible = true;\n tooltip.opened = true;\n $targetEl.trigger('tooltip:show');\n $el.trigger('tooltip:show');\n if ($aroundEl.length && $aroundEl[0] !== $targetEl[0]) {\n $aroundEl.trigger('tooltip:show');\n }\n tooltip.emit('local::show tooltipShow', tooltip);\n $el.removeClass('tooltip-out').addClass('tooltip-in');\n return tooltip;\n }\n hide() {\n const tooltip = this;\n const {\n $el,\n $targetEl\n } = tooltip;\n tooltip.visible = false;\n tooltip.opened = false;\n $targetEl.trigger('tooltip:hide');\n $el.trigger('tooltip:hide');\n tooltip.emit('local::hide tooltipHide', tooltip);\n $el.addClass('tooltip-out').removeClass('tooltip-in');\n return tooltip;\n }\n render() {\n const tooltip = this;\n if (tooltip.params.render) return tooltip.params.render.call(tooltip, tooltip);\n const {\n cssClass,\n text\n } = tooltip.params;\n return `\n \n `.trim();\n }\n setText(newText) {\n const tooltip = this;\n if (typeof newText === 'undefined') {\n return tooltip;\n }\n tooltip.params.text = newText;\n tooltip.text = newText;\n if (tooltip.$el) {\n tooltip.$el.children('.tooltip-content').html(newText);\n }\n if (tooltip.opened) {\n tooltip.position();\n }\n return tooltip;\n }\n init() {\n const tooltip = this;\n tooltip.attachEvents();\n }\n destroy() {\n const tooltip = this;\n if (!tooltip.$targetEl || tooltip.destroyed) return;\n tooltip.$targetEl.trigger('tooltip:beforedestroy');\n tooltip.emit('local::beforeDestroy tooltipBeforeDestroy', tooltip);\n tooltip.$el.remove();\n if (tooltip.$targetEl[0]) delete tooltip.$targetEl[0].f7Tooltip;\n tooltip.detachEvents();\n deleteProps(tooltip);\n tooltip.destroyed = true;\n }\n}\nexport default Tooltip;", "import $ from '../../shared/dom7.js';\nimport Tooltip from './tooltip-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'tooltip',\n static: {\n Tooltip\n },\n create() {\n const app = this;\n app.tooltip = ConstructorMethods({\n defaultSelector: '.tooltip',\n constructor: Tooltip,\n app,\n domProp: 'f7Tooltip'\n });\n app.tooltip.show = function show(el) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const tooltip = $el[0].f7Tooltip;\n if (!tooltip) return undefined;\n tooltip.show($el[0]);\n return tooltip;\n };\n app.tooltip.hide = function hide(el) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const tooltip = $el[0].f7Tooltip;\n if (!tooltip) return undefined;\n tooltip.hide();\n return tooltip;\n };\n app.tooltip.setText = function text(el, newText) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const tooltip = $el[0].f7Tooltip;\n if (!tooltip) return undefined;\n tooltip.setText(newText);\n return tooltip;\n };\n },\n params: {\n tooltip: {\n targetEl: null,\n delegated: false,\n text: null,\n cssClass: null,\n render: null,\n offset: 0,\n trigger: 'hover',\n containerEl: undefined\n }\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.tooltip-init').each(el => {\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.tooltip-init').each(el => {\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.tooltip-init').each(el => {\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.tooltip-init').each(el => {\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n });\n }\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.tooltip-init').each(el => {\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.tooltip-init').each(el => {\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n });\n }\n }\n },\n vnode: {\n 'tooltip-init': {\n insert(vnode) {\n const app = this;\n const el = vnode.elm;\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n },\n update(vnode) {\n const el = vnode.elm;\n if (!el.f7Tooltip) return;\n if (vnode && vnode.data && vnode.data.attrs && vnode.data.attrs['data-tooltip']) {\n el.f7Tooltip.setText(vnode.data.attrs['data-tooltip']);\n }\n },\n destroy(vnode) {\n const el = vnode.elm;\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n }\n }\n }\n};", "/* eslint no-nested-ternary: off */\nimport { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Gauge extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n const defaults = extend({}, app.params.gauge);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const {\n el\n } = self.params;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7Gauge) return $el[0].f7Gauge;\n extend(self, {\n app,\n $el,\n el: $el && $el[0]\n });\n $el[0].f7Gauge = self;\n\n // Install Modules\n self.useModules();\n self.init();\n return self;\n }\n calcRadius() {\n const self = this;\n const {\n size,\n borderWidth\n } = self.params;\n return size / 2 - borderWidth / 2;\n }\n calcBorderLength() {\n const self = this;\n const radius = self.calcRadius();\n return 2 * Math.PI * radius;\n }\n render() {\n const self = this;\n if (self.params.render) return self.params.render.call(self, self);\n const {\n type,\n value,\n size,\n bgColor,\n borderBgColor,\n borderColor,\n borderWidth,\n valueText,\n valueTextColor,\n valueFontSize,\n valueFontWeight,\n labelText,\n labelTextColor,\n labelFontSize,\n labelFontWeight\n } = self.params;\n const semiCircle = type === 'semicircle';\n const radius = self.calcRadius();\n const length = self.calcBorderLength();\n const progress = Math.max(Math.min(value, 1), 0);\n return $jsx(\"svg\", {\n class: \"gauge-svg\",\n width: `${size}px`,\n height: `${semiCircle ? size / 2 : size}px`,\n viewBox: `0 0 ${size} ${semiCircle ? size / 2 : size}`\n }, semiCircle && $jsx(\"path\", {\n class: \"gauge-back-semi\",\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderBgColor,\n \"stroke-width\": borderWidth,\n fill: bgColor || 'none'\n }), semiCircle && $jsx(\"path\", {\n class: \"gauge-front-semi\",\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderColor,\n \"stroke-width\": borderWidth,\n \"stroke-dasharray\": length / 2,\n \"stroke-dashoffset\": length / 2 * (1 + progress),\n fill: borderBgColor ? 'none' : bgColor || 'none'\n }), !semiCircle && borderBgColor && $jsx(\"circle\", {\n class: \"gauge-back-circle\",\n stroke: borderBgColor,\n \"stroke-width\": borderWidth,\n fill: bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n }), !semiCircle && $jsx(\"circle\", {\n class: \"gauge-front-circle\",\n transform: `rotate(-90 ${size / 2} ${size / 2})`,\n stroke: borderColor,\n \"stroke-width\": borderWidth,\n \"stroke-dasharray\": length,\n \"stroke-dashoffset\": length * (1 - progress),\n fill: borderBgColor ? 'none' : bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n }), valueText && $jsx(\"text\", {\n class: \"gauge-value-text\",\n x: \"50%\",\n y: semiCircle ? '100%' : '50%',\n \"font-weight\": valueFontWeight,\n \"font-size\": valueFontSize,\n fill: valueTextColor,\n dy: semiCircle ? labelText ? -labelFontSize - 15 : -5 : 0,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": !semiCircle && 'middle'\n }, valueText), labelText && $jsx(\"text\", {\n class: \"gauge-label-text\",\n x: \"50%\",\n y: semiCircle ? '100%' : '50%',\n \"font-weight\": labelFontWeight,\n \"font-size\": labelFontSize,\n fill: labelTextColor,\n dy: semiCircle ? -5 : valueText ? valueFontSize / 2 + 10 : 0,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": !semiCircle && 'middle'\n }, labelText));\n }\n update(newParams) {\n if (newParams === void 0) {\n newParams = {};\n }\n const self = this;\n const document = getDocument();\n const {\n params,\n $svgEl\n } = self;\n Object.keys(newParams).forEach(param => {\n if (typeof newParams[param] !== 'undefined') {\n params[param] = newParams[param];\n }\n });\n if ($svgEl.length === 0) return self;\n const {\n value,\n size,\n bgColor,\n borderBgColor,\n borderColor,\n borderWidth,\n valueText,\n valueTextColor,\n valueFontSize,\n valueFontWeight,\n labelText,\n labelTextColor,\n labelFontSize,\n labelFontWeight\n } = params;\n const length = self.calcBorderLength();\n const progress = Math.max(Math.min(value, 1), 0);\n const radius = self.calcRadius();\n const semiCircle = params.type === 'semicircle';\n const svgAttrs = {\n width: `${size}px`,\n height: `${semiCircle ? size / 2 : size}px`,\n viewBox: `0 0 ${size} ${semiCircle ? size / 2 : size}`\n };\n Object.keys(svgAttrs).forEach(attr => {\n $svgEl.attr(attr, svgAttrs[attr]);\n });\n if (semiCircle) {\n const backAttrs = {\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderBgColor,\n 'stroke-width': borderWidth,\n fill: bgColor || 'none'\n };\n const frontAttrs = {\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderColor,\n 'stroke-width': borderWidth,\n 'stroke-dasharray': length / 2,\n 'stroke-dashoffset': length / 2 * (1 + progress),\n fill: borderBgColor ? 'none' : bgColor || 'none'\n };\n Object.keys(backAttrs).forEach(attr => {\n $svgEl.find('.gauge-back-semi').attr(attr, backAttrs[attr]);\n });\n Object.keys(frontAttrs).forEach(attr => {\n $svgEl.find('.gauge-front-semi').attr(attr, frontAttrs[attr]);\n });\n } else {\n const backAttrs = {\n stroke: borderBgColor,\n 'stroke-width': borderWidth,\n fill: bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n };\n const frontAttrs = {\n transform: `rotate(-90 ${size / 2} ${size / 2})`,\n stroke: borderColor,\n 'stroke-width': borderWidth,\n 'stroke-dasharray': length,\n 'stroke-dashoffset': length * (1 - progress),\n fill: borderBgColor ? 'none' : bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n };\n Object.keys(backAttrs).forEach(attr => {\n $svgEl.find('.gauge-back-circle').attr(attr, backAttrs[attr]);\n });\n Object.keys(frontAttrs).forEach(attr => {\n $svgEl.find('.gauge-front-circle').attr(attr, frontAttrs[attr]);\n });\n }\n if (valueText) {\n if (!$svgEl.find('.gauge-value-text').length) {\n const textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n textEl.classList.add('gauge-value-text');\n $svgEl.append(textEl);\n }\n const textAttrs = {\n x: '50%',\n y: semiCircle ? '100%' : '50%',\n 'font-weight': valueFontWeight,\n 'font-size': valueFontSize,\n fill: valueTextColor,\n dy: semiCircle ? labelText ? -labelFontSize - 15 : -5 : 0,\n 'text-anchor': 'middle',\n 'dominant-baseline': !semiCircle && 'middle'\n };\n Object.keys(textAttrs).forEach(attr => {\n $svgEl.find('.gauge-value-text').attr(attr, textAttrs[attr]);\n });\n $svgEl.find('.gauge-value-text').text(valueText);\n } else {\n $svgEl.find('.gauge-value-text').remove();\n }\n if (labelText) {\n if (!$svgEl.find('.gauge-label-text').length) {\n const textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n textEl.classList.add('gauge-label-text');\n $svgEl.append(textEl);\n }\n const labelAttrs = {\n x: '50%',\n y: semiCircle ? '100%' : '50%',\n 'font-weight': labelFontWeight,\n 'font-size': labelFontSize,\n fill: labelTextColor,\n dy: semiCircle ? -5 : valueText ? valueFontSize / 2 + 10 : 0,\n 'text-anchor': 'middle',\n 'dominant-baseline': !semiCircle && 'middle'\n };\n Object.keys(labelAttrs).forEach(attr => {\n $svgEl.find('.gauge-label-text').attr(attr, labelAttrs[attr]);\n });\n $svgEl.find('.gauge-label-text').text(labelText);\n } else {\n $svgEl.find('.gauge-label-text').remove();\n }\n return self;\n }\n init() {\n const self = this;\n const $svgEl = $(self.render()).eq(0);\n $svgEl.f7Gauge = self;\n extend(self, {\n $svgEl,\n svgEl: $svgEl && $svgEl[0]\n });\n self.$el.append($svgEl);\n return self;\n }\n destroy() {\n const self = this;\n if (!self.$el || self.destroyed) return;\n self.$el.trigger('gauge:beforedestroy');\n self.emit('local::beforeDestroy gaugeBeforeDestroy', self);\n self.$svgEl.remove();\n delete self.$el[0].f7Gauge;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default Gauge;", "import $ from '../../shared/dom7.js';\nimport Gauge from './gauge-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport { extend } from '../../shared/utils.js';\nexport default {\n name: 'gauge',\n static: {\n Gauge\n },\n create() {\n const app = this;\n app.gauge = ConstructorMethods({\n defaultSelector: '.gauge',\n constructor: Gauge,\n app,\n domProp: 'f7Gauge'\n });\n app.gauge.update = function update(el, newParams) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const gauge = app.gauge.get(el);\n if (!gauge) return undefined;\n gauge.update(newParams);\n return gauge;\n };\n },\n params: {\n gauge: {\n el: null,\n type: 'circle',\n value: 0,\n size: 200,\n bgColor: 'transparent',\n borderBgColor: '#eeeeee',\n borderColor: '#000000',\n borderWidth: 10,\n valueText: null,\n valueTextColor: '#000000',\n valueFontSize: 31,\n valueFontWeight: 500,\n labelText: null,\n labelTextColor: '#888888',\n labelFontSize: 14,\n labelFontWeight: 400\n }\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.gauge-init').each(el => {\n app.gauge.create(extend({\n el\n }, $(el).dataset() || {}));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.gauge-init').each(el => {\n if (el.f7Gauge) el.f7Gauge.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.gauge-init').each(el => {\n app.gauge.create(extend({\n el\n }, $(el).dataset() || {}));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.gauge-init').each(el => {\n if (el.f7Gauge) el.f7Gauge.destroy();\n });\n }\n },\n vnode: {\n 'gauge-init': {\n insert(vnode) {\n const app = this;\n const el = vnode.elm;\n app.gauge.create(extend({\n el\n }, $(el).dataset() || {}));\n },\n destroy(vnode) {\n const el = vnode.elm;\n if (el.f7Gauge) el.f7Gauge.destroy();\n }\n }\n }\n};", "export default {\n name: 'skeleton'\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n alphaLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-alpha-slider\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, alphaLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-alpha\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.01\",\n min: \"0\",\n max: \"1\",\n class: \"color-picker-value-alpha\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-alpha\"\n }))));\n },\n init(self) {\n self.alphaRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-alpha'),\n min: 0,\n max: 1,\n step: 0.01,\n value: 1,\n on: {\n change(range, value) {\n const alpha = Math.floor(value * 100) / 100;\n self.setValue({\n alpha\n });\n }\n }\n });\n function handleInputChange(e) {\n const alpha = self.value.alpha;\n let value = parseFloat(e.target.value);\n if (Number.isNaN(value)) {\n e.target.value = alpha;\n return;\n }\n value = Math.max(0, Math.min(1, value));\n self.setValue({\n alpha: value\n });\n }\n self.$el.on('change', '.color-picker-module-alpha-slider input', handleInputChange);\n self.destroyAlphaSliderEvents = function destroyAlphaSliderEvents() {\n self.$el.off('change', '.color-picker-module-alpha-slider input', handleInputChange);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n alpha\n } = value;\n self.alphaRangeSlider.value = alpha;\n self.alphaRangeSlider.layout();\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-alpha').val(alpha);\n } else {\n self.$el.find('span.color-picker-value-alpha').text(alpha);\n }\n },\n destroy(self) {\n if (self.alphaRangeSlider && self.alphaRangeSlider.destroy) {\n self.alphaRangeSlider.destroy();\n }\n delete self.alphaRangeSlider;\n if (self.destroyAlphaSliderEvents) self.destroyAlphaSliderEvents();\n delete self.destroyAlphaSliderEvents;\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-current-color\"\n }, $jsx(\"div\", {\n class: \"color-picker-current-color\"\n }));\n },\n update(self) {\n self.$el.find('.color-picker-module-current-color .color-picker-current-color').css('background-color', self.value.hex);\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n hexLabel,\n hexLabelText,\n hexValueEditable\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hex\"\n }, $jsx(\"div\", {\n class: \"color-picker-hex-wrap\"\n }, hexLabel && $jsx(\"div\", {\n class: \"color-picker-hex-label\"\n }, hexLabelText), $jsx(\"div\", {\n class: \"color-picker-hex-value\"\n }, hexValueEditable ? $jsx(\"input\", {\n type: \"text\",\n class: \"color-picker-value-hex\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-hex\"\n }))));\n },\n init(self) {\n function handleInputChange(e) {\n const hex = self.value.hex;\n let value = e.target.value.replace(/#/g, '');\n if (Number.isNaN(value) || !value || value.length !== 3 && value.length !== 6) {\n e.target.value = hex;\n return;\n }\n const min = 0;\n const current = parseInt(value, 16);\n const max = parseInt('ffffff', 16); // eslint-disable-line\n if (current > max) {\n value = 'fff';\n }\n if (current < min) {\n value = '000';\n }\n self.setValue({\n hex: value\n });\n }\n self.$el.on('change', '.color-picker-module-hex input', handleInputChange);\n self.destroyHexEvents = function destroyHexEvents() {\n self.$el.off('change', '.color-picker-module-hex input', handleInputChange);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hexValueEditable\n } = self.params;\n const {\n hex\n } = value;\n if (hexValueEditable) {\n self.$el.find('input.color-picker-value-hex').val(hex);\n } else {\n self.$el.find('span.color-picker-value-hex').text(hex);\n }\n },\n destroy(self) {\n if (self.destroyHexEvents) self.destroyHexEvents();\n delete self.destroyHexEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { colorHsbToHsl } from '../../../shared/utils.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n hueLabelText,\n saturationLabelText,\n brightnessLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hsb-sliders\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, hueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-hue\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"360\",\n class: \"color-picker-value-hue\",\n \"data-color-index\": \"0\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-hue\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, saturationLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-saturation\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"100\",\n class: \"color-picker-value-saturation\",\n \"data-color-index\": \"1\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-saturation\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, brightnessLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-brightness\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"100\",\n class: \"color-picker-value-brightness\",\n \"data-color-index\": \"2\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-brightness\"\n }))));\n },\n init(self) {\n self.hueRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-hue'),\n min: 0,\n max: 360,\n step: 0.1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n hue: value\n });\n }\n }\n });\n self.saturationRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-saturation'),\n min: 0,\n max: 1,\n step: 0.001,\n value: 0,\n on: {\n change(range, value) {\n const s = Math.floor(value * 1000) / 1000;\n self.setValue({\n hsb: [self.value.hsb[0], s, self.value.hsb[2]]\n });\n }\n }\n });\n self.brightnessRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-brightness'),\n min: 0,\n max: 1,\n step: 0.001,\n value: 0,\n on: {\n change(range, value) {\n const b = Math.floor(value * 1000) / 1000;\n self.setValue({\n hsb: [self.value.hsb[0], self.value.hsb[1], b]\n });\n }\n }\n });\n function handleInputChange(e) {\n const hsb = [...self.value.hsb];\n const index = parseInt($(e.target).attr('data-color-index'), 10);\n let value = parseFloat(e.target.value);\n if (Number.isNaN(value)) {\n e.target.value = hsb[index];\n return;\n }\n if (index === 0) {\n value = Math.max(0, Math.min(360, value));\n } else {\n value = Math.max(0, Math.min(100, value)) / 100;\n }\n hsb[index] = value;\n self.setValue({\n hsb\n });\n }\n self.$el.on('change', '.color-picker-module-hsb-sliders input', handleInputChange);\n self.destroyHsbSlidersEvents = function destroyHsbSlidersEvents() {\n self.$el.off('change', '.color-picker-module-hsb-sliders input', handleInputChange);\n };\n },\n update(self) {\n const {\n app,\n value\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n hsb,\n hue\n } = value;\n self.hueRangeSlider.value = hue;\n self.saturationRangeSlider.value = hsb[1];\n self.brightnessRangeSlider.value = hsb[2];\n self.hueRangeSlider.layout();\n self.saturationRangeSlider.layout();\n self.brightnessRangeSlider.layout();\n const hslCurrent = colorHsbToHsl(hsb[0], hsb[1], 1);\n const hslLeft = colorHsbToHsl(hsb[0], 0, 1);\n const hslRight = colorHsbToHsl(hsb[0], 1, 1);\n const brightness = hsb[2];\n self.hueRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hue}, 100%, 50%)`);\n self.saturationRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hslCurrent[0]}, ${hslCurrent[1] * 100}%, ${hslCurrent[2] * 100}%)`);\n self.brightnessRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${brightness * 255}, ${brightness * 255}, ${brightness * 255})`);\n self.saturationRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${app.rtl ? 'to left' : 'to right'}, hsl(${hslLeft[0]}, ${hslLeft[1] * 100}%, ${hslLeft[2] * 100}%), hsl(${hslRight[0]}, ${hslRight[1] * 100}%, ${hslRight[2] * 100}%))`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-hue').val(`${hue}`);\n self.$el.find('input.color-picker-value-saturation').val(`${hsb[1] * 1000 / 10}`);\n self.$el.find('input.color-picker-value-brightness').val(`${hsb[2] * 1000 / 10}`);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-hue').text(`${hue}`);\n self.$el.find('span.color-picker-value-saturation').text(`${hsb[1] * 1000 / 10}`);\n self.$el.find('span.color-picker-value-brightness').text(`${hsb[2] * 1000 / 10}`);\n }\n },\n destroy(self) {\n if (self.hueRangeSlider && self.hueRangeSlider.destroy) {\n self.hueRangeSlider.destroy();\n }\n if (self.saturationRangeSlider && self.saturationRangeSlider.destroy) {\n self.saturationRangeSlider.destroy();\n }\n if (self.brightnessRangeSlider && self.brightnessRangeSlider.destroy) {\n self.brightnessRangeSlider.destroy();\n }\n delete self.hueRangeSlider;\n delete self.saturationRangeSlider;\n delete self.brightnessRangeSlider;\n if (self.destroyHsbSlidersEvents) self.destroyHsbSlidersEvents();\n delete self.destroyHsbSlidersEvents;\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n hueLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hue-slider\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, hueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-hue\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"360\",\n class: \"color-picker-value-hue\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-hue\"\n }))));\n },\n init(self) {\n self.hueRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-hue'),\n min: 0,\n max: 360,\n step: 0.1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n hue: value\n });\n }\n }\n });\n },\n update(self) {\n const {\n value\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n hue\n } = value;\n self.hueRangeSlider.value = hue;\n self.hueRangeSlider.layout();\n self.hueRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hue}, 100%, 50%)`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-hue').val(`${hue}`);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-hue').text(`${hue}`);\n }\n },\n destroy(self) {\n if (self.hueRangeSlider && self.hueRangeSlider.destroy) {\n self.hueRangeSlider.destroy();\n }\n delete self.hueRangeSlider;\n }\n};", "import { colorHsbToHsl } from '../../../shared/utils.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n brightnessLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-brightness-slider\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, brightnessLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-brightness\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"100\",\n class: \"color-picker-value-brightness\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-brightness\"\n }))));\n },\n init(self) {\n self.brightnessRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-brightness'),\n min: 0,\n max: 1,\n step: 0.001,\n value: 0,\n on: {\n change(range, value) {\n const b = Math.floor(value * 1000) / 1000;\n self.setValue({\n hsb: [self.value.hsb[0], self.value.hsb[1], b]\n });\n }\n }\n });\n },\n update(self) {\n const {\n value,\n app\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n hsb\n } = value;\n self.brightnessRangeSlider.value = hsb[2];\n self.brightnessRangeSlider.layout();\n const hslCurrent = colorHsbToHsl(hsb[0], hsb[1], hsb[2]);\n const hslLeft = colorHsbToHsl(hsb[0], hsb[1], 0);\n const hslRight = colorHsbToHsl(hsb[0], hsb[1], 1);\n self.brightnessRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hslCurrent[0]}, ${hslCurrent[1] * 100}%, ${hslCurrent[2] * 100}%)`);\n self.brightnessRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${app.rtl ? 'to left' : 'to right'}, hsl(${hslLeft[0]}, ${hslLeft[1] * 100}%, ${hslLeft[2] * 100}%), hsl(${hslRight[0]}, ${hslRight[1] * 100}%, ${hslRight[2] * 100}%))`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-brightness').val(`${hsb[2] * 1000 / 10}`);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-brightness').text(`${hsb[2] * 1000 / 10}`);\n }\n },\n destroy(self) {\n if (self.brightnessRangeSlider && self.brightnessRangeSlider.destroy) {\n self.brightnessRangeSlider.destroy();\n }\n delete self.brightnessRangeSlider;\n }\n};", "/* eslint indent: [\"off\"] */\nimport $ from '../../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-palette\"\n }, $jsx(\"div\", {\n class: \"color-picker-palette\"\n }, self.params.palette.map(p => {\n if (Array.isArray(p)) {\n let row = '';\n // prettier-ignore\n row += p.map(c => `\n
\n `).join('');\n row += '
';\n return row;\n }\n return $jsx(\"div\", {\n class: \"color-picker-palette-value\",\n \"data-palette-color\": p,\n style: `background-color: ${p}`\n });\n })));\n },\n init(self) {\n function handlePaletteClick(e) {\n const hex = $(e.target).attr('data-palette-color');\n self.setValue({\n hex\n });\n }\n self.$el.on('click', '.color-picker-module-palette .color-picker-palette-value', handlePaletteClick);\n self.destroyPaletteEvents = function destroyPaletteEvents() {\n self.$el.off('click', '.color-picker-module-hex input', handlePaletteClick);\n };\n },\n destroy(self) {\n if (self.destroyPaletteEvents) {\n self.destroyPaletteEvents();\n }\n delete self.destroyPaletteEvents;\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-initial-current-colors\"\n }, $jsx(\"div\", {\n class: \"color-picker-initial-current-colors\"\n }, $jsx(\"div\", {\n class: \"color-picker-initial-color\"\n }), $jsx(\"div\", {\n class: \"color-picker-current-color\"\n })));\n },\n init(self) {\n function handleInitialColorClick() {\n if (self.initialValue) {\n const {\n hex,\n alpha\n } = self.initialValue;\n self.setValue({\n hex,\n alpha\n });\n }\n }\n self.$el.on('click', '.color-picker-initial-color', handleInitialColorClick);\n self.destroyInitialCurrentEvents = function destroyInitialCurrentEvents() {\n self.$el.off('click', '.color-picker-initial-color', handleInitialColorClick);\n };\n },\n update(self) {\n self.$el.find('.color-picker-module-initial-current-colors .color-picker-initial-color').css('background-color', self.initialValue.hex);\n self.$el.find('.color-picker-module-initial-current-colors .color-picker-current-color').css('background-color', self.value.hex);\n },\n destroy(self) {\n if (self.destroyInitialCurrentEvents) {\n self.destroyInitialCurrentEvents();\n }\n delete self.destroyInitialCurrentEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n barLabel,\n barValue,\n barValueEditable,\n redLabelText,\n greenLabelText,\n blueLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-rgb-bars\"\n }, $jsx(\"div\", {\n class: \"color-picker-bar-wrap\"\n }, barLabel && $jsx(\"div\", {\n class: \"color-picker-bar-label\"\n }, redLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-bar color-picker-bar-red\"\n }), barValue && $jsx(\"div\", {\n class: \"color-picker-bar-value\"\n }, barValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-bar-red\",\n \"data-color-index\": \"0\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-bar-red\"\n }))), $jsx(\"div\", {\n class: \"color-picker-bar-wrap\"\n }, barLabel && $jsx(\"div\", {\n class: \"color-picker-bar-label\"\n }, greenLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-bar color-picker-bar-green\"\n }), barValue && $jsx(\"div\", {\n class: \"color-picker-bar-value\"\n }, barValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-bar-green\",\n \"data-color-index\": \"1\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-bar-green\"\n }))), $jsx(\"div\", {\n class: \"color-picker-bar-wrap\"\n }, barLabel && $jsx(\"div\", {\n class: \"color-picker-bar-label\"\n }, blueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-bar color-picker-bar-blue\"\n }), barValue && $jsx(\"div\", {\n class: \"color-picker-bar-value\"\n }, barValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-bar-blue\",\n \"data-color-index\": \"2\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-bar-blue\"\n }))));\n },\n init(self) {\n self.redBar = self.app.range.create({\n el: self.$el.find('.color-picker-bar-red'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n vertical: true,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [value, self.value.rgb[1], self.value.rgb[2]]\n });\n }\n }\n });\n self.greenBar = self.app.range.create({\n el: self.$el.find('.color-picker-bar-green'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n vertical: true,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], value, self.value.rgb[2]]\n });\n }\n }\n });\n self.blueBar = self.app.range.create({\n el: self.$el.find('.color-picker-bar-blue'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n vertical: true,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], self.value.rgb[1], value]\n });\n }\n }\n });\n function handleInputChange(e) {\n const rgb = [...self.value.rgb];\n const index = parseInt($(e.target).attr('data-color-index'), 10);\n let value = parseInt(e.target.value, 10);\n if (Number.isNaN(value)) {\n e.target.value = rgb[index];\n return;\n }\n value = Math.max(0, Math.min(255, value));\n rgb[index] = value;\n self.setValue({\n rgb\n });\n }\n self.$el.on('change', '.color-picker-module-rgb-bars input', handleInputChange);\n self.destroyRgbBarsEvents = function destroyRgbBarsEvents() {\n self.$el.off('change', '.color-picker-module-rgb-bars input', handleInputChange);\n };\n },\n update(self) {\n const {\n value,\n redBar,\n greenBar,\n blueBar\n } = self;\n const {\n barValue,\n barValueEditable\n } = self.params;\n const {\n rgb\n } = value;\n redBar.value = rgb[0];\n greenBar.value = rgb[1];\n blueBar.value = rgb[2];\n redBar.layout();\n greenBar.layout();\n blueBar.layout();\n redBar.$el.find('.range-bar').css('background-image', `linear-gradient(to top, rgb(0, ${rgb[1]}, ${rgb[2]}), rgb(255, ${rgb[1]}, ${rgb[2]}))`);\n greenBar.$el.find('.range-bar').css('background-image', `linear-gradient(to top, rgb(${rgb[0]}, 0, ${rgb[2]}), rgb(${rgb[0]}, 255, ${rgb[2]}))`);\n blueBar.$el.find('.range-bar').css('background-image', `linear-gradient(to top, rgb(${rgb[0]}, ${rgb[1]}, 0), rgb(${rgb[0]}, ${rgb[1]}, 255))`);\n if (barValue && barValueEditable) {\n self.$el.find('input.color-picker-value-bar-red').val(rgb[0]);\n self.$el.find('input.color-picker-value-bar-green').val(rgb[1]);\n self.$el.find('input.color-picker-value-bar-blue').val(rgb[2]);\n } else if (barValue) {\n self.$el.find('span.color-picker-value-bar-red').text(rgb[0]);\n self.$el.find('span.color-picker-value-bar-green').text(rgb[1]);\n self.$el.find('span.color-picker-value-bar-blue').text(rgb[2]);\n }\n },\n destroy(self) {\n if (self.redBar && self.redBar.destroy) {\n self.redBar.destroy();\n }\n if (self.greenBar && self.greenBar.destroy) {\n self.greenBar.destroy();\n }\n if (self.blueBar && self.blueBar.destroy) {\n self.blueBar.destroy();\n }\n delete self.redBar;\n delete self.greenBar;\n delete self.blueBar;\n if (self.destroyRgbBarsEvents) self.destroyRgbBarsEvents();\n delete self.destroyRgbBarsEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n redLabelText,\n greenLabelText,\n blueLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-rgb-sliders\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, redLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-red\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-red\",\n \"data-color-index\": \"0\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-red\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, greenLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-green\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-green\",\n \"data-color-index\": \"1\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-green\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, blueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-blue\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-blue\",\n \"data-color-index\": \"2\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-blue\"\n }))));\n },\n init(self) {\n self.redRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-red'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [value, self.value.rgb[1], self.value.rgb[2]]\n });\n }\n }\n });\n self.greenRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-green'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], value, self.value.rgb[2]]\n });\n }\n }\n });\n self.blueRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-blue'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], self.value.rgb[1], value]\n });\n }\n }\n });\n function handleInputChange(e) {\n const rgb = [...self.value.rgb];\n const index = parseInt($(e.target).attr('data-color-index'), 10);\n let value = parseInt(e.target.value, 10);\n if (Number.isNaN(value)) {\n e.target.value = rgb[index];\n return;\n }\n value = Math.max(0, Math.min(255, value));\n rgb[index] = value;\n self.setValue({\n rgb\n });\n }\n self.$el.on('change', '.color-picker-module-rgb-sliders input', handleInputChange);\n self.destroyRgbSlidersEvents = function destroyRgbSlidersEvents() {\n self.$el.off('change', '.color-picker-module-rgb-sliders input', handleInputChange);\n };\n },\n update(self) {\n const {\n app,\n value,\n redRangeSlider,\n greenRangeSlider,\n blueRangeSlider\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n rgb\n } = value;\n redRangeSlider.value = rgb[0];\n greenRangeSlider.value = rgb[1];\n blueRangeSlider.value = rgb[2];\n redRangeSlider.layout();\n greenRangeSlider.layout();\n blueRangeSlider.layout();\n redRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);\n greenRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);\n blueRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);\n const direction = app.rtl ? 'to left' : 'to right';\n redRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${direction}, rgb(0, ${rgb[1]}, ${rgb[2]}), rgb(255, ${rgb[1]}, ${rgb[2]}))`);\n greenRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${direction}, rgb(${rgb[0]}, 0, ${rgb[2]}), rgb(${rgb[0]}, 255, ${rgb[2]}))`);\n blueRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${direction}, rgb(${rgb[0]}, ${rgb[1]}, 0), rgb(${rgb[0]}, ${rgb[1]}, 255))`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-red').val(rgb[0]);\n self.$el.find('input.color-picker-value-green').val(rgb[1]);\n self.$el.find('input.color-picker-value-blue').val(rgb[2]);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-red').text(rgb[0]);\n self.$el.find('span.color-picker-value-green').text(rgb[1]);\n self.$el.find('span.color-picker-value-blue').text(rgb[2]);\n }\n },\n destroy(self) {\n if (self.redRangeSlider && self.redRangeSlider.destroy) {\n self.redRangeSlider.destroy();\n }\n if (self.greenRangeSlider && self.greenRangeSlider.destroy) {\n self.greenRangeSlider.destroy();\n }\n if (self.blueRangeSlider && self.blueRangeSlider.destroy) {\n self.blueRangeSlider.destroy();\n }\n delete self.redRangeSlider;\n delete self.greenRangeSlider;\n delete self.blueRangeSlider;\n if (self.destroyRgbSlidersEvents) self.destroyRgbSlidersEvents();\n delete self.destroyRgbSlidersEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { getSupport } from '../../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-sb-spectrum\"\n }, $jsx(\"div\", {\n class: \"color-picker-sb-spectrum\",\n style: \"background-color: hsl(0, 100%, 50%)\"\n }, $jsx(\"div\", {\n class: \"color-picker-sb-spectrum-handle\"\n })));\n },\n init(self) {\n const {\n app\n } = self;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let specterRect;\n let specterIsTouched;\n let specterHandleIsTouched;\n const {\n $el\n } = self;\n function setSBFromSpecterCoords(x, y) {\n let s = (x - specterRect.left) / specterRect.width;\n let b = (y - specterRect.top) / specterRect.height;\n s = Math.max(0, Math.min(1, s));\n b = 1 - Math.max(0, Math.min(1, b));\n self.setValue({\n hsb: [self.value.hue, s, b]\n });\n }\n function handleTouchStart(e) {\n if (isMoved || isTouched) return;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n const $targetEl = $(e.target);\n specterHandleIsTouched = $targetEl.closest('.color-picker-sb-spectrum-handle').length > 0;\n if (!specterHandleIsTouched) {\n specterIsTouched = $targetEl.closest('.color-picker-sb-spectrum').length > 0;\n }\n if (specterIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n setSBFromSpecterCoords(touchStartX, touchStartY);\n }\n if (specterHandleIsTouched || specterIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').addClass('color-picker-sb-spectrum-handle-pressed');\n }\n }\n function handleTouchMove(e) {\n if (!(specterIsTouched || specterHandleIsTouched)) return;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n if (!isMoved) {\n // First move\n isMoved = true;\n if (specterHandleIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n }\n }\n if (specterIsTouched || specterHandleIsTouched) {\n setSBFromSpecterCoords(touchCurrentX, touchCurrentY);\n }\n }\n function handleTouchEnd() {\n isMoved = false;\n if (specterIsTouched || specterHandleIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').removeClass('color-picker-sb-spectrum-handle-pressed');\n }\n specterIsTouched = false;\n specterHandleIsTouched = false;\n }\n function handleResize() {\n self.modules['sb-spectrum'].update(self);\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n self.destroySpectrumEvents = function destroySpectrumEvents() {\n self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hsl,\n hsb\n } = value;\n const specterWidth = self.$el.find('.color-picker-sb-spectrum')[0].offsetWidth;\n const specterHeight = self.$el.find('.color-picker-sb-spectrum')[0].offsetHeight;\n self.$el.find('.color-picker-sb-spectrum').css('background-color', `hsl(${hsl[0]}, 100%, 50%)`);\n self.$el.find('.color-picker-sb-spectrum-handle').css('background-color', `hsl(${hsl[0]}, ${hsl[1] * 100}%, ${hsl[2] * 100}%)`).transform(`translate(${specterWidth * hsb[1]}px, ${specterHeight * (1 - hsb[2])}px)`);\n },\n destroy(self) {\n if (self.destroySpectrumEvents) self.destroySpectrumEvents();\n delete self.destroySpectrumEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { colorHsbToHsl } from '../../../shared/utils.js';\nimport { getSupport } from '../../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hs-spectrum\"\n }, $jsx(\"div\", {\n class: \"color-picker-hs-spectrum\"\n }, $jsx(\"div\", {\n class: \"color-picker-hs-spectrum-handle\"\n })));\n },\n init(self) {\n const {\n app\n } = self;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let specterRect;\n let specterIsTouched;\n let specterHandleIsTouched;\n const {\n $el\n } = self;\n function setHSFromSpecterCoords(x, y) {\n let h = (x - specterRect.left) / specterRect.width * 360;\n let s = (y - specterRect.top) / specterRect.height;\n h = Math.max(0, Math.min(360, h));\n s = 1 - Math.max(0, Math.min(1, s));\n self.setValue({\n hsb: [h, s, self.value.hsb[2]]\n });\n }\n function handleTouchStart(e) {\n if (isMoved || isTouched) return;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n const $targetEl = $(e.target);\n specterHandleIsTouched = $targetEl.closest('.color-picker-hs-spectrum-handle').length > 0;\n if (!specterHandleIsTouched) {\n specterIsTouched = $targetEl.closest('.color-picker-hs-spectrum').length > 0;\n }\n if (specterIsTouched) {\n specterRect = $el.find('.color-picker-hs-spectrum')[0].getBoundingClientRect();\n setHSFromSpecterCoords(touchStartX, touchStartY);\n }\n if (specterHandleIsTouched || specterIsTouched) {\n $el.find('.color-picker-hs-spectrum-handle').addClass('color-picker-hs-spectrum-handle-pressed');\n }\n }\n function handleTouchMove(e) {\n if (!(specterIsTouched || specterHandleIsTouched)) return;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n if (!isMoved) {\n // First move\n isMoved = true;\n if (specterHandleIsTouched) {\n specterRect = $el.find('.color-picker-hs-spectrum')[0].getBoundingClientRect();\n }\n }\n if (specterIsTouched || specterHandleIsTouched) {\n setHSFromSpecterCoords(touchCurrentX, touchCurrentY);\n }\n }\n function handleTouchEnd() {\n isMoved = false;\n if (specterIsTouched || specterHandleIsTouched) {\n $el.find('.color-picker-hs-spectrum-handle').removeClass('color-picker-hs-spectrum-handle-pressed');\n }\n specterIsTouched = false;\n specterHandleIsTouched = false;\n }\n function handleResize() {\n self.modules['hs-spectrum'].update(self);\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n self.destroySpectrumEvents = function destroySpectrumEvents() {\n self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hsb\n } = value;\n const specterWidth = self.$el.find('.color-picker-hs-spectrum')[0].offsetWidth;\n const specterHeight = self.$el.find('.color-picker-hs-spectrum')[0].offsetHeight;\n const hslBright = colorHsbToHsl(hsb[0], hsb[1], 1);\n self.$el.find('.color-picker-hs-spectrum-handle').css('background-color', `hsl(${hslBright[0]}, ${hslBright[1] * 100}%, ${hslBright[2] * 100}%)`).transform(`translate(${specterWidth * (hsb[0] / 360)}px, ${specterHeight * (1 - hsb[1])}px)`);\n },\n destroy(self) {\n if (self.destroySpectrumEvents) self.destroySpectrumEvents();\n delete self.destroySpectrumEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { getSupport } from '../../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nfunction svgWheelCircles() {\n const total = 256;\n let circles = '';\n for (let i = total; i > 0; i -= 1) {\n const angle = i * Math.PI / (total / 2);\n const hue = 360 / total * i;\n circles += ``;\n }\n return circles;\n}\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-wheel\"\n }, $jsx(\"div\", {\n class: \"color-picker-wheel\"\n }, $jsx(\"svg\", {\n viewBox: \"0 0 300 300\",\n width: \"300\",\n height: \"300\"\n }, svgWheelCircles()), $jsx(\"div\", {\n class: \"color-picker-wheel-handle\"\n }), $jsx(\"div\", {\n class: \"color-picker-sb-spectrum\",\n style: \"background-color: hsl(0, 100%, 50%)\"\n }, $jsx(\"div\", {\n class: \"color-picker-sb-spectrum-handle\"\n }))));\n },\n init(self) {\n const {\n app\n } = self;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let wheelRect;\n let wheelIsTouched;\n let wheelHandleIsTouched;\n let specterRect;\n let specterIsTouched;\n let specterHandleIsTouched;\n const {\n $el\n } = self;\n function setHueFromWheelCoords(x, y) {\n const wheelCenterX = wheelRect.left + wheelRect.width / 2;\n const wheelCenterY = wheelRect.top + wheelRect.height / 2;\n const angleRad = Math.atan2(y - wheelCenterY, x - wheelCenterX);\n let angleDeg = angleRad * 180 / Math.PI + 90;\n if (angleDeg < 0) angleDeg += 360;\n angleDeg = 360 - angleDeg;\n self.setValue({\n hue: angleDeg\n });\n }\n function setSBFromSpecterCoords(x, y) {\n let s = (x - specterRect.left) / specterRect.width;\n let b = (y - specterRect.top) / specterRect.height;\n s = Math.max(0, Math.min(1, s));\n b = 1 - Math.max(0, Math.min(1, b));\n self.setValue({\n hsb: [self.value.hue, s, b]\n });\n }\n function handleTouchStart(e) {\n if (isMoved || isTouched) return;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n const $targetEl = $(e.target);\n wheelHandleIsTouched = $targetEl.closest('.color-picker-wheel-handle').length > 0;\n wheelIsTouched = $targetEl.closest('circle').length > 0;\n specterHandleIsTouched = $targetEl.closest('.color-picker-sb-spectrum-handle').length > 0;\n if (!specterHandleIsTouched) {\n specterIsTouched = $targetEl.closest('.color-picker-sb-spectrum').length > 0;\n }\n if (wheelIsTouched) {\n wheelRect = $el.find('.color-picker-wheel')[0].getBoundingClientRect();\n setHueFromWheelCoords(touchStartX, touchStartY);\n }\n if (specterIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n setSBFromSpecterCoords(touchStartX, touchStartY);\n }\n if (specterHandleIsTouched || specterIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').addClass('color-picker-sb-spectrum-handle-pressed');\n }\n }\n function handleTouchMove(e) {\n if (!(wheelIsTouched || wheelHandleIsTouched) && !(specterIsTouched || specterHandleIsTouched)) return;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n if (!isMoved) {\n // First move\n isMoved = true;\n if (wheelHandleIsTouched) {\n wheelRect = $el.find('.color-picker-wheel')[0].getBoundingClientRect();\n }\n if (specterHandleIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n }\n }\n if (wheelIsTouched || wheelHandleIsTouched) {\n setHueFromWheelCoords(touchCurrentX, touchCurrentY);\n }\n if (specterIsTouched || specterHandleIsTouched) {\n setSBFromSpecterCoords(touchCurrentX, touchCurrentY);\n }\n }\n function handleTouchEnd() {\n isMoved = false;\n if (specterIsTouched || specterHandleIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').removeClass('color-picker-sb-spectrum-handle-pressed');\n }\n wheelIsTouched = false;\n wheelHandleIsTouched = false;\n specterIsTouched = false;\n specterHandleIsTouched = false;\n }\n function handleResize() {\n self.modules.wheel.update(self);\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n self.destroyWheelEvents = function destroyWheelEvents() {\n self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hsl,\n hsb\n } = value;\n const specterWidth = self.$el.find('.color-picker-sb-spectrum')[0].offsetWidth;\n const specterHeight = self.$el.find('.color-picker-sb-spectrum')[0].offsetHeight;\n const wheelSize = self.$el.find('.color-picker-wheel')[0].offsetWidth;\n const wheelHalfSize = wheelSize / 2;\n const angleRad = value.hue * Math.PI / 180;\n const handleSize = wheelSize / 6;\n const handleHalfSize = handleSize / 2;\n const tX = wheelHalfSize - Math.sin(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;\n const tY = wheelHalfSize - Math.cos(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;\n self.$el.find('.color-picker-wheel-handle').css('background-color', `hsl(${hsl[0]}, 100%, 50%)`).transform(`translate(${tX}px, ${tY}px)`);\n self.$el.find('.color-picker-sb-spectrum').css('background-color', `hsl(${hsl[0]}, 100%, 50%)`);\n self.$el.find('.color-picker-sb-spectrum-handle').css('background-color', `hsl(${hsl[0]}, ${hsl[1] * 100}%, ${hsl[2] * 100}%)`).transform(`translate(${specterWidth * hsb[1]}px, ${specterHeight * (1 - hsb[2])}px)`);\n },\n destroy(self) {\n if (self.destroyWheelEvents) self.destroyWheelEvents();\n delete self.destroyWheelEvents;\n }\n};", "import { extend, colorRgbToHex, colorRgbToHsl, colorHslToHsb, colorHslToRgb, colorHsbToHsl, colorHexToRgb, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport $ from '../../shared/dom7.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport moduleAlphaSlider from './modules/alpha-slider.js';\nimport moduleCurrentColor from './modules/current-color.js';\nimport moduleHex from './modules/hex.js';\nimport moduleHsbSliders from './modules/hsb-sliders.js';\nimport moduleHueSlider from './modules/hue-slider.js';\nimport moduleBrightnessSlider from './modules/brightness-slider.js';\nimport modulePalette from './modules/palette.js';\nimport moduleInitialCurrentColors from './modules/initial-current-colors.js';\nimport moduleRgbBars from './modules/rgb-bars.js';\nimport moduleRgbSliders from './modules/rgb-sliders.js';\nimport moduleSbSpectrum from './modules/sb-spectrum.js';\nimport moduleHsSpectrum from './modules/hs-spectrum.js';\nimport moduleWheel from './modules/wheel.js';\n\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass ColorPicker extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n self.params = extend({}, app.params.colorPicker, params);\n let $containerEl;\n if (self.params.containerEl) {\n $containerEl = $(self.params.containerEl);\n if ($containerEl.length === 0) return self;\n }\n let $inputEl;\n if (self.params.inputEl) {\n $inputEl = $(self.params.inputEl);\n }\n let $targetEl;\n if (self.params.targetEl) {\n $targetEl = $(self.params.targetEl);\n }\n extend(self, {\n app,\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n inline: $containerEl && $containerEl.length > 0,\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n $targetEl,\n targetEl: $targetEl && $targetEl[0],\n initialized: false,\n opened: false,\n url: self.params.url,\n modules: {\n 'alpha-slider': moduleAlphaSlider,\n 'current-color': moduleCurrentColor,\n hex: moduleHex,\n // eslint-disable-line\n 'hsb-sliders': moduleHsbSliders,\n 'hue-slider': moduleHueSlider,\n 'brightness-slider': moduleBrightnessSlider,\n palette: modulePalette,\n // eslint-disable-line\n 'initial-current-colors': moduleInitialCurrentColors,\n 'rgb-bars': moduleRgbBars,\n 'rgb-sliders': moduleRgbSliders,\n 'sb-spectrum': moduleSbSpectrum,\n 'hs-spectrum': moduleHsSpectrum,\n wheel: moduleWheel // eslint-disable-line\n }\n });\n\n function onInputClick() {\n self.open();\n }\n function onInputFocus(e) {\n e.preventDefault();\n }\n function onTargetClick() {\n self.open();\n }\n function onHtmlClick(e) {\n if (self.destroyed || !self.params) return;\n if (self.params.openIn === 'page') return;\n const $clickTargetEl = $(e.target);\n if (!self.opened || self.closing) return;\n if ($clickTargetEl.closest('[class*=\"backdrop\"]').length) return;\n if ($clickTargetEl.closest('.color-picker-popup, .color-picker-popover').length) return;\n if ($inputEl && $inputEl.length > 0) {\n if ($clickTargetEl[0] !== $inputEl[0] && $clickTargetEl.closest('.sheet-modal').length === 0) {\n self.close();\n }\n } else if ($(e.target).closest('.sheet-modal').length === 0) {\n self.close();\n }\n }\n\n // Events\n extend(self, {\n attachInputEvents() {\n self.$inputEl.on('click', onInputClick);\n if (self.params.inputReadOnly) {\n self.$inputEl.on('focus mousedown', onInputFocus);\n if (self.$inputEl[0]) {\n self.$inputEl[0].f7ValidateReadonly = true;\n }\n }\n },\n detachInputEvents() {\n self.$inputEl.off('click', onInputClick);\n if (self.params.inputReadOnly) {\n self.$inputEl.off('focus mousedown', onInputFocus);\n if (self.$inputEl[0]) {\n delete self.$inputEl[0].f7ValidateReadonly;\n }\n }\n },\n attachTargetEvents() {\n self.$targetEl.on('click', onTargetClick);\n },\n detachTargetEvents() {\n self.$targetEl.off('click', onTargetClick);\n },\n attachHtmlEvents() {\n app.on('click', onHtmlClick);\n },\n detachHtmlEvents() {\n app.off('click', onHtmlClick);\n }\n });\n self.init();\n return self;\n }\n get view() {\n const {\n $inputEl,\n $targetEl,\n app,\n params\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n } else {\n if ($inputEl) {\n view = $inputEl.parents('.view').length && $inputEl.parents('.view')[0].f7View;\n }\n if (!view && $targetEl) {\n view = $targetEl.parents('.view').length && $targetEl.parents('.view')[0].f7View;\n }\n }\n if (!view) view = app.views.main;\n return view;\n }\n attachEvents() {\n const self = this;\n self.centerModules = self.centerModules.bind(self);\n if (self.params.centerModules) {\n self.app.on('resize', self.centerModules);\n }\n }\n detachEvents() {\n const self = this;\n if (self.params.centerModules) {\n self.app.off('resize', self.centerModules);\n }\n }\n centerModules() {\n const self = this;\n if (!self.opened || !self.$el || self.inline) return;\n const $pageContentEl = self.$el.find('.page-content');\n if (!$pageContentEl.length) return;\n const {\n scrollHeight,\n offsetHeight\n } = $pageContentEl[0];\n if (scrollHeight <= offsetHeight) {\n $pageContentEl.addClass('justify-content-center');\n } else {\n $pageContentEl.removeClass('justify-content-center');\n }\n }\n initInput() {\n const self = this;\n if (!self.$inputEl) return;\n if (self.params.inputReadOnly) self.$inputEl.prop('readOnly', true);\n }\n getModalType() {\n const self = this;\n const {\n app,\n modal,\n params\n } = self;\n const {\n openIn,\n openInPhone\n } = params;\n const device = getDevice();\n if (modal && modal.type) return modal.type;\n if (openIn !== 'auto') return openIn;\n if (self.inline) return null;\n if (device.ios) {\n return device.ipad ? 'popover' : openInPhone;\n }\n if (app.width >= 768) {\n return 'popover';\n }\n return openInPhone;\n }\n formatValue() {\n const self = this;\n const {\n value\n } = self;\n if (self.params.formatValue) {\n return self.params.formatValue.call(self, value);\n }\n return value.hex;\n }\n\n // eslint-disable-next-line\n normalizeHsValues(arr) {\n return [Math.floor(arr[0] * 10) / 10, Math.floor(arr[1] * 1000) / 1000, Math.floor(arr[2] * 1000) / 1000];\n }\n setValue(value, updateModules) {\n if (value === void 0) {\n value = {};\n }\n if (updateModules === void 0) {\n updateModules = true;\n }\n const self = this;\n if (typeof value === 'undefined') return;\n let {\n hex,\n rgb,\n hsl,\n hsb,\n alpha = 1,\n hue,\n rgba,\n hsla\n } = self.value || {};\n const needChangeEvent = self.value || !self.value && !self.params.value;\n let valueChanged;\n Object.keys(value).forEach(k => {\n if (!self.value || typeof self.value[k] === 'undefined') {\n valueChanged = true;\n return;\n }\n const v = value[k];\n if (Array.isArray(v)) {\n v.forEach((subV, subIndex) => {\n if (subV !== self.value[k][subIndex]) {\n valueChanged = true;\n }\n });\n } else if (v !== self.value[k]) {\n valueChanged = true;\n }\n });\n if (!valueChanged) return;\n if (value.rgb || value.rgba) {\n const [r, g, b, a = alpha] = value.rgb || value.rgba;\n rgb = [r, g, b];\n hex = colorRgbToHex(...rgb);\n hsl = colorRgbToHsl(...rgb);\n hsb = colorHslToHsb(...hsl);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n alpha = a;\n rgba = [rgb[0], rgb[1], rgb[2], a];\n hsla = [hsl[0], hsl[1], hsl[2], a];\n }\n if (value.hsl || value.hsla) {\n const [h, s, l, a = alpha] = value.hsl || value.hsla;\n hsl = [h, s, l];\n rgb = colorHslToRgb(...hsl);\n hex = colorRgbToHex(...rgb);\n hsb = colorHslToHsb(...hsl);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n alpha = a;\n rgba = [rgb[0], rgb[1], rgb[2], a];\n hsla = [hsl[0], hsl[1], hsl[2], a];\n }\n if (value.hsb) {\n const [h, s, b, a = alpha] = value.hsb;\n hsb = [h, s, b];\n hsl = colorHsbToHsl(...hsb);\n rgb = colorHslToRgb(...hsl);\n hex = colorRgbToHex(...rgb);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n alpha = a;\n rgba = [rgb[0], rgb[1], rgb[2], a];\n hsla = [hsl[0], hsl[1], hsl[2], a];\n }\n if (value.hex) {\n rgb = colorHexToRgb(value.hex);\n hex = colorRgbToHex(...rgb);\n hsl = colorRgbToHsl(...rgb);\n hsb = colorHslToHsb(...hsl);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n rgba = [rgb[0], rgb[1], rgb[2], alpha];\n hsla = [hsl[0], hsl[1], hsl[2], alpha];\n }\n if (typeof value.alpha !== 'undefined') {\n alpha = value.alpha;\n if (typeof rgb !== 'undefined') {\n rgba = [rgb[0], rgb[1], rgb[2], alpha];\n }\n if (typeof hsl !== 'undefined') {\n hsla = [hsl[0], hsl[1], hsl[2], alpha];\n }\n }\n if (typeof value.hue !== 'undefined') {\n const [h, s, l] = hsl; // eslint-disable-line\n hsl = [value.hue, s, l];\n hsb = colorHslToHsb(...hsl);\n rgb = colorHslToRgb(...hsl);\n hex = colorRgbToHex(...rgb);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n rgba = [rgb[0], rgb[1], rgb[2], alpha];\n hsla = [hsl[0], hsl[1], hsl[2], alpha];\n }\n self.value = {\n hex,\n alpha,\n hue,\n rgb,\n hsl,\n hsb,\n rgba,\n hsla\n };\n if (!self.initialValue) self.initialValue = extend({}, self.value);\n self.updateValue(needChangeEvent);\n if (self.opened && updateModules) {\n self.updateModules();\n }\n }\n getValue() {\n const self = this;\n return self.value;\n }\n updateValue(fireEvents) {\n if (fireEvents === void 0) {\n fireEvents = true;\n }\n const self = this;\n const {\n $inputEl,\n value,\n $targetEl\n } = self;\n if ($targetEl && self.params.targetElSetBackgroundColor) {\n const {\n rgba\n } = value;\n $targetEl.css('background-color', `rgba(${rgba.join(', ')})`);\n }\n if (fireEvents) {\n self.emit('local::change colorPickerChange', self, value);\n }\n if ($inputEl && $inputEl.length) {\n const inputValue = self.formatValue(value);\n if ($inputEl && $inputEl.length) {\n $inputEl.val(inputValue);\n if (fireEvents) {\n $inputEl.trigger('change');\n }\n }\n }\n }\n updateModules() {\n const self = this;\n const {\n modules\n } = self;\n self.params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].update) {\n modules[m].update(self);\n } else if (m && m.update) {\n m.update(self);\n }\n });\n }\n update() {\n const self = this;\n self.updateModules();\n }\n renderPicker() {\n const self = this;\n const {\n params,\n modules\n } = self;\n let html = '';\n params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].render) {\n html += modules[m].render(self);\n } else if (m && m.render) {\n html += m.render(self);\n }\n });\n return html;\n }\n renderNavbar() {\n const self = this;\n if (self.params.renderNavbar) {\n return self.params.renderNavbar.call(self, self);\n }\n const {\n openIn,\n navbarTitleText,\n navbarBackLinkText,\n navbarCloseText\n } = self.params;\n return $jsx(\"div\", {\n class: \"navbar\"\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: \"navbar-inner sliding\"\n }, openIn === 'page' && $jsx(\"div\", {\n class: \"left\"\n }, $jsx(\"a\", {\n class: \"link back\"\n }, $jsx(\"i\", {\n class: \"icon icon-back\"\n }), $jsx(\"span\", {\n class: \"if-not-md\"\n }, navbarBackLinkText))), $jsx(\"div\", {\n class: \"title\"\n }, navbarTitleText), openIn !== 'page' && $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": \".color-picker-popup\"\n }, navbarCloseText))));\n }\n renderToolbar() {\n const self = this;\n if (self.params.renderToolbar) {\n return self.params.renderToolbar.call(self, self);\n }\n return $jsx(\"div\", {\n class: \"toolbar toolbar-top\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"div\", {\n class: \"left\"\n }), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link sheet-close popover-close\",\n \"data-sheet\": \".color-picker-sheet-modal\",\n \"data-popover\": \".color-picker-popover\"\n }, self.params.toolbarCloseText))));\n }\n renderInline() {\n const self = this;\n const {\n cssClass,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `color-picker color-picker-inline ${groupedModules ? 'color-picker-grouped-modules' : ''} ${cssClass || ''}`\n }, self.renderPicker());\n }\n renderSheet() {\n const self = this;\n const {\n cssClass,\n toolbarSheet,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `sheet-modal color-picker color-picker-sheet-modal ${groupedModules ? 'color-picker-grouped-modules' : ''} ${cssClass || ''}`\n }, toolbarSheet && self.renderToolbar(), $jsx(\"div\", {\n class: \"sheet-modal-inner\"\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker())));\n }\n renderPopover() {\n const self = this;\n const {\n cssClass,\n toolbarPopover,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `popover color-picker-popover ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `color-picker ${groupedModules ? 'color-picker-grouped-modules' : ''}`\n }, toolbarPopover && self.renderToolbar(), $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker()))));\n }\n renderPopup() {\n const self = this;\n const {\n cssClass,\n navbarPopup,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `popup color-picker-popup ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"page\"\n }, navbarPopup && self.renderNavbar(), $jsx(\"div\", {\n class: `color-picker ${groupedModules ? 'color-picker-grouped-modules' : ''}`\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker()))));\n }\n renderPage() {\n const self = this;\n const {\n cssClass,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `page color-picker-page ${cssClass || ''}`,\n \"data-name\": \"color-picker-page\"\n }, self.renderNavbar(), $jsx(\"div\", {\n class: `color-picker ${groupedModules ? 'color-picker-grouped-modules' : ''}`\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker())));\n }\n\n // eslint-disable-next-line\n render() {\n const self = this;\n const {\n params\n } = self;\n if (params.render) return params.render.call(self);\n if (self.inline) return self.renderInline();\n if (params.openIn === 'page') {\n return self.renderPage();\n }\n const modalType = self.getModalType();\n if (modalType === 'popover') return self.renderPopover();\n if (modalType === 'sheet') return self.renderSheet();\n if (modalType === 'popup') return self.renderPopup();\n }\n onOpen() {\n const self = this;\n const {\n initialized,\n $el,\n app,\n $inputEl,\n inline,\n value,\n params,\n modules\n } = self;\n self.closing = false;\n self.opened = true;\n self.opening = true;\n\n // Init main events\n self.attachEvents();\n params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].init) {\n modules[m].init(self);\n } else if (m && m.init) {\n m.init(self);\n }\n });\n const updateValue = !value && params.value;\n\n // Set value\n if (!initialized) {\n if (value) self.setValue(value);else if (params.value) {\n self.setValue(params.value, false);\n } else if (!params.value) {\n self.setValue({\n hex: '#ff0000'\n }, false);\n }\n } else if (value) {\n self.initialValue = extend({}, value);\n self.setValue(value, false);\n }\n\n // Update input value\n if (updateValue) self.updateValue();\n self.updateModules();\n\n // Center modules\n if (params.centerModules) {\n self.centerModules();\n }\n\n // Extra focus\n if (!inline && $inputEl && $inputEl.length && app.theme === 'md') {\n $inputEl.trigger('focus');\n }\n self.initialized = true;\n\n // Trigger events\n if ($el) {\n $el.trigger('colorpicker:open');\n }\n if ($inputEl) {\n $inputEl.trigger('colorpicker:open');\n }\n self.emit('local::open colorPickerOpen', self);\n }\n onOpened() {\n const self = this;\n self.opening = false;\n if (self.$el) {\n self.$el.trigger('colorpicker:opened');\n }\n if (self.$inputEl) {\n self.$inputEl.trigger('colorpicker:opened');\n }\n self.emit('local::opened colorPickerOpened', self);\n }\n onClose() {\n const self = this;\n const {\n app,\n params,\n modules\n } = self;\n self.opening = false;\n self.closing = true;\n\n // Detach events\n self.detachEvents();\n if (self.$inputEl) {\n if (app.theme === 'md') {\n self.$inputEl.trigger('blur');\n } else {\n const validate = self.$inputEl.attr('validate');\n const required = self.$inputEl.attr('required');\n if (validate && required) {\n app.input.validate(self.$inputEl);\n }\n }\n }\n params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].destroy) {\n modules[m].destroy(self);\n } else if (m && m.destroy) {\n m.destroy(self);\n }\n });\n if (self.$el) {\n self.$el.trigger('colorpicker:close');\n }\n if (self.$inputEl) {\n self.$inputEl.trigger('colorpicker:close');\n }\n self.emit('local::close colorPickerClose', self);\n }\n onClosed() {\n const self = this;\n self.opened = false;\n self.closing = false;\n if (!self.inline) {\n nextTick(() => {\n if (self.modal && self.modal.el && self.modal.destroy) {\n if (!self.params.routableModals) {\n self.modal.destroy();\n }\n }\n delete self.modal;\n });\n }\n if (self.$el) {\n self.$el.trigger('colorpicker:closed');\n }\n if (self.$inputEl) {\n self.$inputEl.trigger('colorpicker:closed');\n }\n self.emit('local::closed colorPickerClosed', self);\n }\n open() {\n const self = this;\n const {\n app,\n opened,\n inline,\n $inputEl,\n $targetEl,\n params\n } = self;\n if (opened) return;\n if (inline) {\n self.$el = $(self.render());\n self.$el[0].f7ColorPicker = self;\n self.$containerEl.append(self.$el);\n self.onOpen();\n self.onOpened();\n return;\n }\n const colorPickerContent = self.render();\n if (params.openIn === 'page') {\n self.view.router.navigate({\n url: self.url,\n route: {\n content: colorPickerContent,\n path: self.url,\n on: {\n pageBeforeIn(e, page) {\n self.$el = page.$el.find('.color-picker');\n self.$el[0].f7ColorPicker = self;\n self.onOpen();\n },\n pageAfterIn() {\n self.onOpened();\n },\n pageBeforeOut() {\n self.onClose();\n },\n pageAfterOut() {\n self.onClosed();\n if (self.$el && self.$el[0]) {\n self.$el[0].f7ColorPicker = null;\n delete self.$el[0].f7ColorPicker;\n }\n }\n }\n }\n });\n } else {\n const modalType = self.getModalType();\n let backdrop = params.backdrop;\n if (backdrop === null || typeof backdrop === 'undefined') {\n if (modalType === 'popover' && app.params.popover.backdrop !== false) backdrop = true;\n if (modalType === 'popup') backdrop = true;\n }\n const modalParams = {\n targetEl: $targetEl || $inputEl,\n scrollToEl: params.scrollToInput ? $targetEl || $inputEl : undefined,\n content: colorPickerContent,\n backdrop,\n closeByBackdropClick: params.closeByBackdropClick,\n on: {\n open() {\n const modal = this;\n self.modal = modal;\n self.$el = modalType === 'popover' || modalType === 'popup' ? modal.$el.find('.color-picker') : modal.$el;\n self.$el[0].f7ColorPicker = self;\n self.onOpen();\n },\n opened() {\n self.onOpened();\n },\n close() {\n self.onClose();\n },\n closed() {\n self.onClosed();\n if (self.$el && self.$el[0]) {\n self.$el[0].f7ColorPicker = null;\n delete self.$el[0].f7ColorPicker;\n }\n }\n }\n };\n if (modalType === 'popup') {\n modalParams.push = params.popupPush;\n modalParams.swipeToClose = params.popupSwipeToClose;\n }\n if (modalType === 'sheet') {\n modalParams.push = params.sheetPush;\n modalParams.swipeToClose = params.sheetSwipeToClose;\n }\n if (params.routableModals && self.view) {\n self.view.router.navigate({\n url: self.url,\n route: {\n path: self.url,\n [modalType]: modalParams\n }\n });\n } else {\n self.modal = app[modalType].create(modalParams);\n self.modal.open();\n }\n }\n }\n close() {\n const self = this;\n const {\n opened,\n inline\n } = self;\n if (!opened) return;\n if (inline) {\n self.onClose();\n self.onClosed();\n return;\n }\n if (self.params.routableModals && self.view || self.params.openIn === 'page') {\n self.view.router.back();\n } else {\n self.modal.close();\n }\n }\n init() {\n const self = this;\n self.initInput();\n if (self.inline) {\n self.open();\n self.emit('local::init colorPickerInit', self);\n return;\n }\n if (!self.initialized && self.params.value) {\n self.setValue(self.params.value);\n }\n\n // Attach input Events\n if (self.$inputEl) {\n self.attachInputEvents();\n }\n if (self.$targetEl) {\n self.attachTargetEvents();\n }\n if (self.params.closeByOutsideClick) {\n self.attachHtmlEvents();\n }\n self.emit('local::init colorPickerInit', self);\n }\n destroy() {\n const self = this;\n if (self.destroyed) return;\n const {\n $el\n } = self;\n self.emit('local::beforeDestroy colorPickerBeforeDestroy', self);\n if ($el) $el.trigger('colorpicker:beforedestroy');\n self.close();\n\n // Detach Events\n self.detachEvents();\n if (self.$inputEl) {\n self.detachInputEvents();\n }\n if (self.$targetEl) {\n self.detachTargetEvents();\n }\n if (self.params.closeByOutsideClick) {\n self.detachHtmlEvents();\n }\n if ($el && $el.length) delete self.$el[0].f7ColorPicker;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default ColorPicker;", "import $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport ColorPicker from './color-picker-class.js';\nexport default {\n name: 'colorPicker',\n static: {\n ColorPicker\n },\n create() {\n const app = this;\n app.colorPicker = ConstructorMethods({\n defaultSelector: '.color-picker',\n constructor: ColorPicker,\n app,\n domProp: 'f7ColorPicker'\n });\n app.colorPicker.close = function close(el) {\n if (el === void 0) {\n el = '.color-picker';\n }\n const $el = $(el);\n if ($el.length === 0) return;\n const colorPicker = $el[0].f7ColorPicker;\n if (!colorPicker || colorPicker && !colorPicker.opened) return;\n colorPicker.close();\n };\n },\n params: {\n colorPicker: {\n // Color picker settings\n value: null,\n modules: ['wheel'],\n palette: [['#FFEBEE', '#FFCDD2', '#EF9A9A', '#E57373', '#EF5350', '#F44336', '#E53935', '#D32F2F', '#C62828', '#B71C1C'], ['#F3E5F5', '#E1BEE7', '#CE93D8', '#BA68C8', '#AB47BC', '#9C27B0', '#8E24AA', '#7B1FA2', '#6A1B9A', '#4A148C'], ['#E8EAF6', '#C5CAE9', '#9FA8DA', '#7986CB', '#5C6BC0', '#3F51B5', '#3949AB', '#303F9F', '#283593', '#1A237E'], ['#E1F5FE', '#B3E5FC', '#81D4FA', '#4FC3F7', '#29B6F6', '#03A9F4', '#039BE5', '#0288D1', '#0277BD', '#01579B'], ['#E0F2F1', '#B2DFDB', '#80CBC4', '#4DB6AC', '#26A69A', '#009688', '#00897B', '#00796B', '#00695C', '#004D40'], ['#F1F8E9', '#DCEDC8', '#C5E1A5', '#AED581', '#9CCC65', '#8BC34A', '#7CB342', '#689F38', '#558B2F', '#33691E'], ['#FFFDE7', '#FFF9C4', '#FFF59D', '#FFF176', '#FFEE58', '#FFEB3B', '#FDD835', '#FBC02D', '#F9A825', '#F57F17'], ['#FFF3E0', '#FFE0B2', '#FFCC80', '#FFB74D', '#FFA726', '#FF9800', '#FB8C00', '#F57C00', '#EF6C00', '#E65100']],\n groupedModules: false,\n centerModules: true,\n sliderLabel: false,\n sliderValue: false,\n sliderValueEdiable: false,\n barLabel: false,\n barValue: false,\n barValueEdiable: false,\n hexLabel: false,\n hexValueEditable: false,\n redLabelText: 'R',\n greenLabelText: 'G',\n blueLabelText: 'B',\n hueLabelText: 'H',\n saturationLabelText: 'S',\n brightnessLabelText: 'B',\n hexLabelText: 'HEX',\n alphaLabelText: 'A',\n // Common opener settings\n containerEl: null,\n openIn: 'popover',\n // or 'popover' or 'sheet' or 'popup' or 'page' or 'auto'\n openInPhone: 'popup',\n // or 'popover' or 'sheet' or 'popup' or 'page'\n popupPush: false,\n popupSwipeToClose: undefined,\n sheetPush: false,\n sheetSwipeToClose: undefined,\n formatValue: null,\n targetEl: null,\n targetElSetBackgroundColor: false,\n inputEl: null,\n inputReadOnly: true,\n closeByOutsideClick: true,\n scrollToInput: true,\n toolbarSheet: true,\n toolbarPopover: false,\n toolbarCloseText: 'Done',\n navbarPopup: true,\n navbarCloseText: 'Done',\n navbarTitleText: 'Color',\n navbarBackLinkText: 'Back',\n cssClass: null,\n routableModals: false,\n view: null,\n url: 'color/',\n backdrop: null,\n closeByBackdropClick: true,\n // Render functions\n renderToolbar: null,\n renderNavbar: null,\n renderInline: null,\n renderPopover: null,\n renderSheet: null,\n renderPopup: null,\n render: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nconst Treeview = {\n open(itemEl) {\n const app = this;\n const $itemEl = $(itemEl).eq(0);\n if (!$itemEl.length) return;\n $itemEl.addClass('treeview-item-opened');\n $itemEl.trigger('treeview:open');\n app.emit('treeviewOpen', $itemEl[0]);\n function done(cancel) {\n if (cancel) {\n $itemEl.removeClass('treeview-item-opened');\n $itemEl.trigger('treeview:close');\n app.emit('treeviewClose', $itemEl[0]);\n } else {\n $itemEl[0].f7TreeviewChildrenLoaded = true;\n }\n $itemEl.find('.treeview-toggle').removeClass('treeview-toggle-hidden');\n $itemEl.find('.treeview-preloader').remove();\n }\n if ($itemEl.hasClass('treeview-load-children') && !$itemEl[0].f7TreeviewChildrenLoaded) {\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n $itemEl.trigger('treeview:loadchildren', done);\n app.emit('treeviewLoadChildren', $itemEl[0], done);\n $itemEl.find('.treeview-toggle').addClass('treeview-toggle-hidden');\n $itemEl.find('.treeview-item-root').prepend(`${preloaders[`${app.theme}PreloaderContent`]}
`);\n }\n },\n close(itemEl) {\n const app = this;\n const $itemEl = $(itemEl).eq(0);\n if (!$itemEl.length) return;\n $itemEl.removeClass('treeview-item-opened');\n $itemEl.trigger('treeview:close');\n app.emit('treeviewClose', $itemEl[0]);\n },\n toggle(itemEl) {\n const app = this;\n const $itemEl = $(itemEl).eq(0);\n if (!$itemEl.length) return;\n const wasOpened = $itemEl.hasClass('treeview-item-opened');\n app.treeview[wasOpened ? 'close' : 'open']($itemEl);\n }\n};\nexport default {\n name: 'treeview',\n create() {\n const app = this;\n bindMethods(app, {\n treeview: Treeview\n });\n },\n clicks: {\n '.treeview-toggle': function toggle($clickedEl, clickedData, e) {\n const app = this;\n if ($clickedEl.parents('.treeview-item-toggle').length) return;\n const $treeviewItemEl = $clickedEl.parents('.treeview-item').eq(0);\n if (!$treeviewItemEl.length) return;\n e.preventF7Router = true;\n app.treeview.toggle($treeviewItemEl[0]);\n },\n '.treeview-item-toggle': function toggle($clickedEl, clickedData, e) {\n const app = this;\n const $treeviewItemEl = $clickedEl.closest('.treeview-item').eq(0);\n if (!$treeviewItemEl.length) return;\n e.preventF7Router = true;\n app.treeview.toggle($treeviewItemEl[0]);\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nconst textEditorButtonsMap = {\n // f7-icon, material-icon, command\n bold: ['bold', 'format_bold', 'bold'],\n italic: ['italic', 'format_italic', 'italic'],\n underline: ['underline', 'format_underlined', 'underline'],\n strikeThrough: ['strikethrough', 'strikethrough_s', 'strikeThrough'],\n orderedList: ['list_number', 'format_list_numbered', 'insertOrderedList'],\n unorderedList: ['list_bullet', 'format_list_bulleted', 'insertUnorderedList'],\n link: ['link', 'link', 'createLink'],\n image: ['photo', 'image', 'insertImage'],\n paragraph: ['paragraph', '\u00B6', 'formatBlock.P'],\n h1: ['H1', 'H1', 'formatBlock.H1'],\n h2: ['H2', 'H2', 'formatBlock.H2'],\n h3: ['H3', 'H3', 'formatBlock.H3'],\n alignLeft: ['text_alignleft', 'format_align_left', 'justifyLeft'],\n alignCenter: ['text_aligncenter', 'format_align_center', 'justifyCenter'],\n alignRight: ['text_alignright', 'format_align_right', 'justifyRight'],\n alignJustify: ['text_justify', 'format_align_justify', 'justifyFull'],\n subscript: ['textformat_subscript', 'A1', 'subscript'],\n superscript: ['textformat_superscript', 'A1', 'superscript'],\n indent: ['increase_indent', 'format_indent_increase', 'indent'],\n outdent: ['decrease_indent', 'format_indent_decrease', 'outdent']\n};\nclass TextEditor extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const self = this;\n const document = getDocument();\n const device = getDevice();\n const defaults = extend({}, app.params.textEditor);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const el = self.params.el;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7TextEditor) return $el[0].f7TextEditor;\n let $contentEl = $el.children('.text-editor-content');\n if (!$contentEl.length) {\n $el.append('');\n $contentEl = $el.children('.text-editor-content');\n }\n extend(self, {\n app,\n $el,\n el: $el[0],\n $contentEl,\n contentEl: $contentEl[0]\n });\n if ('value' in params) {\n self.value = self.params.value;\n }\n if (self.params.mode === 'keyboard-toolbar') {\n if (!(device.cordova || device.capacitor) && !device.android) {\n self.params.mode = 'popover';\n }\n }\n if (typeof self.params.buttons === 'string') {\n try {\n self.params.buttons = JSON.parse(self.params.buttons);\n } catch (err) {\n throw new Error('Framework7: TextEditor: wrong \"buttons\" parameter format');\n }\n }\n $el[0].f7TextEditor = self;\n\n // Bind\n self.onButtonClick = self.onButtonClick.bind(self);\n self.onFocus = self.onFocus.bind(self);\n self.onBlur = self.onBlur.bind(self);\n self.onInput = self.onInput.bind(self);\n self.onPaste = self.onPaste.bind(self);\n self.onSelectionChange = self.onSelectionChange.bind(self);\n self.closeKeyboardToolbar = self.closeKeyboardToolbar.bind(self);\n\n // Handle Events\n self.attachEvents = function attachEvents() {\n if (self.params.mode === 'toolbar') {\n self.$el.find('.text-editor-toolbar').on('click', 'button', self.onButtonClick);\n }\n if (self.params.mode === 'keyboard-toolbar') {\n self.$keyboardToolbarEl.on('click', 'button', self.onButtonClick);\n self.$el.parents('.page').on('page:beforeout', self.closeKeyboardToolbar);\n }\n if (self.params.mode === 'popover' && self.popover) {\n self.popover.$el.on('click', 'button', self.onButtonClick);\n }\n self.$contentEl.on('paste', self.onPaste);\n self.$contentEl.on('focus', self.onFocus);\n self.$contentEl.on('blur', self.onBlur);\n self.$contentEl.on('input', self.onInput, true);\n $(document).on('selectionchange', self.onSelectionChange);\n };\n self.detachEvents = function detachEvents() {\n if (self.params.mode === 'toolbar') {\n self.$el.find('.text-editor-toolbar').off('click', 'button', self.onButtonClick);\n }\n if (self.params.mode === 'keyboard-toolbar') {\n self.$keyboardToolbarEl.off('click', 'button', self.onButtonClick);\n self.$el.parents('.page').off('page:beforeout', self.closeKeyboardToolbar);\n }\n if (self.params.mode === 'popover' && self.popover) {\n self.popover.$el.off('click', 'button', self.onButtonClick);\n }\n self.$contentEl.off('paste', self.onPaste);\n self.$contentEl.off('focus', self.onFocus);\n self.$contentEl.off('blur', self.onBlur);\n self.$contentEl.off('input', self.onInput, true);\n $(document).off('selectionchange', self.onSelectionChange);\n };\n\n // Install Modules\n self.useModules();\n\n // Init\n self.init();\n return self;\n }\n setValue(newValue) {\n const self = this;\n const currentValue = self.value;\n if (currentValue === newValue) return self;\n self.value = newValue;\n self.$contentEl.html(newValue);\n self.$el.trigger('texteditor:change', self.value);\n self.emit('local::change textEditorChange', self, self.value);\n return self;\n }\n getValue() {\n const self = this;\n return self.value;\n }\n clearValue() {\n const self = this;\n self.setValue('');\n if (self.params.placeholder && !self.$contentEl.html()) {\n self.insertPlaceholder();\n }\n return self;\n }\n createLink() {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n const currentSelection = window.getSelection();\n const selectedNodes = [];\n let $selectedLinks;\n if (currentSelection && currentSelection.anchorNode && $(currentSelection.anchorNode).parents(self.$el).length) {\n let anchorNode = currentSelection.anchorNode;\n while (anchorNode) {\n selectedNodes.push(anchorNode);\n if (!anchorNode.nextSibling || anchorNode === currentSelection.focusNode) {\n anchorNode = null;\n }\n if (anchorNode) {\n anchorNode = anchorNode.nextSibling;\n }\n }\n const selectedNodesLinks = [];\n const $selectedNodes = $(selectedNodes);\n for (let i = 0; i < $selectedNodes.length; i += 1) {\n const childNodes = $selectedNodes[i].children;\n if (childNodes) {\n for (let j = 0; j < childNodes.length; j += 1) {\n if ($(childNodes[j]).is('a')) {\n selectedNodesLinks.push(childNodes[j]);\n }\n }\n }\n }\n $selectedLinks = $selectedNodes.closest('a').add($(selectedNodesLinks));\n }\n if ($selectedLinks && $selectedLinks.length) {\n $selectedLinks.each(linkNode => {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(linkNode);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('unlink', false);\n selection.removeAllRanges();\n });\n return self;\n }\n const currentRange = self.getSelectionRange();\n if (!currentRange) return self;\n const dialog = self.app.dialog.prompt('', self.params.linkUrlText, link => {\n if (link && link.trim().length) {\n self.setSelectionRange(currentRange);\n document.execCommand('createLink', false, link.trim());\n self.$el.trigger('texteditor:insertlink', {\n url: link.trim()\n });\n self.emit('local:insertLink textEditorInsertLink', self, link.trim());\n }\n });\n dialog.$el.find('input').focus();\n return self;\n }\n insertImage() {\n const self = this;\n const document = getDocument();\n const currentRange = self.getSelectionRange();\n if (!currentRange) return self;\n const dialog = self.app.dialog.prompt('', self.params.imageUrlText, imageUrl => {\n if (imageUrl && imageUrl.trim().length) {\n self.setSelectionRange(currentRange);\n document.execCommand('insertImage', false, imageUrl.trim());\n self.$el.trigger('texteditor:insertimage', {\n url: imageUrl.trim()\n });\n self.emit('local:insertImage textEditorInsertImage', self, imageUrl.trim());\n }\n });\n dialog.$el.find('input').focus();\n return self;\n }\n removePlaceholder() {\n const self = this;\n self.$contentEl.find('.text-editor-placeholder').remove();\n }\n insertPlaceholder() {\n const self = this;\n self.$contentEl.append(`${self.params.placeholder}
`);\n }\n onSelectionChange() {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n if (self.params.mode === 'toolbar') return;\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n if (self.params.mode === 'keyboard-toolbar') {\n if (!selectionIsInContent) {\n self.closeKeyboardToolbar();\n } else {\n self.openKeyboardToolbar();\n }\n return;\n }\n if (self.params.mode === 'popover') {\n const selectionIsInPopover = $(selection.anchorNode).parents(self.popover.el).length || selection.anchorNode === self.popover.el;\n if (!selectionIsInContent && !selectionIsInPopover) {\n self.closePopover();\n return;\n }\n if (!selection.isCollapsed && selection.rangeCount) {\n const range = selection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n const rootEl = self.app.$el[0] || document.body;\n self.openPopover(rect.x + (window.scrollX || 0) - rootEl.offsetLeft, rect.y + (window.scrollY || 0) - rootEl.offsetTop, rect.width, rect.height);\n } else if (selection.isCollapsed) {\n self.closePopover();\n }\n }\n }\n onPaste(e) {\n const self = this;\n const document = getDocument();\n if (self.params.clearFormattingOnPaste && e.clipboardData && e.clipboardData.getData) {\n const text = e.clipboardData.getData('text/plain');\n e.preventDefault();\n document.execCommand('insertText', false, text);\n }\n }\n onInput() {\n const self = this;\n const value = self.$contentEl.html();\n self.value = value;\n self.$el.trigger('texteditor:input');\n self.emit('local:input textEditorInput', self, self.value);\n self.$el.trigger('texteditor:change', self.value);\n self.emit('local::change textEditorChange', self, self.value);\n }\n onFocus() {\n const self = this;\n self.removePlaceholder();\n self.$contentEl.focus();\n self.$el.trigger('texteditor:focus');\n self.emit('local::focus textEditorFocus', self);\n }\n onBlur() {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n if (self.params.placeholder && self.$contentEl.html() === '') {\n self.insertPlaceholder();\n }\n if (self.params.mode === 'popover') {\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n const inPopover = document.activeElement && self.popover && $(document.activeElement).closest(self.popover.$el).length;\n if (!inPopover && !selectionIsInContent) {\n self.closePopover();\n }\n }\n if (self.params.mode === 'keyboard-toolbar') {\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n if (!selectionIsInContent) {\n self.closeKeyboardToolbar();\n }\n }\n self.$el.trigger('texteditor:blur');\n self.emit('local::blur textEditorBlur', self);\n }\n onButtonClick(e) {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n if (!selectionIsInContent) return;\n const $buttonEl = $(e.target).closest('button');\n if ($buttonEl.parents('form').length) {\n e.preventDefault();\n }\n const button = $buttonEl.attr('data-button');\n const buttonData = self.params.customButtons && self.params.customButtons[button];\n if (!button || !(textEditorButtonsMap[button] || buttonData)) return;\n $buttonEl.trigger('texteditor:buttonclick', button);\n self.emit('local::buttonClick textEditorButtonClick', self, button);\n if (buttonData) {\n if (buttonData.onClick) buttonData.onClick(self, $buttonEl[0]);\n return;\n }\n const command = textEditorButtonsMap[button][2];\n if (command === 'createLink') {\n self.createLink();\n return;\n }\n if (command === 'insertImage') {\n self.insertImage();\n return;\n }\n if (command.indexOf('formatBlock') === 0) {\n const tagName = command.split('.')[1];\n const $anchorNode = $(selection.anchorNode);\n if ($anchorNode.parents(tagName.toLowerCase()).length || $anchorNode.is(tagName)) {\n document.execCommand('formatBlock', false, 'div');\n } else {\n document.execCommand('formatBlock', false, tagName);\n }\n return;\n }\n document.execCommand(command, false);\n }\n\n // eslint-disable-next-line\n getSelectionRange() {\n const window = getWindow();\n const document = getDocument();\n if (window.getSelection) {\n const sel = window.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n return sel.getRangeAt(0);\n }\n } else if (document.selection && document.selection.createRange) {\n return document.selection.createRange();\n }\n return null;\n }\n\n // eslint-disable-next-line\n setSelectionRange(range) {\n const window = getWindow();\n const document = getDocument();\n if (range) {\n if (window.getSelection) {\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (document.selection && range.select) {\n range.select();\n }\n }\n }\n renderButtons() {\n const self = this;\n let html = '';\n function renderButton(button) {\n const iconClass = self.app.theme === 'md' ? 'material-icons' : 'f7-icons';\n if (self.params.customButtons && self.params.customButtons[button]) {\n const buttonData = self.params.customButtons[button];\n return ``;\n }\n if (!textEditorButtonsMap[button]) return '';\n const iconContent = textEditorButtonsMap[button][self.app.theme === 'md' ? 1 : 0];\n return ``.trim();\n }\n self.params.buttons.forEach((button, buttonIndex) => {\n if (Array.isArray(button)) {\n button.forEach(b => {\n html += renderButton(b);\n });\n if (buttonIndex < self.params.buttons.length - 1 && self.params.dividers) {\n html += '';\n }\n } else {\n html += renderButton(button);\n }\n });\n return html;\n }\n createToolbar() {\n const self = this;\n self.$el.prepend(`${self.renderButtons()}
`);\n }\n createKeyboardToolbar() {\n const self = this;\n self.$keyboardToolbarEl = $(``);\n }\n createPopover() {\n const self = this;\n self.popover = self.app.popover.create({\n content: `\n \n
${self.renderButtons()}
\n
\n `,\n closeByOutsideClick: false,\n backdrop: false\n });\n }\n openKeyboardToolbar() {\n const self = this;\n if (self.$keyboardToolbarEl.parent(self.app.$el).length) return;\n self.$el.trigger('texteditor:keyboardopen');\n self.emit('local::keyboardOpen textEditorKeyboardOpen', self);\n self.app.$el.append(self.$keyboardToolbarEl);\n }\n closeKeyboardToolbar() {\n const self = this;\n self.$keyboardToolbarEl.remove();\n self.$el.trigger('texteditor:keyboardclose');\n self.emit('local::keyboardClose textEditorKeyboardClose', self);\n }\n openPopover(targetX, targetY, targetWidth, targetHeight) {\n const self = this;\n if (!self.popover) return;\n Object.assign(self.popover.params, {\n targetX,\n targetY,\n targetWidth,\n targetHeight\n });\n clearTimeout(self.popoverTimeout);\n self.popoverTimeout = setTimeout(() => {\n if (!self.popover) return;\n if (self.popover.opened) {\n self.popover.resize();\n } else {\n self.$el.trigger('texteditor:popoveropen');\n self.emit('local::popoverOpen textEditorPopoverOpen', self);\n self.popover.open();\n }\n }, 400);\n }\n closePopover() {\n const self = this;\n clearTimeout(self.popoverTimeout);\n if (!self.popover || !self.popover.opened) return;\n self.popoverTimeout = setTimeout(() => {\n if (!self.popover) return;\n self.$el.trigger('texteditor:popoverclose');\n self.emit('local::popoverClose textEditorPopoverClose', self);\n self.popover.close();\n }, 400);\n }\n init() {\n const self = this;\n if (self.value) {\n self.$contentEl.html(self.value);\n } else {\n self.value = self.$contentEl.html();\n }\n if (self.params.placeholder && self.value === '') {\n self.insertPlaceholder();\n }\n if (self.params.mode === 'toolbar') {\n self.createToolbar();\n } else if (self.params.mode === 'popover') {\n self.createPopover();\n } else if (self.params.mode === 'keyboard-toolbar') {\n self.createKeyboardToolbar();\n }\n self.attachEvents();\n self.$el.trigger('texteditor:init');\n self.emit('local::init textEditorInit', self);\n return self;\n }\n destroy() {\n let self = this;\n self.$el.trigger('texteditor:beforedestroy');\n self.emit('local::beforeDestroy textEditorBeforeDestroy', self);\n self.detachEvents();\n if (self.params.mode === 'keyboard-toolbar' && self.$keyboardToolbarEl) {\n self.$keyboardToolbarEl.remove();\n }\n if (self.popover) {\n self.popover.close(false);\n self.popover.destroy();\n }\n delete self.$el[0].f7TextEditor;\n deleteProps(self);\n self = null;\n }\n}\nexport default TextEditor;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport TextEditor from './text-editor-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'textEditor',\n params: {\n textEditor: {\n el: null,\n mode: 'toolbar',\n // or 'popover'\n value: undefined,\n // will use html content\n customButtons: null,\n buttons: [['bold', 'italic', 'underline', 'strikeThrough'], ['orderedList', 'unorderedList'], ['link', 'image'], ['paragraph', 'h1', 'h2', 'h3'], ['alignLeft', 'alignCenter', 'alignRight', 'alignJustify'], ['subscript', 'superscript'], ['indent', 'outdent']],\n dividers: true,\n imageUrlText: 'Insert image URL',\n linkUrlText: 'Insert link URL',\n placeholder: null,\n clearFormattingOnPaste: true\n }\n },\n create() {\n const app = this;\n app.textEditor = extend(ConstructorMethods({\n defaultSelector: '.text-editor',\n constructor: TextEditor,\n app,\n domProp: 'f7TextEditor'\n }));\n },\n static: {\n TextEditor\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.text-editor-init').each(editorEl => {\n const dataset = $(editorEl).dataset();\n app.textEditor.create(extend({\n el: editorEl\n }, dataset || {}));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.text-editor-init').each(editorEl => {\n if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.text-editor-init').each(editorEl => {\n const dataset = $(editorEl).dataset();\n app.textEditor.create(extend({\n el: editorEl\n }, dataset || {}));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.text-editor-init').each(editorEl => {\n if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();\n });\n }\n },\n vnode: {\n 'text-editor-init': {\n insert(vnode) {\n const app = this;\n const editorEl = vnode.elm;\n const dataset = $(editorEl).dataset();\n app.textEditor.create(extend({\n el: editorEl\n }, dataset || {}));\n },\n destroy(vnode) {\n const editorEl = vnode.elm;\n if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass PieChart extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n const defaults = extend({}, app.params.pieChart);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const {\n el\n } = self.params;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7PieChart) return $el[0].f7PieChart;\n extend(self, {\n app,\n $el,\n el: $el && $el[0],\n currentIndex: null,\n f7Tooltip: null\n });\n $el[0].f7PieChart = self;\n\n // Install Modules\n self.useModules();\n self.showTooltip = self.showTooltip.bind(this);\n self.hideTooltip = self.hideTooltip.bind(this);\n self.init();\n return self;\n }\n getSummValue() {\n const {\n datasets\n } = this.params;\n let summ = 0;\n datasets.map(d => d.value || 0).forEach(value => {\n summ += value;\n });\n return summ;\n }\n getPaths() {\n const {\n datasets,\n size\n } = this.params;\n const paths = [];\n let cumulativePercentage = 0;\n function getCoordinatesForPercentage(percentage) {\n const x = Math.cos(2 * Math.PI * percentage) * (size / 3);\n const y = Math.sin(2 * Math.PI * percentage) * (size / 3);\n return [x, y];\n }\n datasets.forEach(_ref => {\n let {\n value,\n label,\n color\n } = _ref;\n const percentage = value / this.getSummValue();\n const [startX, startY] = getCoordinatesForPercentage(cumulativePercentage);\n cumulativePercentage += percentage;\n const [endX, endY] = getCoordinatesForPercentage(cumulativePercentage);\n const largeArcFlag = percentage > 0.5 ? 1 : 0;\n const points = [`M ${startX} ${startY}`,\n // Move\n `A ${size / 3} ${size / 3} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\n // Arc\n 'L 0 0' // Line\n ].join(' ');\n paths.push({\n points,\n label,\n color\n });\n });\n return paths;\n }\n formatTooltipText() {\n const {\n datasets\n } = this.params;\n const {\n currentIndex\n } = this;\n if (currentIndex === null) return '';\n const {\n value,\n label,\n color\n } = datasets[currentIndex];\n const percentage = value / this.getSummValue() * 100;\n const round = v => {\n if (parseInt(v, 10) === v) return v;\n return Math.round(v * 100) / 100;\n };\n if (this.params.formatTooltip) {\n return this.params.formatTooltip.call(this, {\n index: currentIndex,\n value,\n label,\n color,\n percentage\n });\n }\n const tooltipText = `${label ? `${label}: ` : ''}${round(value)} (${round(percentage)}%)`;\n return `\n \n ${tooltipText}\n
\n `;\n }\n setTooltip() {\n const self = this;\n const {\n currentIndex,\n el,\n app,\n params\n } = self;\n const {\n tooltip\n } = params;\n if (currentIndex === null && !self.f7Tooltip) return;\n if (!tooltip || !el) return;\n if (currentIndex !== null && !self.f7Tooltip) {\n self.f7Tooltip = app.tooltip.create({\n trigger: 'manual',\n containerEl: el,\n targetEl: el.querySelector(`path[data-index=\"${currentIndex}\"]`),\n text: self.formatTooltipText(),\n cssClass: 'pie-chart-tooltip'\n });\n self.f7Tooltip.show();\n return;\n }\n if (!self.f7Tooltip) return;\n if (currentIndex !== null) {\n self.f7Tooltip.setText(self.formatTooltipText());\n self.f7Tooltip.setTargetEl(el.querySelector(`path[data-index=\"${currentIndex}\"]`));\n self.f7Tooltip.show();\n } else {\n self.f7Tooltip.hide();\n }\n }\n render() {\n const self = this;\n const size = self.params.size;\n const paths = self.getPaths();\n return $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: size,\n viewBox: `-${size / 3} -${size / 3} ${size * 2 / 3} ${size * 2 / 3}`,\n style: \"transform: rotate(-90deg)\"\n }, paths.map((path, index) => $jsx(\"path\", {\n d: path.points,\n fill: path.color,\n \"data-index\": index\n })));\n }\n update(newParams) {\n if (newParams === void 0) {\n newParams = {};\n }\n const self = this;\n const {\n params\n } = self;\n Object.keys(newParams).forEach(param => {\n if (typeof newParams[param] !== 'undefined') {\n params[param] = newParams[param];\n }\n });\n if (self.$svgEl.length === 0) return self;\n self.$svgEl.remove();\n delete self.$svgEl.f7PieChart;\n const $svgEl = $(self.render()).eq(0);\n $svgEl.f7PieChart = self;\n extend(self, {\n $svgEl,\n svgEl: $svgEl && $svgEl[0]\n });\n self.$el.append($svgEl);\n return self;\n }\n setCurrentIndex(index) {\n const self = this;\n if (index === self.currentIndex) return;\n const {\n datasets\n } = self.params;\n self.currentIndex = index;\n self.$el.trigger('piechart:select', {\n index,\n dataset: datasets[index]\n });\n self.emit('local::select pieChartSelect', self, index, datasets[index]);\n }\n showTooltip(e) {\n const newIndex = parseInt(e.target.getAttribute('data-index'), 10);\n this.setCurrentIndex(newIndex);\n this.$svgEl.find('path').removeClass('pie-chart-hidden').forEach((el, index) => {\n if (index !== this.currentIndex) $(el).addClass('pie-chart-hidden');\n });\n this.setTooltip();\n }\n hideTooltip() {\n this.setCurrentIndex(null);\n this.$svgEl.find('path').removeClass('pie-chart-hidden');\n this.setTooltip();\n }\n init() {\n const self = this;\n const $svgEl = $(self.render()).eq(0);\n $svgEl.f7PieChart = self;\n extend(self, {\n $svgEl,\n svgEl: $svgEl && $svgEl[0]\n });\n self.$el.append($svgEl);\n self.$el.on('click mouseenter', 'path', self.showTooltip, true);\n self.$el.on('mouseleave', 'path', self.hideTooltip, true);\n return self;\n }\n destroy() {\n const self = this;\n if (!self.$el || self.destroyed) return;\n self.$el.trigger('piechart:beforedestroy');\n self.emit('local::beforeDestroy pieChartBeforeDestroy', self);\n self.$el.off('click mouseenter', 'path', self.showTooltip, true);\n self.$el.off('mouseleave', 'path', self.hideTooltip, true);\n self.$svgEl.remove();\n if (self.f7Tooltip && self.f7Tooltip.destroy) {\n self.f7Tooltip.destroy();\n }\n delete self.$el[0].f7PieChart;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default PieChart;", "import $ from '../../shared/dom7.js';\nimport PieChart from './pie-chart-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'pieChart',\n params: {\n pieChart: {\n el: null,\n datasets: [],\n size: 320,\n tooltip: false,\n formatTooltip: null\n }\n },\n create() {\n const app = this;\n app.pieChart = ConstructorMethods({\n defaultSelector: '.pie-chart',\n constructor: PieChart,\n app,\n domProp: 'f7PieChart'\n });\n app.pieChart.update = function update(el, newParams) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const pieChart = app.pieChart.get(el);\n if (!pieChart) return undefined;\n pieChart.update(newParams);\n return pieChart;\n };\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass AreaChart extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n const defaults = extend({}, app.params.areaChart);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const {\n el\n } = self.params;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7AreaChart) return $el[0].f7AreaChart;\n extend(self, {\n app,\n $el,\n el: $el && $el[0],\n currentIndex: null,\n hiddenDatasets: [],\n f7Tooltip: null,\n linesOffsets: null\n });\n $el[0].f7AreaChart = self;\n\n // Install Modules\n self.useModules();\n self.onMouseEnter = self.onMouseEnter.bind(self);\n self.onMouseMove = self.onMouseMove.bind(self);\n self.onMouseLeave = self.onMouseLeave.bind(self);\n self.onLegendClick = self.onLegendClick.bind(self);\n self.init();\n return self;\n }\n getVisibleLabels() {\n const {\n maxAxisLabels,\n axisLabels\n } = this.params;\n if (!maxAxisLabels || axisLabels.length <= maxAxisLabels) return axisLabels;\n const skipStep = Math.ceil(axisLabels.length / maxAxisLabels);\n const filtered = axisLabels.filter((label, index) => index % skipStep === 0);\n return filtered;\n }\n getSummValues() {\n const {\n datasets\n } = this.params;\n const {\n hiddenDatasets\n } = this;\n const summValues = [];\n datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).forEach(_ref => {\n let {\n values\n } = _ref;\n values.forEach((value, valueIndex) => {\n if (!summValues[valueIndex]) summValues[valueIndex] = 0;\n summValues[valueIndex] += value;\n });\n });\n return summValues;\n }\n getChartData() {\n const {\n datasets,\n lineChart,\n width,\n height\n } = this.params;\n const {\n hiddenDatasets\n } = this;\n const data = [];\n if (!datasets.length) {\n return data;\n }\n const lastValues = datasets[0].values.map(() => 0);\n let maxValue = 0;\n if (lineChart) {\n datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).forEach(_ref2 => {\n let {\n values\n } = _ref2;\n const datasetMaxValue = Math.max(...values);\n if (datasetMaxValue > maxValue) maxValue = datasetMaxValue;\n });\n } else {\n maxValue = Math.max(...this.getSummValues());\n }\n datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).forEach(_ref3 => {\n let {\n label,\n values,\n color\n } = _ref3;\n const points = values.map((originalValue, valueIndex) => {\n lastValues[valueIndex] += originalValue;\n const value = lineChart ? originalValue : lastValues[valueIndex];\n const x = valueIndex / (values.length - 1) * width;\n const y = height - value / maxValue * height;\n if (lineChart) {\n return `${valueIndex === 0 ? 'M' : 'L'}${x},${y}`;\n }\n return `${x} ${y}`;\n });\n if (!lineChart) {\n points.push(`${width} ${height} 0 ${height}`);\n }\n data.push({\n label,\n points: points.join(' '),\n color\n });\n });\n return data.reverse();\n }\n getVerticalLines() {\n const {\n datasets,\n width\n } = this.params;\n const lines = [];\n if (!datasets.length) {\n return lines;\n }\n const values = datasets[0].values;\n values.forEach((value, valueIndex) => {\n const x = valueIndex / (values.length - 1) * width;\n lines.push(x);\n });\n return lines;\n }\n toggleDataset(index) {\n const {\n hiddenDatasets,\n params: {\n toggleDatasets\n }\n } = this;\n if (!toggleDatasets) return;\n if (hiddenDatasets.includes(index)) {\n hiddenDatasets.splice(hiddenDatasets.indexOf(index), 1);\n } else {\n hiddenDatasets.push(index);\n }\n if (this.$legendEl) {\n this.$legendEl.find('.area-chart-legend-item').removeClass('area-chart-legend-item-hidden');\n hiddenDatasets.forEach(i => {\n this.$legendEl.find(`.area-chart-legend-item[data-index=\"${i}\"]`).addClass('area-chart-legend-item-hidden');\n });\n }\n this.update({}, true);\n }\n formatAxisLabel(label) {\n const {\n formatAxisLabel\n } = this.params;\n if (formatAxisLabel) return formatAxisLabel.call(this, label);\n return label;\n }\n formatLegendLabel(label) {\n const {\n formatLegendLabel\n } = this.params;\n if (formatLegendLabel) return formatLegendLabel.call(this, label);\n return label;\n }\n calcLinesOffsets() {\n const lines = this.svgEl.querySelectorAll('line');\n this.linesOffsets = [];\n for (let i = 0; i < lines.length; i += 1) {\n this.linesOffsets.push(lines[i].getBoundingClientRect().left);\n }\n }\n formatTooltip() {\n const self = this;\n const {\n currentIndex,\n hiddenDatasets,\n params: {\n datasets,\n axisLabels,\n formatTooltip,\n formatTooltipTotal,\n formatTooltipAxisLabel,\n formatTooltipDataset\n }\n } = self;\n if (currentIndex === null) return '';\n let total = 0;\n const currentValues = datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).map(dataset => ({\n color: dataset.color,\n label: dataset.label,\n value: dataset.values[currentIndex]\n }));\n currentValues.forEach(dataset => {\n total += dataset.value;\n });\n if (formatTooltip) {\n return formatTooltip({\n index: currentIndex,\n total,\n datasets: currentValues\n });\n }\n let labelText = formatTooltipAxisLabel ? formatTooltipAxisLabel.call(self, axisLabels[currentIndex]) : this.formatAxisLabel(axisLabels[currentIndex]);\n if (!labelText) labelText = '';\n const totalText = formatTooltipTotal ? formatTooltipTotal.call(self, total) : total;\n // prettier-ignore\n const datasetsText = currentValues.length > 0 ? `\n ` : '';\n // prettier-ignore\n return `\n ${labelText}
\n ${totalText}
\n ${datasetsText}\n `;\n }\n setTooltip() {\n const self = this;\n const {\n app,\n el,\n svgEl,\n hiddenDatasets,\n currentIndex,\n params: {\n tooltip,\n datasets\n }\n } = self;\n if (!tooltip) return;\n const hasVisibleDataSets = datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).length > 0;\n if (!hasVisibleDataSets) {\n if (self.f7Tooltip && self.f7Tooltip.hide) self.f7Tooltip.hide();\n return;\n }\n if (currentIndex !== null && !self.f7Tooltip) {\n self.f7Tooltip = app.tooltip.create({\n trigger: 'manual',\n containerEl: el,\n targetEl: svgEl.querySelector(`line[data-index=\"${currentIndex}\"]`),\n text: self.formatTooltip(),\n cssClass: 'area-chart-tooltip'\n });\n if (self.f7Tooltip && self.f7Tooltip.show) {\n self.f7Tooltip.show();\n }\n return;\n }\n if (!self.f7Tooltip || !self.f7Tooltip.hide || !self.f7Tooltip.show) {\n return;\n }\n if (currentIndex !== null) {\n self.f7Tooltip.setText(self.formatTooltip());\n self.f7Tooltip.setTargetEl(svgEl.querySelector(`line[data-index=\"${currentIndex}\"]`));\n self.f7Tooltip.show();\n } else {\n self.f7Tooltip.hide();\n }\n }\n setCurrentIndex(index) {\n if (index === this.currentIndex) return;\n this.currentIndex = index;\n this.$el.trigger('areachart:select', {\n index\n });\n this.emit('local::select areaChartSelect', this, index);\n this.$svgEl.find('line').removeClass('area-chart-current-line');\n this.$svgEl.find(`line[data-index=\"${index}\"]`).addClass('area-chart-current-line');\n this.setTooltip();\n }\n onLegendClick(e) {\n const index = parseInt($(e.target).closest('.area-chart-legend-item').attr('data-index'), 10);\n this.toggleDataset(index);\n }\n onMouseEnter() {\n this.calcLinesOffsets();\n }\n onMouseMove(e) {\n const self = this;\n if (!self.linesOffsets) {\n self.calcLinesOffsets();\n }\n let currentLeft = e.pageX;\n if (typeof currentLeft === 'undefined') currentLeft = 0;\n const distances = self.linesOffsets.map(left => Math.abs(currentLeft - left));\n const minDistance = Math.min(...distances);\n const closestIndex = distances.indexOf(minDistance);\n self.setCurrentIndex(closestIndex);\n }\n onMouseLeave() {\n this.setCurrentIndex(null);\n }\n attachEvents() {\n const {\n svgEl,\n $el\n } = this;\n if (!svgEl) return;\n svgEl.addEventListener('mouseenter', this.onMouseEnter);\n svgEl.addEventListener('mousemove', this.onMouseMove);\n svgEl.addEventListener('mouseleave', this.onMouseLeave);\n $el.on('click', '.area-chart-legend-item', this.onLegendClick);\n }\n detachEvents() {\n const {\n svgEl,\n $el\n } = this;\n if (!svgEl) return;\n svgEl.removeEventListener('mouseenter', this.onMouseEnter);\n svgEl.removeEventListener('mousemove', this.onMouseMove);\n svgEl.removeEventListener('mouseleave', this.onMouseLeave);\n $el.off('click', '.area-chart-legend-item', this.onLegendClick);\n }\n render() {\n const self = this;\n const {\n lineChart,\n toggleDatasets,\n width,\n height,\n axis,\n axisLabels,\n legend,\n datasets\n } = self.params;\n const chartData = self.getChartData();\n const verticalLines = self.getVerticalLines();\n const visibleLegends = self.getVisibleLabels();\n const LegendItemTag = toggleDatasets ? 'button' : 'span';\n return $jsx(\"div\", null, $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: width,\n height: height,\n viewBox: `0 0 ${width} ${height}`,\n preserveAspectRatio: \"none\"\n }, chartData.map(data => lineChart ? $jsx(\"path\", {\n stroke: data.color,\n \"fill-rule\": \"evenodd\",\n d: data.points\n }) : $jsx(\"polygon\", {\n fill: data.color,\n \"fill-rule\": \"evenodd\",\n points: data.points\n })), verticalLines.map((line, index) => $jsx(\"line\", {\n \"data-index\": index,\n fill: \"#000\",\n x1: line,\n y1: 0,\n x2: line,\n y2: height\n }))), axis && $jsx(\"div\", {\n class: \"area-chart-axis\"\n }, axisLabels.map(label => $jsx(\"span\", null, visibleLegends.includes(label) && $jsx(\"span\", null, self.formatAxisLabel(label))))), legend && $jsx(\"div\", {\n class: \"area-chart-legend\"\n }, datasets.map((dataset, index) => $jsx(LegendItemTag, {\n \"data-index\": index,\n class: `area-chart-legend-item ${toggleDatasets ? 'area-chart-legend-button' : ''}`,\n _type: toggleDatasets ? 'button' : undefined\n }, $jsx(\"span\", {\n style: `background-color: ${dataset.color}`\n }), self.formatLegendLabel(dataset.label)))));\n }\n update(newParams, onlySvg) {\n if (newParams === void 0) {\n newParams = {};\n }\n if (onlySvg === void 0) {\n onlySvg = false;\n }\n const self = this;\n const {\n params\n } = self;\n Object.keys(newParams).forEach(param => {\n if (typeof newParams[param] !== 'undefined') {\n params[param] = newParams[param];\n }\n });\n if (self.$svgEl.length === 0) return self;\n self.detachEvents();\n self.$svgEl.remove();\n if (!onlySvg) {\n self.$axisEl.remove();\n self.$legendEl.remove();\n }\n const $rendered = $(self.render());\n const $svgEl = $rendered.find('svg');\n extend(self, {\n svgEl: $svgEl && $svgEl[0],\n $svgEl\n });\n if (!onlySvg) {\n const $axisEl = $rendered.find('.area-chart-axis');\n const $legendEl = $rendered.find('.area-chart-legend');\n extend(self, {\n $axisEl,\n $legendEl\n });\n self.$el.append($axisEl);\n self.$el.append($legendEl);\n }\n self.$el.prepend($svgEl);\n self.attachEvents();\n return self;\n }\n init() {\n const self = this;\n const $rendered = $(self.render());\n const $svgEl = $rendered.find('svg');\n const $axisEl = $rendered.find('.area-chart-axis');\n const $legendEl = $rendered.find('.area-chart-legend');\n extend(self, {\n svgEl: $svgEl && $svgEl[0],\n $svgEl,\n $axisEl,\n $legendEl\n });\n self.$el.append($svgEl);\n self.$el.append($axisEl);\n self.$el.append($legendEl);\n self.attachEvents();\n return self;\n }\n destroy() {\n const self = this;\n if (!self.$el || self.destroyed) return;\n self.$el.trigger('piechart:beforedestroy');\n self.emit('local::beforeDestroy areaChartBeforeDestroy', self);\n self.detachEvents();\n self.$svgEl.remove();\n self.$axisEl.remove();\n self.$legendEl.remove();\n if (self.f7Tooltip && self.f7Tooltip.destroy) {\n self.f7Tooltip.destroy();\n }\n delete self.$el[0].f7AreaChart;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default AreaChart;", "import $ from '../../shared/dom7.js';\nimport AreaChart from './area-chart-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'areaChart',\n params: {\n areaChart: {\n el: null,\n lineChart: false,\n datasets: [],\n axis: false,\n axisLabels: [],\n tooltip: false,\n legend: false,\n toggleDatasets: false,\n width: 640,\n height: 320,\n maxAxisLabels: 8,\n formatAxisLabel: null,\n formatLegendLabel: null,\n formatTooltip: null,\n formatTooltipAxisLabel: null,\n formatTooltipTotal: null,\n formatTooltipDataset: null\n }\n },\n create() {\n const app = this;\n app.areaChart = ConstructorMethods({\n defaultSelector: '.area-chart',\n constructor: AreaChart,\n app,\n domProp: 'f7AreaChart'\n });\n app.areaChart.update = function update(el, newParams) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const areaChart = app.areaChart.get(el);\n if (!areaChart) return undefined;\n areaChart.update(newParams);\n return areaChart;\n };\n }\n};", "import { bindMethods } from '../../shared/utils.js';\nconst Breadcrumbs = {};\nexport default {\n name: 'breadrumbs',\n create() {\n const app = this;\n bindMethods(app, {\n breadrumbs: Breadcrumbs\n });\n }\n};", "export default {\n name: 'typography'\n};", "/**\n * Framework7 8.3.2\n * Full featured mobile HTML framework for building iOS & Android apps\n * https://framework7.io/\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 27, 2024\n */\n\nimport $ from './shared/dom7.js';\nimport Framework7 from './components/app/app-class.js';\nimport * as utils from './shared/utils.js';\nimport { getSupport } from './shared/get-support.js';\nimport { getDevice } from './shared/get-device.js';\nimport DeviceModule from './modules/device/device.js';\nimport SupportModule from './modules/support/support.js';\nimport UtilsModule from './modules/utils/utils.js';\nimport ResizeModule from './modules/resize/resize.js';\nimport TouchModule from './modules/touch/touch.js';\nimport ClicksModule from './modules/clicks/clicks.js';\nimport RouterModule from './modules/router/router.js';\nimport RouterComponentLoaderModule from './modules/router/component-loader.js';\nimport ComponentModule, { Component, $jsx } from './modules/component/component.js';\nimport HistoryModule from './modules/history/history.js';\nimport ServiceWorkerModule from './modules/service-worker/service-worker.js';\nimport StoreModule, { createStore } from './modules/store/store.js';\nimport Statusbar from './components/statusbar/statusbar.js';\nimport View from './components/view/view.js';\nimport Navbar from './components/navbar/navbar.js';\nimport Toolbar from './components/toolbar/toolbar.js';\nimport Subnavbar from './components/subnavbar/subnavbar.js';\nimport TouchRipple from './components/touch-ripple/touch-ripple.js';\nimport Modal from './components/modal/modal.js';\nimport Router from './modules/router/router-class.js';\nimport Dialog from './components/dialog/dialog.js';\nimport Popup from './components/popup/popup.js';\nimport LoginScreen from './components/login-screen/login-screen.js';\nimport Popover from './components/popover/popover.js';\nimport Actions from './components/actions/actions.js';\nimport Sheet from './components/sheet/sheet.js';\nimport Toast from './components/toast/toast.js';\nimport Preloader from './components/preloader/preloader.js';\nimport Progressbar from './components/progressbar/progressbar.js';\nimport Sortable from './components/sortable/sortable.js';\nimport Swipeout from './components/swipeout/swipeout.js';\nimport Accordion from './components/accordion/accordion.js';\nimport ContactsList from './components/contacts-list/contacts-list.js';\nimport VirtualList from './components/virtual-list/virtual-list.js';\nimport ListIndex from './components/list-index/list-index.js';\nimport Timeline from './components/timeline/timeline.js';\nimport Tabs from './components/tabs/tabs.js';\nimport Panel from './components/panel/panel.js';\nimport Card from './components/card/card.js';\nimport Chip from './components/chip/chip.js';\nimport Form from './components/form/form.js';\nimport Input from './components/input/input.js';\nimport Checkbox from './components/checkbox/checkbox.js';\nimport Radio from './components/radio/radio.js';\nimport Toggle from './components/toggle/toggle.js';\nimport Range from './components/range/range.js';\nimport Stepper from './components/stepper/stepper.js';\nimport SmartSelect from './components/smart-select/smart-select.js';\nimport Grid from './components/grid/grid.js';\nimport Calendar from './components/calendar/calendar.js';\nimport Picker from './components/picker/picker.js';\nimport InfiniteScroll from './components/infinite-scroll/infinite-scroll.js';\nimport PullToRefresh from './components/pull-to-refresh/pull-to-refresh.js';\nimport DataTable from './components/data-table/data-table.js';\nimport Fab from './components/fab/fab.js';\nimport Searchbar from './components/searchbar/searchbar.js';\nimport Messages from './components/messages/messages.js';\nimport Messagebar from './components/messagebar/messagebar.js';\nimport Swiper from './components/swiper/swiper.js';\nimport PhotoBrowser from './components/photo-browser/photo-browser.js';\nimport Notification from './components/notification/notification.js';\nimport Autocomplete from './components/autocomplete/autocomplete.js';\nimport Tooltip from './components/tooltip/tooltip.js';\nimport Gauge from './components/gauge/gauge.js';\nimport Skeleton from './components/skeleton/skeleton.js';\nimport ColorPicker from './components/color-picker/color-picker.js';\nimport Treeview from './components/treeview/treeview.js';\nimport TextEditor from './components/text-editor/text-editor.js';\nimport PieChart from './components/pie-chart/pie-chart.js';\nimport AreaChart from './components/area-chart/area-chart.js';\nimport Breadcrumbs from './components/breadcrumbs/breadcrumbs.js';\nimport Typography from './components/typography/typography.js';\nRouter.use([RouterComponentLoaderModule]);\nFramework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar, View, Navbar, Toolbar, Subnavbar, TouchRipple, Modal, Dialog, Popup, LoginScreen, Popover, Actions, Sheet, Toast, Preloader, Progressbar, Sortable, Swipeout, Accordion, ContactsList, VirtualList, ListIndex, Timeline, Tabs, Panel, Card, Chip, Form, Input, Checkbox, Radio, Toggle, Range, Stepper, SmartSelect, Grid, Calendar, Picker, InfiniteScroll, PullToRefresh, DataTable, Fab, Searchbar, Messages, Messagebar, Swiper, PhotoBrowser, Notification, Autocomplete, Tooltip, Gauge, Skeleton, ColorPicker, Treeview, TextEditor, PieChart, AreaChart, Breadcrumbs, Typography]);\nexport { Component, $jsx, $ as Dom7, utils, getDevice, getSupport, createStore };\nexport default Framework7;\n", "/**\n * Framework7 8.3.2\n * Full featured mobile HTML framework for building iOS & Android apps\n * https://framework7.io/\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 27, 2024\n */\n\nimport $ from './shared/dom7.js';\nimport Framework7 from './components/app/app-class.js';\nimport * as utils from './shared/utils.js';\nimport { getSupport } from './shared/get-support.js';\nimport { getDevice } from './shared/get-device.js';\nimport DeviceModule from './modules/device/device.js';\nimport SupportModule from './modules/support/support.js';\nimport UtilsModule from './modules/utils/utils.js';\nimport ResizeModule from './modules/resize/resize.js';\nimport TouchModule from './modules/touch/touch.js';\nimport ClicksModule from './modules/clicks/clicks.js';\nimport RouterModule from './modules/router/router.js';\nimport RouterComponentLoaderModule from './modules/router/component-loader.js';\nimport ComponentModule, { Component, $jsx } from './modules/component/component.js';\nimport HistoryModule from './modules/history/history.js';\nimport ServiceWorkerModule from './modules/service-worker/service-worker.js';\nimport StoreModule, { createStore } from './modules/store/store.js';\nimport Statusbar from './components/statusbar/statusbar.js';\nimport View from './components/view/view.js';\nimport Navbar from './components/navbar/navbar.js';\nimport Toolbar from './components/toolbar/toolbar.js';\nimport Subnavbar from './components/subnavbar/subnavbar.js';\nimport TouchRipple from './components/touch-ripple/touch-ripple.js';\nimport Modal from './components/modal/modal.js';\nimport Router from './modules/router/router-class.js';\nRouter.use([RouterComponentLoaderModule]);\nFramework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar, View, Navbar, Toolbar, Subnavbar, TouchRipple, Modal]);\nexport { Component, $jsx, $ as Dom7, utils, getDevice, getSupport, createStore };\nexport default Framework7;\n", "import { createStore } from 'framework7';\n\nexport const setConfig = () => {\n // collect all data elements stored in body\n let config = $(document).find(\"script[data-for='app']\");\n config = JSON.parse(config.html());\n\n // always erase existing root value just in case the user changes the root.\n // This may be harmful\n config.el = \"#app\";\n\n // check if the app is intended to be a PWA\n let isPWA = $('body').attr('data-pwa') === \"true\";\n\n if (isPWA) {\n config.serviceWorker = {\n path: window.location.pathname + \"service-worker.js\",\n scope: window.location.pathname\n };\n }\n\n // Widgets cache\n config.store = createStore({\n state: {\n // any other widget type to cache ...\n popovers: [],\n tooltips: [],\n actions: []\n },\n actions: {\n //toggleDarkTheme: function() {\n // let self = this;\n // let $html = self.$(\"html\");\n // $html.toggleClass(\"theme-dark\");\n //}\n }\n });\n\n return config;\n};\n", " \n// Style for touch plugin\nconst setTouchStyle = (config) => {\n // TO DO: check whether we still need this ...\n if (config.hasOwnProperty(\"touch\")) {\n if (config.touch.tapHold) {\n $(\"')[0];\n }\n if (componentString.indexOf('')[0];\n }\n\n // Parse Script\n let scriptContent;\n if (componentString.indexOf('')[0].trim();\n } else {\n scriptContent = 'return () => {return $render}';\n }\n if (!scriptContent || !scriptContent.trim()) scriptContent = 'return () => {return $render}';\n\n // Parse Template\n if (template) {\n scriptContent = scriptContent.replace('$render', `function ($$ctx) {\n var $ = $$ctx.$$;\n var $h = $$ctx.$h;\n var $root = $$ctx.$root;\n var $f7 = $$ctx.$f7;\n var $f7route = $$ctx.$f7route;\n var $f7router = $$ctx.$f7router;\n var $theme = $$ctx.$theme;\n var $update = $$ctx.$update;\n var $store = $$ctx.$store;\n var $ref = $$ctx.$ref;\n var $useState = $$ctx.$useState;\n\n return $h\\`${template}\\`\n }\n `).replace(/export default/g, 'return');\n }\n\n // Execute Script\n scriptContent = `window.${callbackCreateName} = function () {${scriptContent}}`;\n\n // Insert Script El\n const scriptEl = document.createElement('script');\n scriptEl.innerHTML = scriptContent;\n $('head').append(scriptEl);\n const component = window[callbackCreateName]();\n\n // Remove Script El\n $(scriptEl).remove();\n window[callbackCreateName] = null;\n delete window[callbackCreateName];\n\n // Assign Style\n if (style) {\n component.style = style;\n }\n\n // Component ID\n component.id = componentId;\n return component;\n}\nexport default parseComponent;", "import Component from './component-class.js';\nimport parseComponent from './parse-component.js';\nimport customComponents from './custom-components.js';\nimport $jsx from './$jsx.js';\nfunction registerComponent(tagName, component) {\n customComponents[tagName] = component;\n}\nfunction unregisterComponent(tagName) {\n delete customComponents[tagName];\n}\nexport { Component, $jsx };\nexport default {\n name: 'component',\n static: {\n Component,\n parseComponent,\n registerComponent,\n unregisterComponent\n },\n create() {\n const app = this;\n app.component = {\n registerComponent,\n unregisterComponent,\n parse(componentString) {\n return parseComponent(componentString);\n },\n create(component, props, _ref) {\n let {\n root,\n el,\n context,\n children\n } = _ref;\n return new Component(app, component, props, {\n root,\n el,\n context,\n children\n });\n }\n };\n }\n};", "import History from '../../shared/history.js';\nexport default {\n name: 'history',\n static: {\n history: History\n },\n on: {\n init() {\n History.init(this);\n }\n }\n};", "import { getWindow } from 'ssr-window';\nimport { extend } from '../../shared/utils.js';\nconst SW = {\n registrations: [],\n register(path, scope) {\n const app = this;\n const window = getWindow();\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n return new Promise((resolve, reject) => {\n app.serviceWorker.container.register(path, scope ? {\n scope\n } : {}).then(reg => {\n SW.registrations.push(reg);\n app.emit('serviceWorkerRegisterSuccess', reg);\n resolve(reg);\n }).catch(error => {\n app.emit('serviceWorkerRegisterError', error);\n reject(error);\n });\n });\n },\n unregister(registration) {\n const app = this;\n const window = getWindow();\n if (!('serviceWorker' in window.navigator) || !app.serviceWorker.container) {\n return new Promise((resolve, reject) => {\n reject(new Error('Service worker is not supported'));\n });\n }\n let registrations;\n if (!registration) registrations = SW.registrations;else if (Array.isArray(registration)) registrations = registration;else registrations = [registration];\n return Promise.all(registrations.map(reg => new Promise((resolve, reject) => {\n reg.unregister().then(() => {\n if (SW.registrations.indexOf(reg) >= 0) {\n SW.registrations.splice(SW.registrations.indexOf(reg), 1);\n }\n app.emit('serviceWorkerUnregisterSuccess', reg);\n resolve();\n }).catch(error => {\n app.emit('serviceWorkerUnregisterError', reg, error);\n reject(error);\n });\n })));\n }\n};\nexport default {\n name: 'sw',\n params: {\n serviceWorker: {\n path: undefined,\n scope: undefined\n }\n },\n create() {\n const app = this;\n const window = getWindow();\n extend(app, {\n serviceWorker: {\n container: 'serviceWorker' in window.navigator ? window.navigator.serviceWorker : undefined,\n registrations: SW.registrations,\n register: SW.register.bind(app),\n unregister: SW.unregister.bind(app)\n }\n });\n },\n on: {\n init() {\n const window = getWindow();\n if (!('serviceWorker' in window.navigator)) return;\n const app = this;\n if (app.device.cordova || window.Capacitor && window.Capacitor.isNative) return;\n if (!app.serviceWorker.container) return;\n const paths = app.params.serviceWorker.path;\n const scope = app.params.serviceWorker.scope;\n if (!paths || Array.isArray(paths) && !paths.length) return;\n const toRegister = Array.isArray(paths) ? paths : [paths];\n toRegister.forEach(path => {\n app.serviceWorker.register(path, scope);\n });\n }\n }\n};", "/* eslint-disable no-underscore-dangle */\nimport { extend } from '../../shared/utils.js';\nfunction createStore(storeParams) {\n if (storeParams === void 0) {\n storeParams = {};\n }\n const store = {\n __store: true\n };\n const originalState = {\n ...(storeParams.state || {})\n };\n const actions = {\n ...(storeParams.actions || {})\n };\n const getters = {\n ...(storeParams.getters || {})\n };\n const state = extend({}, originalState);\n let propsQueue = [];\n const gettersDependencies = {};\n const gettersCallbacks = {};\n Object.keys(getters).forEach(getterKey => {\n gettersDependencies[getterKey] = [];\n gettersCallbacks[getterKey] = [];\n });\n const getGetterValue = getterKey => {\n return getters[getterKey]({\n state: store.state\n });\n };\n const addGetterDependencies = (getterKey, deps) => {\n if (!gettersDependencies[getterKey]) gettersDependencies[getterKey] = [];\n deps.forEach(dep => {\n if (gettersDependencies[getterKey].indexOf(dep) < 0) {\n gettersDependencies[getterKey].push(dep);\n }\n });\n };\n const addGetterCallback = (getterKey, callback) => {\n if (!gettersCallbacks[getterKey]) gettersCallbacks[getterKey] = [];\n gettersCallbacks[getterKey].push(callback);\n };\n const runGetterCallbacks = stateKey => {\n const keys = Object.keys(gettersDependencies).filter(getterKey => {\n return gettersDependencies[getterKey].indexOf(stateKey) >= 0;\n });\n keys.forEach(getterKey => {\n if (!gettersCallbacks[getterKey] || !gettersCallbacks[getterKey].length) return;\n gettersCallbacks[getterKey].forEach(callback => {\n callback(getGetterValue(getterKey));\n });\n });\n };\n const removeGetterCallback = callback => {\n Object.keys(gettersCallbacks).forEach(stateKey => {\n const callbacks = gettersCallbacks[stateKey];\n if (callbacks.indexOf(callback) >= 0) {\n callbacks.splice(callbacks.indexOf(callback), 1);\n }\n });\n };\n\n // eslint-disable-next-line\n store.__removeCallback = callback => {\n removeGetterCallback(callback);\n };\n const getterValue = function (getterKey, addCallback) {\n if (addCallback === void 0) {\n addCallback = true;\n }\n if (getterKey === 'constructor') return undefined;\n propsQueue = [];\n const value = getGetterValue(getterKey);\n addGetterDependencies(getterKey, propsQueue);\n const onUpdated = callback => {\n addGetterCallback(getterKey, callback);\n };\n const obj = {\n value,\n onUpdated\n };\n if (!addCallback) {\n return obj;\n }\n const callback = v => {\n obj.value = v;\n };\n obj.__callback = callback;\n addGetterCallback(getterKey, callback);\n // eslint-disable-next-line\n return obj;\n };\n store.state = new Proxy(state, {\n set: (target, prop, value) => {\n target[prop] = value;\n runGetterCallbacks(prop);\n return true;\n },\n get: (target, prop) => {\n propsQueue.push(prop);\n return target[prop];\n }\n });\n store.getters = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, true);\n }\n });\n store._gettersPlain = new Proxy(getters, {\n set: () => false,\n get: (target, prop) => {\n if (!target[prop]) {\n return undefined;\n }\n return getterValue(prop, false);\n }\n });\n store.dispatch = (actionName, data) => {\n return new Promise((resolve, reject) => {\n if (!actions[actionName]) {\n reject();\n throw new Error(`Framework7: Store action \"${actionName}\" is not found`);\n }\n const result = actions[actionName]({\n state: store.state,\n dispatch: store.dispatch\n }, data);\n resolve(result);\n });\n };\n return store;\n}\nexport default createStore;", "import createStore from './create-store.js';\nexport { createStore };\nexport default {\n name: 'store',\n static: {\n createStore\n },\n proto: {\n createStore\n }\n};", "import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nconst isCapacitor = () => {\n const window = getWindow();\n return window.Capacitor && window.Capacitor.isNative && window.Capacitor.Plugins && window.Capacitor.Plugins.StatusBar;\n};\nconst Statusbar = {\n hide() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.hide();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.hide();\n }\n },\n show() {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.show();\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.show();\n }\n },\n onClick() {\n const app = this;\n let pageContent;\n if ($('.popup.modal-in').length > 0) {\n // Check for opened popup\n pageContent = $('.popup.modal-in').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else if ($('.panel.panel-in').length > 0) {\n // Check for opened panel\n pageContent = $('.panel.panel-in').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else if ($('.views > .view.tab-active').length > 0) {\n // View in tab bar app layout\n pageContent = $('.views > .view.tab-active').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else if ($('.views').length > 0) {\n pageContent = $('.views').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n } else {\n pageContent = app.$el.children('.view').find('.page:not(.page-previous):not(.page-next):not(.cached)').find('.page-content');\n }\n if (pageContent && pageContent.length > 0) {\n // Check for tab\n if (pageContent.hasClass('tab')) {\n pageContent = pageContent.parent('.tabs').children('.page-content.tab-active');\n }\n if (pageContent.length > 0) pageContent.scrollTop(0, 300);\n }\n },\n setTextColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n if (color === 'white') {\n window.StatusBar.styleLightContent();\n } else {\n window.StatusBar.styleDefault();\n }\n }\n if (isCapacitor()) {\n if (color === 'white') {\n window.Capacitor.Plugins.StatusBar.setStyle({\n style: 'DARK'\n });\n } else {\n window.Capacitor.Plugins.StatusBar.setStyle({\n style: 'LIGHT'\n });\n }\n }\n },\n setBackgroundColor(color) {\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.backgroundColorByHexString(color);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setBackgroundColor({\n color\n });\n }\n },\n isVisible() {\n const window = getWindow();\n const device = getDevice();\n return new Promise(resolve => {\n if (device.cordova && window.StatusBar) {\n resolve(window.StatusBar.isVisible);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.getInfo().then(info => {\n resolve(info.visible);\n });\n }\n resolve(false);\n });\n },\n overlaysWebView(overlays) {\n if (overlays === void 0) {\n overlays = true;\n }\n const window = getWindow();\n const device = getDevice();\n if (device.cordova && window.StatusBar) {\n window.StatusBar.overlaysWebView(overlays);\n }\n if (isCapacitor()) {\n window.Capacitor.Plugins.StatusBar.setOverlaysWebView({\n overlay: overlays\n });\n }\n },\n init() {\n const app = this;\n const window = getWindow();\n const device = getDevice();\n const params = app.params.statusbar;\n if (!params.enabled) return;\n const isCordova = device.cordova && window.StatusBar;\n const isCap = isCapacitor();\n if (isCordova || isCap) {\n if (params.scrollTopOnClick) {\n $(window).on('statusTap', Statusbar.onClick.bind(app));\n }\n if (device.ios) {\n if (params.iosOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.iosTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n if (device.android) {\n if (params.androidOverlaysWebView) {\n Statusbar.overlaysWebView(true);\n } else {\n Statusbar.overlaysWebView(false);\n }\n if (params.androidTextColor === 'white') {\n Statusbar.setTextColor('white');\n } else {\n Statusbar.setTextColor('black');\n }\n }\n }\n if (params.iosBackgroundColor && device.ios) {\n Statusbar.setBackgroundColor(params.iosBackgroundColor);\n }\n if (params.androidBackgroundColor && device.android) {\n Statusbar.setBackgroundColor(params.androidBackgroundColor);\n }\n }\n};\nexport default {\n name: 'statusbar',\n params: {\n statusbar: {\n enabled: true,\n scrollTopOnClick: true,\n iosOverlaysWebView: true,\n iosTextColor: 'black',\n iosBackgroundColor: null,\n androidOverlaysWebView: false,\n androidTextColor: 'black',\n androidBackgroundColor: null\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n statusbar: Statusbar\n });\n },\n on: {\n init() {\n const app = this;\n Statusbar.init.call(app);\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport View from './view-class.js';\nfunction getCurrentView(app) {\n const $popoverView = $('.popover.modal-in .view');\n const $popupView = $('.popup.modal-in .view');\n const $panelView = $('.panel.panel-in .view');\n let $viewsEl = $('.views');\n if ($viewsEl.length === 0) $viewsEl = app.$el;\n // Find active view as tab\n let $viewEl = $viewsEl.children('.view');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view');\n }\n // Propably in tabs or split view\n if ($viewEl.length > 1) {\n if ($viewEl.hasClass('tab')) {\n // Tabs\n $viewEl = $viewsEl.children('.view.tab-active');\n if ($viewEl.length === 0) {\n $viewEl = $viewsEl.children('.tabs').children('.view.tab-active');\n }\n } else {\n // Split View, leave appView intact\n }\n }\n if ($popoverView.length > 0 && $popoverView[0].f7View) return $popoverView[0].f7View;\n if ($popupView.length > 0 && $popupView[0].f7View) return $popupView[0].f7View;\n if ($panelView.length > 0 && $panelView[0].f7View) return $panelView[0].f7View;\n if ($viewEl.length > 0) {\n if ($viewEl.length === 1 && $viewEl[0].f7View) return $viewEl[0].f7View;\n if ($viewEl.length > 1) {\n return app.views.main;\n }\n }\n return undefined;\n}\nexport default {\n name: 'view',\n params: {\n view: {\n init: true,\n initRouterOnTabShow: false,\n name: undefined,\n main: false,\n router: true,\n linksView: null,\n xhrCache: true,\n xhrCacheIgnore: [],\n xhrCacheIgnoreGetParameters: false,\n xhrCacheDuration: 1000 * 60 * 10,\n // Ten minutes\n componentCache: true,\n preloadPreviousPage: true,\n allowDuplicateUrls: false,\n reloadPages: false,\n reloadDetail: false,\n masterDetailBreakpoint: 0,\n masterDetailResizable: false,\n removeElements: true,\n removeElementsWithTimeout: false,\n removeElementsTimeout: 0,\n restoreScrollTopOnBack: true,\n unloadTabContent: true,\n passRouteQueryToRequest: true,\n passRouteParamsToRequest: false,\n loadInitialPage: true,\n // Swipe Back\n iosSwipeBack: true,\n iosSwipeBackAnimateShadow: true,\n iosSwipeBackAnimateOpacity: true,\n iosSwipeBackActiveArea: 30,\n iosSwipeBackThreshold: 0,\n mdSwipeBack: false,\n mdSwipeBackAnimateShadow: true,\n mdSwipeBackAnimateOpacity: false,\n mdSwipeBackActiveArea: 30,\n mdSwipeBackThreshold: 0,\n // Push State\n browserHistory: false,\n browserHistoryRoot: undefined,\n browserHistoryAnimate: true,\n browserHistoryAnimateOnLoad: false,\n browserHistorySeparator: '#!',\n browserHistoryOnLoad: true,\n browserHistoryInitialMatch: false,\n browserHistoryStoreHistory: true,\n browserHistoryTabs: 'replace',\n // Animate Pages\n animate: true,\n // iOS Dynamic Navbar\n iosDynamicNavbar: true,\n // Animate iOS Navbar Back Icon\n iosAnimateNavbarBackIcon: true,\n // Delays\n iosPageLoadDelay: 0,\n mdPageLoadDelay: 0,\n // Routes hooks\n routesBeforeEnter: null,\n routesBeforeLeave: null\n }\n },\n static: {\n View\n },\n create() {\n const app = this;\n extend(app, {\n views: extend([], {\n create(el, params) {\n return new View(app, el, params);\n },\n get(viewEl) {\n const $viewEl = $(viewEl);\n if ($viewEl.length && $viewEl[0].f7View) return $viewEl[0].f7View;\n return undefined;\n }\n })\n });\n Object.defineProperty(app.views, 'current', {\n enumerable: true,\n configurable: true,\n get() {\n return getCurrentView(app);\n }\n });\n // Alias\n app.view = app.views;\n },\n on: {\n init() {\n const app = this;\n $('.view-init').each(viewEl => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalOpen panelOpen': function onOpen(instance) {\n const app = this;\n instance.$el.find('.view-init').each(viewEl => {\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n });\n },\n 'modalBeforeDestroy panelBeforeDestroy': function onClose(instance) {\n if (!instance || !instance.$el) return;\n instance.$el.find('.view-init').each(viewEl => {\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n });\n }\n },\n vnode: {\n 'view-init': {\n insert(vnode) {\n const app = this;\n const viewEl = vnode.elm;\n if (viewEl.f7View) return;\n const viewParams = $(viewEl).dataset();\n app.views.create(viewEl, viewParams);\n },\n destroy(vnode) {\n const viewEl = vnode.elm;\n const view = viewEl.f7View;\n if (!view) return;\n view.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nconst Navbar = {\n size(el) {\n const app = this;\n let $el = $(el);\n if ($el.hasClass('navbars')) {\n $el = $el.children('.navbar').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n return;\n }\n const $innerEl = $el.children('.navbar-inner');\n if (!$innerEl.length) return;\n const needCenterTitle = $innerEl.hasClass('navbar-inner-centered-title') || app.params.navbar[`${app.theme}CenterTitle`];\n const needLeftTitle = app.theme === 'ios' && !app.params.navbar[`${app.theme}CenterTitle`];\n if (!needCenterTitle && !needLeftTitle) return;\n if ($el.parents('.tab:not(.tab-active)').length > 0 || $el.parents('.popup:not(.modal-in)').length > 0) {\n return;\n }\n if (app.theme !== 'ios' && app.params.navbar[`${app.theme}CenterTitle`]) {\n $innerEl.addClass('navbar-inner-centered-title');\n }\n if (app.theme === 'ios' && !app.params.navbar.iosCenterTitle) {\n $innerEl.addClass('navbar-inner-left-title');\n }\n const $viewEl = $el.parents('.view').eq(0);\n const left = app.rtl ? $innerEl.children('.right') : $innerEl.children('.left');\n const right = app.rtl ? $innerEl.children('.left') : $innerEl.children('.right');\n const title = $innerEl.children('.title');\n const subnavbar = $innerEl.children('.subnavbar');\n const noLeft = left.length === 0;\n const noRight = right.length === 0;\n const leftWidth = noLeft ? 0 : left.outerWidth(true);\n const rightWidth = noRight ? 0 : right.outerWidth(true);\n const titleWidth = title.outerWidth(true);\n const navbarStyles = $innerEl.styles();\n const navbarWidth = $innerEl[0].offsetWidth;\n const navbarInnerWidth = navbarWidth - parseInt(navbarStyles.paddingLeft, 10) - parseInt(navbarStyles.paddingRight, 10);\n const isPrevious = $el.hasClass('navbar-previous');\n const sliding = $innerEl.hasClass('sliding');\n let router;\n let dynamicNavbar;\n if ($viewEl.length > 0 && $viewEl[0].f7View) {\n router = $viewEl[0].f7View.router;\n dynamicNavbar = router && router.dynamicNavbar;\n }\n let currLeft;\n let diff;\n if (noRight) {\n currLeft = navbarInnerWidth - titleWidth;\n }\n if (noLeft) {\n currLeft = 0;\n }\n if (!noLeft && !noRight) {\n currLeft = (navbarInnerWidth - rightWidth - titleWidth + leftWidth) / 2;\n }\n let requiredLeft = (navbarInnerWidth - titleWidth) / 2;\n if (navbarInnerWidth - leftWidth - rightWidth > titleWidth) {\n if (requiredLeft < leftWidth) {\n requiredLeft = leftWidth;\n }\n if (requiredLeft + titleWidth > navbarInnerWidth - rightWidth) {\n requiredLeft = navbarInnerWidth - rightWidth - titleWidth;\n }\n diff = requiredLeft - currLeft;\n } else {\n diff = 0;\n }\n\n // RTL inverter\n const inverter = app.rtl ? -1 : 1;\n if (dynamicNavbar && app.theme === 'ios') {\n if (title.hasClass('sliding') || title.length > 0 && sliding) {\n let titleLeftOffset = -(currLeft + diff) * inverter;\n const titleRightOffset = (navbarInnerWidth - currLeft - diff - titleWidth) * inverter;\n if (isPrevious) {\n if (router && router.params.iosAnimateNavbarBackIcon) {\n const activeNavbarBackLink = $el.parent().find('.navbar-current').children('.left.sliding').find('.back .icon ~ span');\n if (activeNavbarBackLink.length > 0) {\n titleLeftOffset += activeNavbarBackLink[0].offsetLeft;\n }\n }\n }\n title[0].f7NavbarLeftOffset = titleLeftOffset;\n title[0].f7NavbarRightOffset = titleRightOffset;\n }\n if (!noLeft && (left.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n left[0].f7NavbarLeftOffset = -(navbarInnerWidth - left[0].offsetWidth) / 2 * inverter;\n left[0].f7NavbarRightOffset = leftWidth * inverter;\n } else {\n left[0].f7NavbarLeftOffset = -leftWidth;\n left[0].f7NavbarRightOffset = (navbarInnerWidth - left[0].offsetWidth) / 2;\n if (router && router.params.iosAnimateNavbarBackIcon && left.find('.back .icon').length > 0) {\n if (left.find('.back .icon ~ span').length) {\n const leftOffset = left[0].f7NavbarLeftOffset;\n const rightOffset = left[0].f7NavbarRightOffset;\n left[0].f7NavbarLeftOffset = 0;\n left[0].f7NavbarRightOffset = 0;\n left.find('.back .icon ~ span')[0].f7NavbarLeftOffset = leftOffset;\n left.find('.back .icon ~ span')[0].f7NavbarRightOffset = rightOffset - left.find('.back .icon')[0].offsetWidth;\n }\n }\n }\n }\n if (!noRight && (right.hasClass('sliding') || sliding)) {\n if (app.rtl) {\n right[0].f7NavbarLeftOffset = -rightWidth * inverter;\n right[0].f7NavbarRightOffset = (navbarInnerWidth - right[0].offsetWidth) / 2 * inverter;\n } else {\n right[0].f7NavbarLeftOffset = -(navbarInnerWidth - right[0].offsetWidth) / 2;\n right[0].f7NavbarRightOffset = rightWidth;\n }\n }\n if (subnavbar.length && (subnavbar.hasClass('sliding') || sliding)) {\n subnavbar[0].f7NavbarLeftOffset = app.rtl ? subnavbar[0].offsetWidth : -subnavbar[0].offsetWidth;\n subnavbar[0].f7NavbarRightOffset = -subnavbar[0].f7NavbarLeftOffset;\n }\n }\n\n // Center title\n if (needCenterTitle) {\n let titleLeft = diff;\n if (app.rtl && noLeft && noRight && title.length > 0) titleLeft = -titleLeft;\n title.css({\n left: `${titleLeft}px`\n });\n }\n },\n hide(el, animate, hideStatusbar, hideOnlyCurrent) {\n if (animate === void 0) {\n animate = true;\n }\n if (hideStatusbar === void 0) {\n hideStatusbar = false;\n }\n if (hideOnlyCurrent === void 0) {\n hideOnlyCurrent = false;\n }\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if ($el.hasClass('navbar-hidden')) return;\n let className = `navbar-hidden${animate ? ' navbar-transitioning' : ''}`;\n const currentIsLarge = isDynamic ? $el.find('.navbar-current .title-large').length : $el.find('.title-large').length;\n if (currentIsLarge) {\n className += ' navbar-large-hidden';\n }\n if (hideStatusbar) {\n className += ' navbar-hidden-statusbar';\n }\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n $el.addClass(className);\n if (isDynamic) {\n $el.children('.navbar').each(subEl => {\n $(subEl).trigger('navbar:hide');\n app.emit('navbarHide', subEl);\n });\n } else {\n $el.trigger('navbar:hide');\n app.emit('navbarHide', $el[0]);\n }\n },\n show(el, animate, hideOnlyCurrent) {\n if (el === void 0) {\n el = '.navbar-hidden';\n }\n if (animate === void 0) {\n animate = true;\n }\n if (hideOnlyCurrent === void 0) {\n hideOnlyCurrent = false;\n }\n const app = this;\n let $el = $(el);\n const isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent;\n if (isDynamic) $el = $el.parents('.navbars');\n if (!$el.length) return;\n if (!$el.hasClass('navbar-hidden')) return;\n if (animate) {\n $el.addClass('navbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('navbar-transitioning');\n });\n }\n $el.removeClass('navbar-hidden navbar-large-hidden navbar-hidden-statusbar');\n if (isDynamic) {\n $el.children('.navbar').each(subEl => {\n $(subEl).trigger('navbar:show');\n app.emit('navbarShow', subEl);\n });\n } else {\n $el.trigger('navbar:show');\n app.emit('navbarShow', $el[0]);\n }\n },\n getElByPage(page) {\n let $pageEl;\n let $navbarEl;\n let pageData;\n if (page.$navbarEl || page.$el) {\n pageData = page;\n $pageEl = page.$el;\n } else {\n $pageEl = $(page);\n if ($pageEl.length > 0) pageData = $pageEl[0].f7Page;\n }\n if (pageData && pageData.$navbarEl && pageData.$navbarEl.length > 0) {\n $navbarEl = pageData.$navbarEl;\n } else if ($pageEl) {\n $navbarEl = $pageEl.children('.navbar');\n }\n if (!$navbarEl || $navbarEl && $navbarEl.length === 0) return undefined;\n return $navbarEl[0];\n },\n getPageByEl(navbarEl) {\n const $navbarEl = $(navbarEl);\n if ($navbarEl.parents('.page').length) {\n return $navbarEl.parents('.page')[0];\n }\n let pageEl;\n $navbarEl.parents('.view').find('.page').each(el => {\n if (el && el.f7Page && el.f7Page.navbarEl && $navbarEl[0] === el.f7Page.navbarEl) {\n pageEl = el;\n }\n });\n return pageEl;\n },\n collapseLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.addClass('navbar-large-collapsed');\n $pageEl.eq(0).addClass('page-with-navbar-large-collapsed').trigger('page:navbarlargecollapsed');\n app.emit('pageNavbarLargeCollapsed', $pageEl[0]);\n $navbarEl.trigger('navbar:collapse');\n app.emit('navbarCollapse', $navbarEl[0]);\n },\n expandLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n const $pageEl = $(app.navbar.getPageByEl($navbarEl));\n $navbarEl.removeClass('navbar-large-collapsed');\n $pageEl.eq(0).removeClass('page-with-navbar-large-collapsed').trigger('page:navbarlargeexpanded');\n app.emit('pageNavbarLargeExpanded', $pageEl[0]);\n $navbarEl.trigger('navbar:expand');\n app.emit('navbarExpand', $navbarEl[0]);\n },\n toggleLargeTitle(navbarEl) {\n const app = this;\n let $navbarEl = $(navbarEl);\n if ($navbarEl.hasClass('navbars')) {\n $navbarEl = $navbarEl.find('.navbar-large');\n if ($navbarEl.length > 1) {\n $navbarEl = $(navbarEl).find('.navbar-large.navbar-current');\n }\n if ($navbarEl.length > 1 || !$navbarEl.length) {\n return;\n }\n }\n if ($navbarEl.hasClass('navbar-large-collapsed')) {\n app.navbar.expandLargeTitle($navbarEl);\n } else {\n app.navbar.collapseLargeTitle($navbarEl);\n }\n },\n initNavbarOnScroll(pageEl, navbarEl, needHide, needCollapse, needTransparent) {\n const app = this;\n const support = getSupport();\n const $pageEl = $(pageEl);\n const $navbarEl = $(navbarEl);\n const $titleLargeEl = $navbarEl.find('.title-large');\n const isLarge = $titleLargeEl.length || $navbarEl.hasClass('.navbar-large');\n let navbarHideHeight = 44;\n const snapPageScrollToLargeTitle = app.params.navbar.snapPageScrollToLargeTitle;\n const snapPageScrollToTransparentNavbar = app.params.navbar.snapPageScrollToTransparentNavbar;\n let previousScrollTop;\n let currentScrollTop;\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let navbarHidden;\n let navbarCollapsed;\n let navbarTitleLargeHeight;\n let navbarOffsetHeight;\n if (needCollapse || needHide && isLarge) {\n navbarTitleLargeHeight = $navbarEl.css('--f7-navbar-large-title-height');\n if (navbarTitleLargeHeight && navbarTitleLargeHeight.indexOf('px') >= 0) {\n navbarTitleLargeHeight = parseInt(navbarTitleLargeHeight, 10);\n if (Number.isNaN(navbarTitleLargeHeight) && $titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else if (Number.isNaN(navbarTitleLargeHeight)) {\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 88;\n }\n } else if ($titleLargeEl.length) {\n navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight;\n } else {\n // eslint-disable-next-line\n if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 88;\n }\n }\n if (needHide && isLarge) {\n navbarHideHeight += navbarTitleLargeHeight;\n }\n let scrollChanged;\n let scrollContent;\n let scrollTimeoutId;\n let touchEndTimeoutId;\n const touchSnapTimeout = 70;\n const desktopSnapTimeout = 300;\n function calcScrollableDistance() {\n $pageEl.find('.page-content').each(pageContentEl => {\n pageContentEl.f7ScrollableDistance = pageContentEl.scrollHeight - pageContentEl.offsetHeight;\n });\n }\n function snapLargeNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (currentScrollTop >= navbarTitleLargeHeight / 2 && currentScrollTop < navbarTitleLargeHeight) {\n $(scrollContent).scrollTop(navbarTitleLargeHeight, 100);\n } else if (currentScrollTop < navbarTitleLargeHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n function snapTransparentNavbar() {\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n if (!scrollContent || currentScrollTop < 0) return;\n if (currentScrollTop >= navbarOffsetHeight / 2 && currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(navbarOffsetHeight, 100);\n } else if (currentScrollTop < navbarOffsetHeight) {\n $(scrollContent).scrollTop(0, 200);\n }\n }\n function handleNavbarTransparent() {\n const isHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded || isHidden) return;\n if (!navbarOffsetHeight) {\n navbarOffsetHeight = navbarEl.offsetHeight;\n }\n let opacity = currentScrollTop / navbarOffsetHeight;\n const notTransparent = $navbarEl.hasClass('navbar-transparent-visible');\n opacity = Math.max(Math.min(opacity, 1), 0);\n if (notTransparent && opacity === 1 || !notTransparent && opacity === 0) {\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (notTransparent && opacity === 0) {\n $navbarEl.trigger('navbar:transparenthide');\n app.emit('navbarTransparentHide', $navbarEl[0]);\n $navbarEl.removeClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n if (!notTransparent && opacity === 1) {\n $navbarEl.trigger('navbar:transparentshow');\n app.emit('navbarTransparentShow', $navbarEl[0]);\n $navbarEl.addClass('navbar-transparent-visible');\n $navbarEl.find('.navbar-bg, .title').css('opacity', '');\n return;\n }\n $navbarEl.find('.navbar-bg, .title').css('opacity', opacity);\n if (snapPageScrollToTransparentNavbar) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapTransparentNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n let previousCollapseProgress = null;\n let collapseProgress = null;\n function handleLargeNavbarCollapse(pageContentEl) {\n const isHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (isHidden) return;\n const isLargeTransparent = $navbarEl.hasClass('navbar-large-transparent') || $navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-transparent');\n previousCollapseProgress = collapseProgress;\n const scrollableDistance = Math.min(navbarTitleLargeHeight, pageContentEl.f7ScrollableDistance || navbarTitleLargeHeight);\n collapseProgress = Math.min(Math.max(currentScrollTop / scrollableDistance, 0), 1);\n const previousCollapseWasInMiddle = previousCollapseProgress > 0 && previousCollapseProgress < 1;\n const inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled');\n if (inSearchbarExpanded) return;\n navbarCollapsed = $navbarEl.hasClass('navbar-large-collapsed');\n const $bgEl = $navbarEl.find('.navbar-bg');\n if (collapseProgress === 0 && navbarCollapsed) {\n app.navbar.expandLargeTitle($navbarEl[0]);\n } else if (collapseProgress === 1 && !navbarCollapsed) {\n app.navbar.collapseLargeTitle($navbarEl[0]);\n }\n if (collapseProgress === 0 && navbarCollapsed || collapseProgress === 0 && previousCollapseWasInMiddle || collapseProgress === 1 && !navbarCollapsed || collapseProgress === 1 && previousCollapseWasInMiddle) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', '');\n }\n $navbarEl.find('.title').css('opacity', '');\n $navbarEl.find('.title-large-text, .subnavbar').css('transform', '');\n $navbarEl.find('.title-large-text').css('opacity', '');\n if (isLargeTransparent) {\n $bgEl.css('opacity', '');\n }\n $bgEl.css('transform', '');\n } else if (collapseProgress > 0 && collapseProgress < 1) {\n if (app.theme === 'md') {\n $navbarEl.find('.navbar-inner').css('overflow', 'visible');\n }\n $navbarEl.find('.title').css('opacity', -0.5 + collapseProgress * 1.5);\n $navbarEl.find('.title-large-text, .subnavbar').css('transform', `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`);\n $navbarEl.find('.title-large-text').css('opacity', 1 - collapseProgress * 2);\n if (isLargeTransparent) {\n $bgEl.css('opacity', collapseProgress);\n }\n $bgEl.css('transform', `translate3d(0px, ${-1 * collapseProgress * navbarTitleLargeHeight}px, 0)`);\n }\n if (snapPageScrollToLargeTitle) {\n if (!support.touch) {\n clearTimeout(scrollTimeoutId);\n scrollTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n }, desktopSnapTimeout);\n } else if (touchEndTimeoutId) {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n snapLargeNavbar();\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }, touchSnapTimeout);\n }\n }\n }\n function handleTitleHideShow() {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n navbarHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden');\n if (reachEnd) {\n if (app.params.navbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.navbar.showOnPageScrollTop || currentScrollTop <= navbarHideHeight) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > navbarHideHeight) {\n action = 'hide';\n } else {\n action = 'show';\n }\n if (action === 'show' && navbarHidden) {\n app.navbar.show($navbarEl, true, true);\n navbarHidden = false;\n } else if (action === 'hide' && !navbarHidden) {\n app.navbar.hide($navbarEl, true, false, true);\n navbarHidden = true;\n }\n previousScrollTop = currentScrollTop;\n }\n function handleScroll(e) {\n scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollChanged = currentScrollTop;\n if (needCollapse) {\n handleLargeNavbarCollapse(scrollContent);\n } else if (needTransparent) {\n handleNavbarTransparent();\n }\n if ($pageEl.hasClass('page-previous')) return;\n if (needHide) {\n handleTitleHideShow();\n }\n }\n function handeTouchStart() {\n scrollChanged = false;\n }\n function handleTouchEnd() {\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n touchEndTimeoutId = setTimeout(() => {\n if (scrollChanged !== false) {\n if (needTransparent && !needCollapse) {\n snapTransparentNavbar();\n } else {\n snapLargeNavbar();\n }\n clearTimeout(touchEndTimeoutId);\n touchEndTimeoutId = null;\n }\n }, touchSnapTimeout);\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) {\n app.on('touchstart:passive', handeTouchStart);\n app.on('touchend:passive', handleTouchEnd);\n }\n calcScrollableDistance();\n if (needCollapse || needTransparent) {\n $pageEl.find('.page-content').each(pageContentEl => {\n if (pageContentEl.scrollTop > 0) handleScroll.call(pageContentEl);\n });\n }\n app.on('resize', calcScrollableDistance);\n $pageEl[0].f7DetachNavbarScrollHandlers = function f7DetachNavbarScrollHandlers() {\n app.off('resize', calcScrollableDistance);\n delete $pageEl[0].f7DetachNavbarScrollHandlers;\n $pageEl.off('scroll', '.page-content', handleScroll, true);\n if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) {\n app.off('touchstart:passive', handeTouchStart);\n app.off('touchend:passive', handleTouchEnd);\n }\n };\n }\n};\nexport default {\n name: 'navbar',\n create() {\n const app = this;\n bindMethods(app, {\n navbar: Navbar\n });\n },\n params: {\n navbar: {\n scrollTopOnTitleClick: true,\n iosCenterTitle: true,\n mdCenterTitle: false,\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true,\n collapseLargeTitleOnScroll: true,\n snapPageScrollToLargeTitle: true,\n snapPageScrollToTransparentNavbar: true\n }\n },\n on: {\n 'panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint': function onPanelResize() {\n const app = this;\n $('.navbar').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n },\n pageBeforeRemove(page) {\n if (page.$el[0].f7DetachNavbarScrollHandlers) {\n page.$el[0].f7DetachNavbarScrollHandlers();\n }\n },\n pageBeforeIn(page) {\n const app = this;\n if (app.theme !== 'ios') return;\n let $navbarsEl;\n const view = page.$el.parents('.view')[0].f7View;\n const navbarEl = app.navbar.getElByPage(page);\n if (!navbarEl) {\n $navbarsEl = page.$el.parents('.view').children('.navbars');\n } else {\n $navbarsEl = $(navbarEl).parents('.navbars');\n }\n if (page.$el.hasClass('no-navbar') || view.router.dynamicNavbar && !navbarEl) {\n const animate = !!(page.pageFrom && page.router.history.length > 0);\n app.navbar.hide($navbarsEl, animate);\n } else {\n app.navbar.show($navbarsEl);\n }\n },\n pageReinit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n app.navbar.size($navbarEl);\n },\n pageInit(page) {\n const app = this;\n const $navbarEl = $(app.navbar.getElByPage(page));\n if (!$navbarEl || $navbarEl.length === 0) return;\n\n // Size\n app.navbar.size($navbarEl);\n\n // Need Collapse On Scroll\n let needCollapseOnScrollHandler;\n if ($navbarEl.find('.title-large').length > 0) {\n $navbarEl.addClass('navbar-large');\n }\n if ($navbarEl.hasClass('navbar-large')) {\n if (app.params.navbar.collapseLargeTitleOnScroll) needCollapseOnScrollHandler = true;\n page.$el.addClass('page-with-navbar-large');\n }\n\n // Need transparent on scroll\n let needTransparentOnScroll;\n if (!needCollapseOnScrollHandler && $navbarEl.hasClass('navbar-transparent')) {\n needTransparentOnScroll = true;\n }\n\n // Need Hide On Scroll\n let needHideOnScrollHandler;\n if (app.params.navbar.hideOnPageScroll || page.$el.find('.hide-navbar-on-scroll').length || page.$el.hasClass('hide-navbar-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {\n if (page.$el.find('.keep-navbar-on-scroll').length || page.$el.hasClass('keep-navbar-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {\n needHideOnScrollHandler = false;\n } else {\n needHideOnScrollHandler = true;\n }\n }\n if (needCollapseOnScrollHandler || needHideOnScrollHandler || needTransparentOnScroll) {\n app.navbar.initNavbarOnScroll(page.el, $navbarEl[0], needHideOnScrollHandler, needCollapseOnScrollHandler, needTransparentOnScroll);\n }\n },\n 'panelOpen panelSwipeOpen modalOpen': function onPanelModalOpen(instance) {\n const app = this;\n instance.$el.find('.navbar:not(.navbar-previous)').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n },\n tabShow(tabEl) {\n const app = this;\n $(tabEl).find('.navbar:not(.navbar-previous)').each(navbarEl => {\n app.navbar.size(navbarEl);\n });\n }\n },\n clicks: {\n '.navbar .title': function onTitleClick($clickedEl, clickedData, e) {\n const app = this;\n if (!app.params.navbar.scrollTopOnTitleClick) return;\n if ($(e.target).closest('a, button').length > 0) {\n return;\n }\n let $pageContentEl;\n\n // Find active page\n const $navbarEl = $clickedEl.parents('.navbar');\n const $navbarsEl = $navbarEl.parents('.navbars');\n\n // Static Layout\n $pageContentEl = $navbarEl.parents('.page-content');\n if ($pageContentEl.length === 0) {\n // Fixed Layout\n if ($navbarEl.parents('.page').length > 0) {\n $pageContentEl = $navbarEl.parents('.page').find('.page-content');\n }\n // Through Layout iOS\n if ($pageContentEl.length === 0 && $navbarsEl.length) {\n if ($navbarsEl.nextAll('.page-current').length > 0) {\n $pageContentEl = $navbarsEl.nextAll('.page-current').find('.page-content');\n }\n }\n // Through Layout\n if ($pageContentEl.length === 0) {\n if ($navbarEl.nextAll('.page-current').length > 0) {\n $pageContentEl = $navbarEl.nextAll('.page-current').find('.page-content');\n }\n }\n }\n if ($pageContentEl && $pageContentEl.length > 0) {\n // Check for tab\n if ($pageContentEl.hasClass('tab')) {\n $pageContentEl = $pageContentEl.parent('.tabs').children('.page-content.tab-active');\n }\n if ($pageContentEl.length > 0) $pageContentEl.scrollTop(0, 300);\n }\n }\n },\n vnode: {\n navbar: {\n postpatch(vnode) {\n const app = this;\n app.navbar.size(vnode.elm);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\nconst Toolbar = {\n setHighlight(tabbarEl) {\n const app = this;\n const $tabbarEl = $(tabbarEl);\n if (app.theme === 'ios' && !$tabbarEl.hasClass('tabbar-highlight')) return;\n if ($tabbarEl.length === 0 || !($tabbarEl.hasClass('tabbar') || $tabbarEl.hasClass('tabbar-icons'))) return;\n let $highlightEl = $tabbarEl.find('.tab-link-highlight');\n const tabLinksCount = $tabbarEl.find('.tab-link').length;\n if (tabLinksCount === 0) {\n $highlightEl.remove();\n return;\n }\n if ($highlightEl.length === 0) {\n $tabbarEl.children('.toolbar-inner').append('');\n $highlightEl = $tabbarEl.find('.tab-link-highlight');\n } else if ($highlightEl.next().length) {\n $tabbarEl.children('.toolbar-inner').append($highlightEl);\n }\n const $activeLink = $tabbarEl.find('.tab-link-active');\n let highlightWidth;\n let highlightTranslate;\n if ($tabbarEl.hasClass('tabbar-scrollable') && $activeLink && $activeLink[0]) {\n highlightWidth = `${$activeLink[0].offsetWidth}px`;\n highlightTranslate = `${$activeLink[0].offsetLeft}px`;\n } else {\n const activeIndex = $activeLink.index();\n highlightWidth = `${100 / tabLinksCount}%`;\n highlightTranslate = `${(app.rtl ? -activeIndex : activeIndex) * 100}%`;\n }\n nextFrame(() => {\n $highlightEl.css('width', highlightWidth).transform(`translate3d(${highlightTranslate},0,0)`);\n });\n },\n init(tabbarEl) {\n const app = this;\n app.toolbar.setHighlight(tabbarEl);\n },\n hide(el, animate) {\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const $el = $(el);\n if ($el.hasClass('toolbar-hidden')) return;\n const className = `toolbar-hidden${animate ? ' toolbar-transitioning' : ''}`;\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n $el.addClass(className);\n $el.trigger('toolbar:hide');\n app.emit('toolbarHide', $el[0]);\n },\n show(el, animate) {\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const $el = $(el);\n if (!$el.hasClass('toolbar-hidden')) return;\n if (animate) {\n $el.addClass('toolbar-transitioning');\n $el.transitionEnd(() => {\n $el.removeClass('toolbar-transitioning');\n });\n }\n $el.removeClass('toolbar-hidden');\n $el.trigger('toolbar:show');\n app.emit('toolbarShow', $el[0]);\n },\n initToolbarOnScroll(pageEl) {\n const app = this;\n const $pageEl = $(pageEl);\n let $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = $pageEl.parents('.views').children('.tabbar, .tabbar-icons');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n let previousScrollTop;\n let currentScrollTop;\n let scrollHeight;\n let offsetHeight;\n let reachEnd;\n let action;\n let toolbarHidden;\n function handleScroll(e) {\n if ($pageEl.hasClass('page-with-card-opened')) return;\n if ($pageEl.hasClass('page-previous')) return;\n const scrollContent = this;\n if (e && e.target && e.target !== scrollContent) {\n return;\n }\n currentScrollTop = scrollContent.scrollTop;\n scrollHeight = scrollContent.scrollHeight;\n offsetHeight = scrollContent.offsetHeight;\n reachEnd = currentScrollTop + offsetHeight >= scrollHeight;\n toolbarHidden = $toolbarEl.hasClass('toolbar-hidden');\n if (reachEnd) {\n if (app.params.toolbar.showOnPageScrollEnd) {\n action = 'show';\n }\n } else if (previousScrollTop > currentScrollTop) {\n if (app.params.toolbar.showOnPageScrollTop || currentScrollTop <= 44) {\n action = 'show';\n } else {\n action = 'hide';\n }\n } else if (currentScrollTop > 44) {\n action = 'hide';\n } else {\n action = 'show';\n }\n if (action === 'show' && toolbarHidden) {\n app.toolbar.show($toolbarEl);\n toolbarHidden = false;\n } else if (action === 'hide' && !toolbarHidden) {\n app.toolbar.hide($toolbarEl);\n toolbarHidden = true;\n }\n previousScrollTop = currentScrollTop;\n }\n $pageEl.on('scroll', '.page-content', handleScroll, true);\n $pageEl[0].f7ScrollToolbarHandler = handleScroll;\n }\n};\nexport default {\n name: 'toolbar',\n create() {\n const app = this;\n bindMethods(app, {\n toolbar: Toolbar\n });\n },\n params: {\n toolbar: {\n hideOnPageScroll: false,\n showOnPageScrollEnd: true,\n showOnPageScrollTop: true\n }\n },\n on: {\n pageBeforeRemove(page) {\n if (page.$el[0].f7ScrollToolbarHandler) {\n page.$el.off('scroll', '.page-content', page.$el[0].f7ScrollToolbarHandler, true);\n }\n },\n pageBeforeIn(page) {\n const app = this;\n let $toolbarEl = page.$el.parents('.view').children('.toolbar');\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.parents('.views').children('.tabbar, .tabbar-icons');\n }\n if ($toolbarEl.length === 0) {\n $toolbarEl = page.$el.find('.toolbar');\n }\n if ($toolbarEl.length === 0) {\n return;\n }\n if (page.$el.hasClass('no-toolbar')) {\n app.toolbar.hide($toolbarEl);\n } else {\n app.toolbar.show($toolbarEl);\n }\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {\n app.toolbar.init(tabbarEl);\n });\n if (app.params.toolbar.hideOnPageScroll || page.$el.find('.hide-toolbar-on-scroll').length || page.$el.hasClass('hide-toolbar-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) {\n if (page.$el.find('.keep-toolbar-on-scroll').length || page.$el.hasClass('keep-toolbar-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) {\n return;\n }\n app.toolbar.initToolbarOnScroll(page.el);\n }\n },\n init() {\n const app = this;\n app.$el.find('.tabbar, .tabbar-icons').each(tabbarEl => {\n app.toolbar.init(tabbarEl);\n });\n }\n },\n vnode: {\n tabbar: {\n insert(vnode) {\n const app = this;\n app.toolbar.init(vnode.elm);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nexport default {\n name: 'subnavbar',\n on: {\n pageInit(page) {\n if (page.$navbarEl && page.$navbarEl.length && page.$navbarEl.find('.subnavbar').length) {\n page.$el.addClass('page-with-subnavbar');\n }\n const $innerSubnavbars = page.$el.find('.subnavbar').filter(subnavbarEl => {\n return $(subnavbarEl).parents('.page')[0] === page.$el[0];\n });\n if ($innerSubnavbars.length) {\n page.$el.addClass('page-with-subnavbar');\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nexport default class TouchRipple {\n constructor(app, $el, x, y) {\n const ripple = this;\n if (!$el) return undefined;\n const {\n left,\n top,\n width,\n height\n } = $el[0].getBoundingClientRect();\n const center = {\n x: x - left,\n y: y - top\n };\n let diameter = Math.max((height ** 2 + width ** 2) ** 0.5, 48);\n let isInset = false;\n const insetElements = app.params.touch.touchRippleInsetElements || '';\n if (insetElements && $el.is(insetElements)) {\n isInset = true;\n }\n if (isInset) {\n diameter = Math.max(Math.min(width, height), 48);\n }\n if (!isInset && $el.css('overflow') === 'hidden') {\n const distanceFromCenter = ((center.x - width / 2) ** 2 + (center.y - height / 2) ** 2) ** 0.5;\n const scale = (diameter / 2 + distanceFromCenter) / (diameter / 2);\n ripple.rippleTransform = `translate3d(0px, 0px, 0) scale(${scale * 2})`;\n } else {\n // prettier-ignore\n ripple.rippleTransform = `translate3d(${-center.x + width / 2}px, ${-center.y + height / 2}px, 0) scale(1)`;\n }\n if (isInset) {\n $el.addClass('ripple-inset');\n }\n ripple.$rippleWaveEl = $(``);\n $el.prepend(ripple.$rippleWaveEl);\n ripple.$rippleWaveEl.animationEnd(() => {\n if (!ripple.$rippleWaveEl) return;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-out')) return;\n ripple.$rippleWaveEl.addClass('ripple-wave-in');\n if (ripple.shouldBeRemoved) {\n ripple.out();\n }\n });\n return ripple;\n }\n destroy() {\n let ripple = this;\n if (ripple.$rippleWaveEl) {\n ripple.$rippleWaveEl.remove();\n }\n Object.keys(ripple).forEach(key => {\n ripple[key] = null;\n delete ripple[key];\n });\n ripple = null;\n }\n out() {\n const ripple = this;\n const {\n $rippleWaveEl\n } = this;\n clearTimeout(ripple.removeTimeout);\n $rippleWaveEl.addClass('ripple-wave-out');\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 300);\n $rippleWaveEl.animationEnd(() => {\n clearTimeout(ripple.removeTimeout);\n ripple.destroy();\n });\n }\n remove() {\n const ripple = this;\n if (ripple.shouldBeRemoved) return;\n ripple.removeTimeout = setTimeout(() => {\n ripple.destroy();\n }, 400);\n ripple.shouldBeRemoved = true;\n if (ripple.$rippleWaveEl.hasClass('ripple-wave-in')) {\n ripple.out();\n }\n }\n}", "import TouchRipple from './touch-ripple-class.js';\nexport default {\n name: 'touch-ripple',\n static: {\n TouchRipple\n },\n create() {\n const app = this;\n app.touchRipple = {\n create() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return new TouchRipple(...args);\n }\n };\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nconst openedModals = [];\nconst dialogsQueue = [];\nfunction clearDialogsQueue() {\n if (dialogsQueue.length === 0) return;\n const dialog = dialogsQueue.shift();\n dialog.open();\n}\nclass Modal extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const modal = this;\n const defaults = {};\n\n // Extend defaults with modules params\n modal.useModulesParams(defaults);\n modal.params = extend(defaults, params);\n modal.opened = false;\n let $containerEl = modal.params.containerEl ? $(modal.params.containerEl).eq(0) : app.$el;\n if (!$containerEl.length) $containerEl = app.$el;\n modal.$containerEl = $containerEl;\n modal.containerEl = $containerEl[0];\n\n // Install Modules\n modal.useModules();\n return this;\n }\n onOpen() {\n const modal = this;\n modal.opened = true;\n openedModals.push(modal);\n $('html').addClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:open ${modal.type.toLowerCase()}:open`);\n modal.emit(`local::open modalOpen ${modal.type}Open`, modal);\n }\n onOpened() {\n const modal = this;\n modal.$el.trigger(`modal:opened ${modal.type.toLowerCase()}:opened`);\n modal.emit(`local::opened modalOpened ${modal.type}Opened`, modal);\n }\n onClose() {\n const modal = this;\n modal.opened = false;\n if (!modal.type || !modal.$el) return;\n openedModals.splice(openedModals.indexOf(modal), 1);\n $('html').removeClass(`with-modal-${modal.type.toLowerCase()}`);\n modal.$el.trigger(`modal:close ${modal.type.toLowerCase()}:close`);\n modal.emit(`local::close modalClose ${modal.type}Close`, modal);\n }\n onClosed() {\n const modal = this;\n if (!modal.type || !modal.$el) return;\n modal.$el.removeClass('modal-out');\n modal.$el.hide();\n if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {\n modal.$backdropEl.remove();\n }\n modal.$el.trigger(`modal:closed ${modal.type.toLowerCase()}:closed`);\n modal.emit(`local::closed modalClosed ${modal.type}Closed`, modal);\n }\n open(animateModal, force) {\n const modal = this;\n const document = getDocument();\n const app = modal.app;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n const type = modal.type;\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n if (!$el || $el.hasClass('modal-in')) {\n if (animateModal === false && $el[0] && type !== 'dialog') {\n $el[0].style.display = 'block';\n }\n if (!force) return modal;\n }\n if (type === 'dialog' && app.params.modal.queueDialogs) {\n let pushToQueue;\n if ($('.dialog.modal-in').length > 0) {\n pushToQueue = true;\n } else if (openedModals.length > 0) {\n openedModals.forEach(openedModal => {\n if (openedModal.type === 'dialog') pushToQueue = true;\n });\n }\n if (pushToQueue) {\n dialogsQueue.push(modal);\n return modal;\n }\n }\n const $modalParentEl = $el.parent();\n const wasInDom = $el.parents(document).length > 0;\n if (!$modalParentEl.is(modal.$containerEl)) {\n modal.$containerEl.append($el);\n modal.once(`${type}Closed`, () => {\n if (wasInDom) {\n $modalParentEl.append($el);\n } else {\n $el.remove();\n }\n });\n }\n // Show Modal\n $el.show();\n if (modal.params.backdrop && (modal.params.backdropUnique || modal.forceBackdropUnique) && modal.$backdropEl) {\n modal.$backdropEl.insertBefore($el);\n }\n\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n modal._clientLeft = $el[0].clientLeft;\n\n // Modal\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n if ($backdropEl) {\n $backdropEl.removeClass('not-animated');\n $backdropEl.addClass('backdrop-in');\n }\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-out not-animated').addClass('modal-in');\n modal.onOpen();\n } else {\n if ($backdropEl) {\n $backdropEl.addClass('backdrop-in not-animated');\n }\n $el.removeClass('modal-out').addClass('modal-in not-animated');\n modal.onOpen();\n modal.onOpened();\n }\n return modal;\n }\n close(animateModal) {\n const modal = this;\n const $el = modal.$el;\n const $backdropEl = modal.$backdropEl;\n let animate = true;\n if (typeof animateModal !== 'undefined') animate = animateModal;else if (typeof modal.params.animate !== 'undefined') {\n animate = modal.params.animate;\n }\n if (!$el || !$el.hasClass('modal-in')) {\n if (dialogsQueue.indexOf(modal) >= 0) {\n dialogsQueue.splice(dialogsQueue.indexOf(modal), 1);\n }\n return modal;\n }\n\n // backdrop\n if ($backdropEl) {\n let needToHideBackdrop = true;\n if (modal.type === 'popup') {\n modal.$el.prevAll('.popup.modal-in').add(modal.$el.nextAll('.popup.modal-in')).each(popupEl => {\n const popupInstance = popupEl.f7Modal;\n if (!popupInstance) return;\n if (popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === modal.backdropEl) {\n needToHideBackdrop = false;\n }\n });\n }\n if (needToHideBackdrop) {\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n $backdropEl.removeClass('backdrop-in');\n }\n }\n\n // Modal\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n function transitionEnd() {\n if ($el.hasClass('modal-out')) {\n modal.onClosed();\n } else if ($el.hasClass('modal-in')) {\n modal.onOpened();\n }\n }\n if (animate) {\n $el.animationEnd(() => {\n transitionEnd();\n });\n $el.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n } else {\n $el.addClass('not-animated').removeClass('modal-in').addClass('modal-out');\n // Emit close\n modal.onClose();\n modal.onClosed();\n }\n if (modal.type === 'dialog') {\n clearDialogsQueue();\n }\n return modal;\n }\n destroy() {\n const modal = this;\n if (modal.destroyed) return;\n modal.emit(`local::beforeDestroy modalBeforeDestroy ${modal.type}BeforeDestroy`, modal);\n if (modal.$el) {\n modal.$el.trigger(`modal:beforedestroy ${modal.type.toLowerCase()}:beforedestroy`);\n if (modal.$el.length && modal.$el[0].f7Modal) {\n delete modal.$el[0].f7Modal;\n }\n }\n deleteProps(modal);\n modal.destroyed = true;\n }\n}\nexport default Modal;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Modal from './modal-class.js';\nclass CustomModal extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n backdrop: true,\n closeByBackdropClick: true,\n on: {}\n }, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const customModal = this;\n customModal.params = extendedParams;\n\n // Find Element\n let $el;\n if (!customModal.params.el) {\n $el = $(customModal.params.content);\n } else {\n $el = $(customModal.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return customModal.destroy();\n }\n let $backdropEl;\n if (customModal.params.backdrop) {\n $backdropEl = app.$el.children('.custom-modal-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n app.$el.append($backdropEl);\n }\n }\n function handleClick(e) {\n if (!customModal || customModal.destroyed) return;\n if ($backdropEl && e.target === $backdropEl[0]) {\n customModal.close();\n }\n }\n customModal.on('customModalOpened', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.on('click', handleClick);\n }\n });\n customModal.on('customModalClose', () => {\n if (customModal.params.closeByBackdropClick && customModal.params.backdrop) {\n app.off('click', handleClick);\n }\n });\n extend(customModal, {\n app,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'customModal'\n });\n $el[0].f7Modal = customModal;\n return customModal;\n }\n}\nexport default CustomModal;", "import Modal from './modal-class.js';\nimport CustomModal from './custom-modal-class.js';\nexport default {\n name: 'modal',\n static: {\n Modal,\n CustomModal\n },\n create() {\n const app = this;\n app.customModal = {\n create(params) {\n return new CustomModal(app, params);\n }\n };\n },\n params: {\n modal: {\n queueDialogs: true\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Dialog extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n title: app.params.dialog.title,\n text: undefined,\n content: '',\n buttons: [],\n verticalButtons: false,\n onClick: undefined,\n cssClass: undefined,\n destroyOnClose: false,\n on: {}\n }, params);\n if (typeof extendedParams.closeByBackdropClick === 'undefined') {\n extendedParams.closeByBackdropClick = app.params.dialog.closeByBackdropClick;\n }\n if (typeof extendedParams.backdrop === 'undefined') {\n extendedParams.backdrop = app.params.dialog.backdrop;\n }\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const dialog = this;\n const device = getDevice();\n const document = getDocument();\n const {\n title,\n text,\n content,\n buttons,\n verticalButtons,\n cssClass,\n backdrop\n } = extendedParams;\n dialog.params = extendedParams;\n\n // Find Element\n let $el;\n if (!dialog.params.el) {\n const dialogClasses = ['dialog'];\n if (buttons.length === 0) dialogClasses.push('dialog-no-buttons');\n if (buttons.length > 0) dialogClasses.push(`dialog-buttons-${buttons.length}`);\n if (verticalButtons) dialogClasses.push('dialog-buttons-vertical');\n if (cssClass) dialogClasses.push(cssClass);\n let buttonsHTML = '';\n if (buttons.length > 0) {\n buttonsHTML = $jsx(\"div\", {\n class: \"dialog-buttons\"\n }, buttons.map(button => $jsx(\"span\", {\n class: `dialog-button${button.strong ? ' dialog-button-strong' : ''}${button.color ? ` color-${button.color}` : ''}${button.cssClass ? ` ${button.cssClass}` : ''}`\n }, button.text)));\n }\n const dialogHtml = $jsx(\"div\", {\n class: dialogClasses.join(' ')\n }, $jsx(\"div\", {\n class: \"dialog-inner\"\n }, title && $jsx(\"div\", {\n class: \"dialog-title\"\n }, title), text && $jsx(\"div\", {\n class: \"dialog-text\"\n }, text), content), buttonsHTML);\n $el = $(dialogHtml);\n } else {\n $el = $(dialog.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return dialog.destroy();\n }\n let $backdropEl;\n if (backdrop) {\n $backdropEl = app.$el.children('.dialog-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n app.$el.append($backdropEl);\n }\n }\n\n // Assign events\n function buttonOnClick(e) {\n const buttonEl = this;\n const index = $(buttonEl).index();\n const button = buttons[index];\n if (button.onClick) button.onClick(dialog, e);\n if (dialog.params.onClick) dialog.params.onClick(dialog, index);\n if (button.close !== false) dialog.close();\n }\n let addKeyboardHander;\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n buttons.forEach((button, index) => {\n if (button.keyCodes && button.keyCodes.indexOf(keyCode) >= 0) {\n if (document.activeElement) document.activeElement.blur();\n if (button.onClick) button.onClick(dialog, e);\n if (dialog.params.onClick) dialog.params.onClick(dialog, index);\n if (button.close !== false) dialog.close();\n }\n });\n }\n if (buttons && buttons.length > 0) {\n dialog.on('open', () => {\n $el.find('.dialog-button').each((buttonEl, index) => {\n const button = buttons[index];\n if (button.keyCodes) addKeyboardHander = true;\n $(buttonEl).on('click', buttonOnClick);\n });\n if (addKeyboardHander && !device.ios && !device.android && !device.cordova && !device.capacitor) {\n $(document).on('keydown', onKeyDown);\n }\n });\n dialog.on('close', () => {\n $el.find('.dialog-button').each(buttonEl => {\n $(buttonEl).off('click', buttonOnClick);\n });\n if (addKeyboardHander && !device.ios && !device.android && !device.cordova && !device.capacitor) {\n $(document).off('keydown', onKeyDown);\n }\n addKeyboardHander = false;\n });\n }\n extend(dialog, {\n app,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'dialog',\n setProgress(progress, duration) {\n app.progressbar.set($el.find('.progressbar'), progress, duration);\n return dialog;\n },\n setText(newText) {\n let $textEl = $el.find('.dialog-text');\n if ($textEl.length === 0) {\n $textEl = $('');\n if (typeof title !== 'undefined') {\n $textEl.insertAfter($el.find('.dialog-title'));\n } else {\n $el.find('.dialog-inner').prepend($textEl);\n }\n }\n $textEl.html(newText);\n dialog.params.text = newText;\n return dialog;\n },\n setTitle(newTitle) {\n let $titleEl = $el.find('.dialog-title');\n if ($titleEl.length === 0) {\n $titleEl = $('');\n $el.find('.dialog-inner').prepend($titleEl);\n }\n $titleEl.html(newTitle);\n dialog.params.title = newTitle;\n return dialog;\n }\n });\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n if ($target.closest(dialog.el).length === 0) {\n if (dialog.params.closeByBackdropClick && dialog.backdropEl && dialog.backdropEl === target) {\n dialog.close();\n }\n }\n }\n dialog.on('opened', () => {\n if (dialog.params.closeByBackdropClick) {\n app.on('click', handleClick);\n }\n });\n dialog.on('close', () => {\n if (dialog.params.closeByBackdropClick) {\n app.off('click', handleClick);\n }\n });\n $el[0].f7Modal = dialog;\n if (dialog.params.destroyOnClose) {\n dialog.once('closed', () => {\n setTimeout(() => {\n dialog.destroy();\n }, 0);\n });\n }\n return dialog;\n }\n}\nexport default Dialog;", "import { extend, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nimport Dialog from './dialog-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'dialog',\n params: {\n dialog: {\n title: undefined,\n buttonOk: 'OK',\n buttonCancel: 'Cancel',\n usernamePlaceholder: 'Username',\n passwordPlaceholder: 'Password',\n preloaderTitle: 'Loading... ',\n progressTitle: 'Loading... ',\n backdrop: true,\n closeByBackdropClick: false,\n destroyPredefinedDialogs: true,\n keyboardActions: true,\n autoFocus: true\n }\n },\n static: {\n Dialog\n },\n create() {\n const app = this;\n function defaultDialogTitle() {\n return app.params.dialog.title || app.name;\n }\n const destroyOnClose = app.params.dialog.destroyPredefinedDialogs;\n const keyboardActions = app.params.dialog.keyboardActions;\n const autoFocus = app.params.dialog.autoFocus;\n const autoFocusHandler = autoFocus ? {\n on: {\n opened(dialog) {\n dialog.$el.find('input').eq(0).focus();\n }\n }\n } : {};\n const isIosTheme = app.theme === 'ios';\n app.dialog = extend(ModalMethods({\n app,\n constructor: Dialog,\n defaultSelector: '.dialog.modal-in'\n }), {\n // Shortcuts\n alert() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [text, title, callbackOk] = args;\n if (args.length === 2 && typeof args[1] === 'function') {\n [text, callbackOk, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n buttons: [{\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n onClick: callbackOk,\n keyCodes: keyboardActions ? [13, 27] : null\n }],\n destroyOnClose\n }).open();\n },\n prompt() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n let [text, title, callbackOk, callbackCancel, defaultValue] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, defaultValue, title] = args;\n }\n defaultValue = typeof defaultValue === 'undefined' || defaultValue === null ? '' : defaultValue;\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n content: ``,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n keyCodes: keyboardActions ? [13] : null\n }],\n onClick(dialog, index) {\n const inputValue = dialog.$el.find('.dialog-input').val();\n if (index === 0 && callbackCancel) callbackCancel(inputValue);\n if (index === 1 && callbackOk) callbackOk(inputValue);\n },\n destroyOnClose,\n ...autoFocusHandler\n }).open();\n },\n confirm() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n let [text, title, callbackOk, callbackCancel] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n onClick: callbackCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n onClick: callbackOk,\n keyCodes: keyboardActions ? [13] : null\n }],\n destroyOnClose\n }).open();\n },\n login() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n let [text, title, callbackOk, callbackCancel] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n // prettier-ignore\n content: `\n \n \n
\n \n \n
`,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n keyCodes: keyboardActions ? [13] : null\n }],\n onClick(dialog, index) {\n const username = dialog.$el.find('[name=\"dialog-username\"]').val();\n const password = dialog.$el.find('[name=\"dialog-password\"]').val();\n if (index === 0 && callbackCancel) callbackCancel(username, password);\n if (index === 1 && callbackOk) callbackOk(username, password);\n },\n destroyOnClose,\n ...autoFocusHandler\n }).open();\n },\n password() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n let [text, title, callbackOk, callbackCancel] = args;\n if (typeof args[1] === 'function') {\n [text, callbackOk, callbackCancel, title] = args;\n }\n return new Dialog(app, {\n title: typeof title === 'undefined' ? defaultDialogTitle() : title,\n text,\n // prettier-ignore\n content: `\n \n \n
`,\n buttons: [{\n text: app.params.dialog.buttonCancel,\n keyCodes: keyboardActions ? [27] : null,\n color: null\n }, {\n text: app.params.dialog.buttonOk,\n strong: isIosTheme,\n keyCodes: keyboardActions ? [13] : null\n }],\n onClick(dialog, index) {\n const password = dialog.$el.find('[name=\"dialog-password\"]').val();\n if (index === 0 && callbackCancel) callbackCancel(password);\n if (index === 1 && callbackOk) callbackOk(password);\n },\n destroyOnClose,\n ...autoFocusHandler\n }).open();\n },\n preloader(title, color) {\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || '';\n return new Dialog(app, {\n title: typeof title === 'undefined' || title === null ? app.params.dialog.preloaderTitle : title,\n // prettier-ignore\n content: `${preloaderInner}
`,\n cssClass: 'dialog-preloader',\n destroyOnClose\n }).open();\n },\n progress() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n let [title, progress, color] = args;\n if (args.length === 2) {\n if (typeof args[0] === 'number') {\n [progress, color, title] = args;\n } else if (typeof args[0] === 'string' && typeof args[1] === 'string') {\n [title, color, progress] = args;\n }\n } else if (args.length === 1) {\n if (typeof args[0] === 'number') {\n [progress, title, color] = args;\n }\n }\n const infinite = typeof progress === 'undefined';\n const dialog = new Dialog(app, {\n title: typeof title === 'undefined' ? app.params.dialog.progressTitle : title,\n cssClass: 'dialog-progress',\n // prettier-ignore\n content: `\n \n ${!infinite ? '' : ''}\n
\n `,\n destroyOnClose\n });\n if (!infinite) dialog.setProgress(progress);\n return dialog.open();\n }\n });\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, now, nextTick } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\nclass Popup extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.popup, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const popup = this;\n const window = getWindow();\n const document = getDocument();\n const support = getSupport();\n const device = getDevice();\n popup.params = extendedParams;\n\n // Find Element\n let $el;\n if (!popup.params.el) {\n $el = $(popup.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(popup.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return popup.destroy();\n }\n let $backdropEl;\n if (popup.params.backdrop && popup.params.backdropEl) {\n $backdropEl = $(popup.params.backdropEl);\n } else if (popup.params.backdrop) {\n if (popup.params.backdropUnique) {\n $backdropEl = $('');\n popup.$containerEl.append($backdropEl);\n } else {\n $backdropEl = popup.$containerEl.children('.popup-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n popup.$containerEl.append($backdropEl);\n }\n }\n extend(popup, {\n app,\n push: $el.hasClass('popup-push') || popup.params.push,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'popup',\n $htmlEl: $('html')\n });\n if (popup.params.push) {\n $el.addClass('popup-push');\n }\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(popup.el).length === 0) {\n if (popup.params && popup.params.closeByBackdropClick && popup.params.backdrop && popup.backdropEl && popup.backdropEl === target) {\n let needToClose = true;\n popup.$el.nextAll('.popup.modal-in').each(popupEl => {\n const popupInstance = popupEl.f7Modal;\n if (!popupInstance) return;\n if (popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === popup.backdropEl) {\n needToClose = false;\n }\n });\n if (needToClose) {\n popup.close();\n }\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && popup.params.closeOnEscape) {\n popup.close();\n }\n }\n let pushOffset;\n let isPush;\n function pushViewScale(offset) {\n return (app.height - offset * 2) / app.height;\n }\n let allowSwipeToClose = true;\n let isTouched = false;\n let startTouch;\n let currentTouch;\n let isScrolling;\n let touchStartTime;\n let touchesDiff;\n let isMoved = false;\n let pageContentEl;\n let pageContentScrollTop;\n let pageContentOffsetHeight;\n let pageContentScrollHeight;\n let popupHeight;\n let $pushEl;\n function handleTouchStart(e) {\n if (isTouched || !allowSwipeToClose || !popup.params.swipeToClose || !e.isTrusted) return;\n if (popup.params.swipeHandler && $(e.target).closest(popup.params.swipeHandler).length === 0) {\n return;\n }\n if ($(e.target).closest('.sortable-handler').length > 0) return;\n isTouched = true;\n isMoved = false;\n startTouch = {\n x: e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY\n };\n touchStartTime = now();\n isScrolling = undefined;\n if (!popup.params.swipeHandler && e.type === 'touchstart') {\n pageContentEl = $(e.target).closest('.page-content')[0];\n }\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n currentTouch = {\n x: e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY\n };\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(currentTouch.x - startTouch.x) > Math.abs(currentTouch.y - startTouch.y));\n }\n if (isScrolling) {\n isTouched = false;\n isMoved = false;\n return;\n }\n touchesDiff = startTouch.y - currentTouch.y;\n if (isPush && pushOffset && touchesDiff > 0) {\n touchesDiff = 0;\n }\n const direction = touchesDiff < 0 ? 'to-bottom' : 'to-top';\n $el.transition(0);\n if (typeof popup.params.swipeToClose === 'string' && direction !== popup.params.swipeToClose) {\n $el.transform('');\n $el.transition('');\n return;\n }\n if (!isMoved) {\n if (isPush && pushOffset) {\n popupHeight = $el[0].offsetHeight;\n $pushEl = $el.prevAll('.popup.modal-in').eq(0);\n if ($pushEl.length === 0) {\n $pushEl = app.$el.children('.view, .views');\n }\n }\n if (pageContentEl) {\n pageContentScrollTop = pageContentEl.scrollTop;\n pageContentScrollHeight = pageContentEl.scrollHeight;\n pageContentOffsetHeight = pageContentEl.offsetHeight;\n if (!(pageContentScrollHeight === pageContentOffsetHeight) && !(direction === 'to-bottom' && pageContentScrollTop === 0) && !(direction === 'to-top' && pageContentScrollTop === pageContentScrollHeight - pageContentOffsetHeight)) {\n $el.transform('');\n $el.transition('');\n isTouched = false;\n isMoved = false;\n return;\n }\n }\n isMoved = true;\n popup.emit('local::swipeStart popupSwipeStart', popup);\n popup.$el.trigger('popup:swipestart');\n } else {\n popup.emit('local::swipeMove popupSwipeMove', popup);\n popup.$el.trigger('popup:swipemove');\n }\n e.preventDefault();\n if (isPush && pushOffset) {\n const pushProgress = 1 - Math.abs(touchesDiff / popupHeight);\n const scale = 1 - (1 - pushViewScale(pushOffset)) * pushProgress;\n if ($pushEl.hasClass('popup')) {\n if ($pushEl.hasClass('popup-push')) {\n $pushEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0, calc(-1 * ${pushProgress} * (var(--f7-popup-push-offset) + 10px)) , 0px) scale(${scale})`, 'important');\n });\n } else {\n $pushEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0, 0px , 0px) scale(${scale})`, 'important');\n });\n }\n } else {\n $pushEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${scale})`, 'important');\n });\n }\n }\n $el.transition(0).transform(`translate3d(0,${-touchesDiff}px,0)`);\n }\n function handleTouchEnd(e) {\n if (!e.isTrusted) return;\n isTouched = false;\n if (!isMoved) {\n return;\n }\n popup.emit('local::swipeEnd popupSwipeEnd', popup);\n popup.$el.trigger('popup:swipeend');\n isMoved = false;\n allowSwipeToClose = false;\n $el.transition('');\n if (isPush && pushOffset) {\n $pushEl.transition('').transform('');\n }\n const direction = touchesDiff <= 0 ? 'to-bottom' : 'to-top';\n if (typeof popup.params.swipeToClose === 'string' && direction !== popup.params.swipeToClose) {\n $el.transform('');\n allowSwipeToClose = true;\n return;\n }\n const diff = Math.abs(touchesDiff);\n const timeDiff = new Date().getTime() - touchStartTime;\n if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > 100) {\n nextTick(() => {\n if (direction === 'to-bottom') {\n $el.addClass('swipe-close-to-bottom');\n } else {\n $el.addClass('swipe-close-to-top');\n }\n $el.transform('');\n popup.emit('local::swipeclose popupSwipeClose', popup);\n popup.$el.trigger('popup:swipeclose');\n popup.close();\n allowSwipeToClose = true;\n });\n return;\n }\n allowSwipeToClose = true;\n $el.transform('');\n }\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (popup.params.swipeToClose) {\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n popup.once('popupDestroy', () => {\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n });\n }\n let hasPreviousPushPopup;\n const updatePushOffset = () => {\n const wasPush = isPush;\n if (popup.push) {\n isPush = popup.push && (app.width < 630 || app.height < 630 || $el.hasClass('popup-tablet-fullscreen'));\n }\n if (isPush && !wasPush) {\n // eslint-disable-next-line\n setPushOffset();\n } else if (isPush && wasPush) {\n popup.$htmlEl[0].style.setProperty('--f7-popup-push-scale', pushViewScale(pushOffset));\n } else if (!isPush && wasPush) {\n popup.$htmlEl.removeClass('with-modal-popup-push');\n popup.$htmlEl[0].style.removeProperty('--f7-popup-push-scale');\n }\n };\n const setPushOffset = () => {\n app.off('resize', updatePushOffset);\n if (popup.push) {\n isPush = popup.push && (app.width < 630 || app.height < 630 || $el.hasClass('popup-tablet-fullscreen'));\n }\n if (isPush) {\n pushOffset = parseInt($el.css('--f7-popup-push-offset'), 10);\n if (Number.isNaN(pushOffset)) {\n pushOffset = 0;\n }\n if (!pushOffset) pushOffset = app.theme === 'ios' ? 44 : 48;\n popup.$htmlEl[0].style.setProperty('--f7-popup-push-offset', `${pushOffset}px`);\n $el.addClass('popup-push');\n popup.$htmlEl.addClass('with-modal-popup-push');\n popup.$htmlEl[0].style.setProperty('--f7-popup-push-scale', pushViewScale(pushOffset));\n }\n app.on('resize', updatePushOffset);\n };\n popup.on('open', () => {\n hasPreviousPushPopup = false;\n if (popup.params.closeOnEscape) {\n $(document).on('keydown', onKeyDown);\n }\n $el.prevAll('.popup.modal-in').addClass('popup-behind');\n setPushOffset();\n });\n popup.on('opened', () => {\n $el.removeClass('swipe-close-to-bottom swipe-close-to-top');\n if (popup.params.closeByBackdropClick) {\n app.on('click', handleClick);\n }\n });\n popup.on('close', () => {\n hasPreviousPushPopup = popup.$el.prevAll('.popup-push.modal-in').length > 0;\n if (popup.params.closeOnEscape) {\n $(document).off('keydown', onKeyDown);\n }\n if (popup.params.closeByBackdropClick) {\n app.off('click', handleClick);\n }\n $el.prevAll('.popup.modal-in').eq(0).removeClass('popup-behind');\n if (isPush && pushOffset && !hasPreviousPushPopup) {\n popup.$htmlEl.removeClass('with-modal-popup-push');\n popup.$htmlEl.addClass('with-modal-popup-push-closing');\n }\n app.off('resize', updatePushOffset);\n });\n popup.on('closed', () => {\n $el.removeClass('popup-behind');\n if (isPush && pushOffset && !hasPreviousPushPopup) {\n popup.$htmlEl.removeClass('with-modal-popup-push-closing');\n popup.$htmlEl[0].style.removeProperty('--f7-popup-push-scale');\n popup.$htmlEl[0].style.removeProperty('--f7-popup-push-offset');\n }\n });\n $el[0].f7Modal = popup;\n return popup;\n }\n}\nexport default Popup;", "import Popup from './popup-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'popup',\n params: {\n popup: {\n backdrop: true,\n backdropEl: undefined,\n backdropUnique: false,\n closeByBackdropClick: true,\n closeOnEscape: false,\n swipeToClose: false,\n swipeHandler: null,\n push: false,\n containerEl: null\n }\n },\n static: {\n Popup\n },\n create() {\n const app = this;\n app.popup = ModalMethods({\n app,\n constructor: Popup,\n defaultSelector: '.popup.modal-in',\n parentSelector: '.popup'\n });\n },\n clicks: {\n '.popup-open': function openPopup($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popup.open(data.popup, data.animate, $clickedEl);\n },\n '.popup-close': function closePopup($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popup.close(data.popup, data.animate, $clickedEl);\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\nclass LoginScreen extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const loginScreen = this;\n loginScreen.params = extendedParams;\n\n // Find Element\n let $el;\n if (!loginScreen.params.el) {\n $el = $(loginScreen.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(loginScreen.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return loginScreen.destroy();\n }\n extend(loginScreen, {\n app,\n $el,\n el: $el[0],\n type: 'loginScreen'\n });\n $el[0].f7Modal = loginScreen;\n return loginScreen;\n }\n}\nexport default LoginScreen;", "import LoginScreen from './login-screen-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'loginScreen',\n static: {\n LoginScreen\n },\n create() {\n const app = this;\n app.loginScreen = ModalMethods({\n app,\n constructor: LoginScreen,\n defaultSelector: '.login-screen.modal-in'\n });\n },\n clicks: {\n '.login-screen-open': function openLoginScreen($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.loginScreen.open(data.loginScreen, data.animate, $clickedEl);\n },\n '.login-screen-close': function closeLoginScreen($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.loginScreen.close(data.loginScreen, data.animate, $clickedEl);\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\nclass Popover extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.popover, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const popover = this;\n const device = getDevice();\n const window = getWindow();\n const document = getDocument();\n popover.params = extendedParams;\n\n // Find Element\n let $el;\n if (!popover.params.el) {\n $el = $(popover.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(popover.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n\n // Find Target\n const $targetEl = $(popover.params.targetEl).eq(0);\n if ($el.length === 0) {\n return popover.destroy();\n }\n\n // Backdrop\n let $backdropEl;\n const forceBackdropUnique = popover.params.backdrop && app.$el.find('.popover.modal-in').filter(anotherPopoverEl => anotherPopoverEl !== $el[0]).length > 0;\n if (popover.params.backdrop && popover.params.backdropEl) {\n $backdropEl = $(popover.params.backdropEl);\n } else if (popover.params.backdrop) {\n if (popover.params.backdropUnique || forceBackdropUnique) {\n $backdropEl = $('');\n $backdropEl[0].f7PopoverRef = popover;\n popover.$containerEl.append($backdropEl);\n } else {\n $backdropEl = popover.$containerEl.children('.popover-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n popover.$containerEl.append($backdropEl);\n }\n }\n\n // Find Arrow\n let $arrowEl;\n if ($el.find('.popover-arrow').length === 0 && popover.params.arrow) {\n $arrowEl = $('');\n $el.prepend($arrowEl);\n } else {\n $arrowEl = $el.find('.popover-arrow');\n }\n\n // Open\n const originalOpen = popover.open;\n extend(popover, {\n app,\n $el,\n el: $el[0],\n $targetEl,\n targetEl: $targetEl[0],\n $arrowEl,\n arrowEl: $arrowEl[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'popover',\n forceBackdropUnique,\n open() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [targetEl, animate] = args;\n if (typeof args[0] === 'boolean') [animate, targetEl] = args;\n if (targetEl) {\n popover.$targetEl = $(targetEl);\n popover.targetEl = popover.$targetEl[0];\n }\n return originalOpen.call(popover, animate);\n }\n });\n function handleResize() {\n popover.resize();\n }\n popover.on('popoverOpen', () => {\n popover.resize();\n app.on('resize', handleResize);\n $(window).on('keyboardDidShow keyboardDidHide', handleResize);\n popover.on('popoverClose popoverBeforeDestroy', () => {\n app.off('resize', handleResize);\n $(window).off('keyboardDidShow keyboardDidHide', handleResize);\n });\n });\n let touchStartTarget = null;\n function handleTouchStart(e) {\n touchStartTarget = e.target;\n }\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(popover.el).length === 0) {\n if (popover.params.closeByBackdropClick && popover.params.backdrop && popover.backdropEl && popover.backdropEl === target && touchStartTarget === target) {\n popover.close();\n } else if (popover.params.closeByOutsideClick && touchStartTarget === target) {\n const isAnotherPopoverBackdrop = $target.hasClass('popover-backdrop-unique') && target.f7PopoverRef !== popover || $target.hasClass('popover-backdrop') && target !== popover.backdropEl;\n const isAnotherPopoverTarget = target.closest('.popover') && target.closest('.popover') !== popover.$el[0];\n if (!isAnotherPopoverBackdrop && !isAnotherPopoverTarget) {\n popover.close();\n }\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && popover.params.closeOnEscape) {\n popover.close();\n }\n }\n if (popover.params.closeOnEscape) {\n popover.on('popoverOpen', () => {\n $(document).on('keydown', onKeyDown);\n });\n popover.on('popoverClose', () => {\n $(document).off('keydown', onKeyDown);\n });\n }\n popover.on('popoverOpened', () => {\n if (popover.params.closeByOutsideClick || popover.params.closeByBackdropClick) {\n app.on('touchstart', handleTouchStart);\n app.on('click', handleClick);\n }\n });\n popover.on('popoverClose', () => {\n if (popover.params.closeByOutsideClick || popover.params.closeByBackdropClick) {\n app.off('touchstart', handleTouchStart);\n app.off('click', handleClick);\n }\n });\n $el[0].f7Modal = popover;\n return popover;\n }\n resize() {\n const popover = this;\n const {\n app,\n $el,\n $targetEl,\n $arrowEl\n } = popover;\n const {\n targetX,\n targetY,\n verticalPosition\n } = popover.params;\n $el.css({\n left: '',\n top: ''\n });\n const [width, height] = [$el.width(), $el.height()];\n let arrowSize = 0;\n let arrowLeft;\n let arrowTop;\n const hasArrow = $arrowEl.length > 0;\n const arrowMin = app.theme === 'ios' ? 13 : 24;\n if (hasArrow) {\n $arrowEl.removeClass('on-left on-right on-top on-bottom').css({\n left: '',\n top: ''\n });\n arrowSize = $arrowEl.width() / 2;\n }\n $el.removeClass('popover-on-left popover-on-right popover-on-top popover-on-bottom popover-on-middle').css({\n left: '',\n top: ''\n });\n let targetWidth;\n let targetHeight;\n let targetOffsetLeft;\n let targetOffsetTop;\n let safeAreaTop = parseInt($('html').css('--f7-safe-area-top'), 10);\n let safeAreaLeft = parseInt($('html').css('--f7-safe-area-left'), 10);\n let safeAreaRight = parseInt($('html').css('--f7-safe-area-right'), 10);\n if (Number.isNaN(safeAreaTop)) safeAreaTop = 0;\n if (Number.isNaN(safeAreaLeft)) safeAreaLeft = 0;\n if (Number.isNaN(safeAreaRight)) safeAreaRight = 0;\n if ($targetEl && $targetEl.length > 0) {\n targetWidth = $targetEl.outerWidth();\n targetHeight = $targetEl.outerHeight();\n const targetOffset = $targetEl.offset();\n targetOffsetLeft = targetOffset.left - app.left;\n targetOffsetTop = targetOffset.top - app.top;\n const targetParentPage = $targetEl.parents('.page');\n if (targetParentPage.length > 0) {\n targetOffsetTop -= targetParentPage[0].scrollTop;\n }\n } else if (typeof targetX !== 'undefined' && targetY !== 'undefined') {\n targetOffsetLeft = targetX;\n targetOffsetTop = targetY;\n targetWidth = popover.params.targetWidth || 0;\n targetHeight = popover.params.targetHeight || 0;\n }\n let [left, top, diff] = [0, 0, 0];\n // Top Position\n const forcedPosition = verticalPosition === 'auto' ? false : verticalPosition;\n let position = forcedPosition || 'top';\n if (forcedPosition === 'top' || !forcedPosition && height + arrowSize < targetOffsetTop - safeAreaTop) {\n // On top\n top = targetOffsetTop - height - arrowSize;\n } else if (forcedPosition === 'bottom' || !forcedPosition && height + arrowSize < app.height - targetOffsetTop - targetHeight) {\n // On bottom\n position = 'bottom';\n top = targetOffsetTop + targetHeight + arrowSize;\n } else {\n // On middle\n position = 'middle';\n top = targetHeight / 2 + targetOffsetTop - height / 2;\n diff = top;\n top = Math.max(5, Math.min(top, app.height - height - 5));\n diff -= top;\n }\n\n // Horizontal Position\n if (position === 'top' || position === 'bottom') {\n left = targetWidth / 2 + targetOffsetLeft - width / 2;\n diff = left;\n left = Math.max(5, Math.min(left, app.width - width - 5));\n if (safeAreaLeft) {\n left = Math.max(left, safeAreaLeft);\n }\n if (safeAreaRight && left + width > app.width - 5 - safeAreaRight) {\n left = app.width - 5 - safeAreaRight - width;\n }\n diff -= left;\n if (hasArrow) {\n if (position === 'top') {\n $arrowEl.addClass('on-bottom');\n }\n if (position === 'bottom') {\n $arrowEl.addClass('on-top');\n }\n arrowLeft = width / 2 - arrowSize + diff;\n arrowLeft = Math.max(Math.min(arrowLeft, width - arrowSize * 2 - arrowMin), arrowMin);\n $arrowEl.css({\n left: `${arrowLeft}px`\n });\n }\n } else if (position === 'middle') {\n left = targetOffsetLeft - width - arrowSize;\n if (hasArrow) $arrowEl.addClass('on-right');\n if (left < 5 || left + width + safeAreaRight > app.width || left < safeAreaLeft) {\n if (left < 5) left = targetOffsetLeft + targetWidth + arrowSize;\n if (left + width + safeAreaRight > app.width) left = app.width - width - 5 - safeAreaRight;\n if (left < safeAreaLeft) left = safeAreaLeft;\n if (hasArrow) $arrowEl.removeClass('on-right').addClass('on-left');\n }\n if (hasArrow) {\n arrowTop = height / 2 - arrowSize + diff;\n arrowTop = Math.max(Math.min(arrowTop, height - arrowSize * 2 - arrowMin), arrowMin);\n $arrowEl.css({\n top: `${arrowTop}px`\n });\n }\n }\n\n // Horizontal Position\n let hPosition;\n if (targetOffsetLeft < app.width / 2) {\n hPosition = 'right';\n } else {\n hPosition = 'left';\n }\n $el.addClass(`popover-on-${position} popover-on-${hPosition}`);\n\n // Apply Styles\n $el.css({\n top: `${top}px`,\n left: `${left}px`\n });\n }\n}\nexport default Popover;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Popover from './popover-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'popover',\n params: {\n popover: {\n verticalPosition: 'auto',\n arrow: true,\n backdrop: true,\n backdropEl: undefined,\n backdropUnique: false,\n closeByBackdropClick: true,\n closeByOutsideClick: true,\n closeOnEscape: false,\n containerEl: null\n }\n },\n static: {\n Popover\n },\n create() {\n const app = this;\n app.popover = extend(ModalMethods({\n app,\n constructor: Popover,\n defaultSelector: '.popover.modal-in'\n }), {\n open(popoverEl, targetEl, animate) {\n let $popoverEl = $(popoverEl);\n if ($popoverEl.length > 1) {\n // check if same popover in other page\n const $targetPage = $(targetEl).parents('.page');\n if ($targetPage.length) {\n $popoverEl.each(el => {\n const $el = $(el);\n if ($el.parents($targetPage)[0] === $targetPage[0]) {\n $popoverEl = $el;\n }\n });\n }\n }\n if ($popoverEl.length > 1) {\n $popoverEl = $popoverEl.eq($popoverEl.length - 1);\n }\n let popover = $popoverEl[0].f7Modal;\n const data = $popoverEl.dataset();\n if (!popover) {\n popover = new Popover(app, Object.assign({\n el: $popoverEl,\n targetEl\n }, data));\n }\n return popover.open(targetEl, animate);\n }\n });\n },\n clicks: {\n '.popover-open': function openPopover($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popover.open(data.popover, $clickedEl, data.animate);\n },\n '.popover-close': function closePopover($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.popover.close(data.popover, data.animate, $clickedEl);\n }\n }\n};", "/* eslint indent: [\"off\"] */\nimport { getWindow, getDocument } from 'ssr-window';\nimport { getDevice } from '../../shared/get-device.js';\nimport { extend, nextTick } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\nimport $ from '../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Actions extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.actions, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const actions = this;\n const device = getDevice();\n const window = getWindow();\n const document = getDocument();\n actions.params = extendedParams;\n\n // Buttons\n let groups;\n if (actions.params.buttons) {\n groups = actions.params.buttons;\n if (!Array.isArray(groups[0])) groups = [groups];\n }\n actions.groups = groups;\n\n // Find Element\n let $el;\n if (actions.params.el) {\n $el = $(actions.params.el).eq(0);\n } else if (actions.params.content) {\n $el = $(actions.params.content).filter(node => node.nodeType === 1).eq(0);\n } else if (actions.params.buttons) {\n if (actions.params.convertToPopover) {\n actions.popoverHtml = actions.renderPopover();\n }\n actions.actionsHtml = actions.render();\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el && $el.length === 0 && !(actions.actionsHtml || actions.popoverHtml)) {\n return actions.destroy();\n }\n\n // Backdrop\n let $backdropEl;\n if (actions.params.backdrop && actions.params.backdropEl) {\n $backdropEl = $(actions.params.backdropEl);\n } else if (actions.params.backdrop) {\n if (actions.params.backdropUnique) {\n $backdropEl = $('');\n actions.$containerEl.append($backdropEl);\n } else {\n $backdropEl = actions.$containerEl.children('.actions-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n actions.$containerEl.append($backdropEl);\n }\n }\n const originalOpen = actions.open;\n const originalClose = actions.close;\n let popover;\n function buttonOnClick(e) {\n const $buttonEl = $(this);\n let buttonIndex;\n let groupIndex;\n if ($buttonEl.hasClass('list-button') || $buttonEl.hasClass('item-link')) {\n buttonIndex = $buttonEl.parents('li').index();\n groupIndex = $buttonEl.parents('.list').index();\n } else {\n buttonIndex = $buttonEl.index();\n groupIndex = $buttonEl.parents('.actions-group').index();\n }\n if (typeof groups !== 'undefined') {\n const button = groups[groupIndex][buttonIndex];\n if (button.onClick) button.onClick(actions, e);\n if (actions.params.onClick) actions.params.onClick(actions, e);\n if (button.close !== false) actions.close();\n }\n }\n actions.open = function open(animate) {\n let convertToPopover = false;\n const {\n targetEl,\n targetX,\n targetY,\n targetWidth,\n targetHeight\n } = actions.params;\n if (actions.params.convertToPopover && (targetEl || targetX !== undefined && targetY !== undefined)) {\n // Popover\n if (actions.params.forceToPopover || device.ios && device.ipad || app.width >= 768 || device.desktop) {\n convertToPopover = true;\n }\n }\n if (convertToPopover && actions.popoverHtml) {\n popover = app.popover.create({\n containerEl: actions.params.containerEl,\n content: actions.popoverHtml,\n backdrop: actions.params.backdrop,\n targetEl,\n targetX,\n targetY,\n targetWidth,\n targetHeight,\n on: {\n open() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:open ${actions.type.toLowerCase()}:open`);\n actions.emit(`local::open modalOpen ${actions.type}Open`, actions);\n },\n opened() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:opened ${actions.type.toLowerCase()}:opened`);\n actions.emit(`local::opened modalOpened ${actions.type}Opened`, actions);\n },\n close() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:close ${actions.type.toLowerCase()}:close`);\n actions.emit(`local::close modalClose ${actions.type}Close`, actions);\n },\n closed() {\n if (!actions.$el) {\n actions.$el = popover.$el;\n }\n actions.$el.trigger(`modal:closed ${actions.type.toLowerCase()}:closed`);\n actions.emit(`local::closed modalClosed ${actions.type}Closed`, actions);\n }\n }\n });\n popover.open(animate);\n popover.once('popoverOpened', () => {\n popover.$el.find('.list-button, .item-link').each(buttonEl => {\n $(buttonEl).on('click', buttonOnClick);\n });\n });\n popover.once('popoverClosed', () => {\n popover.$el.find('.list-button, .item-link').each(buttonEl => {\n $(buttonEl).off('click', buttonOnClick);\n });\n nextTick(() => {\n popover.destroy();\n popover = undefined;\n });\n });\n } else {\n actions.$el = actions.actionsHtml ? $(actions.actionsHtml) : actions.$el;\n actions.$el[0].f7Modal = actions;\n if (actions.groups) {\n actions.$el.find('.actions-button').each(buttonEl => {\n $(buttonEl).on('click', buttonOnClick);\n });\n actions.once('actionsClosed', () => {\n actions.$el.find('.actions-button').each(buttonEl => {\n $(buttonEl).off('click', buttonOnClick);\n });\n });\n }\n actions.el = actions.$el[0];\n originalOpen.call(actions, animate);\n }\n return actions;\n };\n actions.close = function close(animate) {\n if (popover) {\n popover.close(animate);\n } else {\n originalClose.call(actions, animate);\n }\n return actions;\n };\n extend(actions, {\n app,\n $el,\n el: $el ? $el[0] : undefined,\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'actions'\n });\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(actions.el).length === 0) {\n if (actions.params.closeByBackdropClick && actions.params.backdrop && actions.backdropEl && actions.backdropEl === target) {\n actions.close();\n } else if (actions.params.closeByOutsideClick) {\n actions.close();\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && actions.params.closeOnEscape) {\n actions.close();\n }\n }\n if (actions.params.closeOnEscape) {\n actions.on('open', () => {\n $(document).on('keydown', onKeyDown);\n });\n actions.on('close', () => {\n $(document).off('keydown', onKeyDown);\n });\n }\n actions.on('opened', () => {\n if (actions.params.closeByBackdropClick || actions.params.closeByOutsideClick) {\n app.on('click', handleClick);\n }\n });\n actions.on('close', () => {\n if (actions.params.closeByBackdropClick || actions.params.closeByOutsideClick) {\n app.off('click', handleClick);\n }\n });\n if ($el) {\n $el[0].f7Modal = actions;\n }\n return actions;\n }\n render() {\n const actions = this;\n if (actions.params.render) return actions.params.render.call(actions, actions);\n const {\n groups\n } = actions;\n const cssClass = actions.params.cssClass;\n return $jsx(\"div\", {\n class: `actions-modal${actions.params.grid ? ' actions-grid' : ''} ${cssClass || ''}`\n }, groups.map(group => $jsx(\"div\", {\n class: \"actions-group\"\n }, group.map(button => {\n const buttonClasses = [`actions-${button.label ? 'label' : 'button'}`];\n const {\n color,\n bg,\n strong,\n disabled,\n label,\n text,\n icon\n } = button;\n if (color) buttonClasses.push(`color-${color}`);\n if (bg) buttonClasses.push(`bg-color-${bg}`);\n if (strong) buttonClasses.push('actions-button-strong');\n if (disabled) buttonClasses.push('disabled');\n if (label) {\n return $jsx(\"div\", {\n class: buttonClasses.join(' ')\n }, text);\n }\n return $jsx(\"div\", {\n class: buttonClasses.join(' ')\n }, icon && $jsx(\"div\", {\n class: \"actions-button-media\"\n }, icon), $jsx(\"div\", {\n class: \"actions-button-text\"\n }, text));\n }))));\n }\n renderPopover() {\n const actions = this;\n if (actions.params.renderPopover) return actions.params.renderPopover.call(actions, actions);\n const {\n groups\n } = actions;\n const cssClass = actions.params.cssClass;\n return $jsx(\"div\", {\n class: `popover popover-from-actions ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, groups.map(group => $jsx(\"div\", {\n class: \"list\"\n }, $jsx(\"ul\", null, group.map(button => {\n const itemClasses = [];\n const {\n color,\n bg,\n strong,\n disabled,\n label,\n text,\n icon\n } = button;\n if (color) itemClasses.push(`color-${color}`);\n if (bg) itemClasses.push(`bg-color-${bg}`);\n if (strong) itemClasses.push('popover-from-actions-strong');\n if (disabled) itemClasses.push('disabled');\n if (label) {\n itemClasses.push('popover-from-actions-label');\n return `- ${text}
`;\n }\n if (icon) {\n itemClasses.push('item-link item-content');\n return $jsx(\"li\", null, $jsx(\"a\", {\n class: itemClasses.join(' ')\n }, $jsx(\"div\", {\n class: \"item-media\"\n }, icon), $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, text))));\n }\n itemClasses.push('list-button');\n return $jsx(\"li\", null, $jsx(\"a\", {\n class: itemClasses.join(' ')\n }, text));\n }))))));\n }\n}\nexport default Actions;", "import Actions from './actions-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'actions',\n params: {\n actions: {\n convertToPopover: true,\n forceToPopover: false,\n backdrop: true,\n backdropEl: undefined,\n backdropUnique: false,\n cssClass: null,\n closeByBackdropClick: true,\n closeOnEscape: false,\n render: null,\n renderPopover: null,\n containerEl: null\n }\n },\n static: {\n Actions\n },\n create() {\n const app = this;\n app.actions = ModalMethods({\n app,\n constructor: Actions,\n defaultSelector: '.actions-modal.modal-in'\n });\n },\n clicks: {\n '.actions-open': function openActions($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.actions.open(data.actions, data.animate, $clickedEl);\n },\n '.actions-close': function closeActions($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.actions.close(data.actions, data.animate, $clickedEl);\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, now, getTranslate } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Modal from '../modal/modal-class.js';\nclass Sheet extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.sheet, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const sheet = this;\n const window = getWindow();\n const document = getDocument();\n const support = getSupport();\n const device = getDevice();\n sheet.params = extendedParams;\n if (typeof sheet.params.backdrop === 'undefined') {\n sheet.params.backdrop = app.theme !== 'ios';\n }\n\n // Find Element\n let $el;\n if (!sheet.params.el) {\n $el = $(sheet.params.content).filter(node => node.nodeType === 1).eq(0);\n } else {\n $el = $(sheet.params.el).eq(0);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return sheet.destroy();\n }\n let $backdropEl;\n if (sheet.params.backdrop && sheet.params.backdropEl) {\n $backdropEl = $(sheet.params.backdropEl);\n } else if (sheet.params.backdrop) {\n if (sheet.params.backdropUnique) {\n $backdropEl = $('');\n sheet.$containerEl.append($backdropEl);\n } else {\n $backdropEl = sheet.$containerEl.children('.sheet-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n sheet.$containerEl.append($backdropEl);\n }\n }\n extend(sheet, {\n app,\n push: $el.hasClass('sheet-modal-push') || sheet.params.push,\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n type: 'sheet',\n $htmlEl: $('html')\n });\n if (sheet.params.push) {\n $el.addClass('sheet-modal-push');\n }\n let $pageContentEl;\n function scrollToElementOnOpen() {\n const $scrollEl = $(sheet.params.scrollToEl).eq(0);\n if ($scrollEl.length === 0) return;\n $pageContentEl = $scrollEl.parents('.page-content');\n if ($pageContentEl.length === 0) return;\n const paddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const paddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n const pageHeight = $pageContentEl[0].offsetHeight - paddingTop - $el.height();\n const pageScrollHeight = $pageContentEl[0].scrollHeight - paddingTop - $el.height();\n const pageScroll = $pageContentEl.scrollTop();\n let newPaddingBottom;\n const scrollElTop = $scrollEl.offset().top - paddingTop + $scrollEl[0].offsetHeight;\n if (scrollElTop > pageHeight) {\n const scrollTop = pageScroll + scrollElTop - pageHeight;\n if (scrollTop + pageHeight > pageScrollHeight) {\n newPaddingBottom = scrollTop + pageHeight - pageScrollHeight + paddingBottom;\n if (pageHeight === pageScrollHeight) {\n newPaddingBottom = $el.height();\n }\n $pageContentEl.css({\n 'padding-bottom': `${newPaddingBottom}px`\n });\n }\n $pageContentEl.scrollTop(scrollTop, 300);\n }\n }\n function scrollToElementOnClose() {\n if ($pageContentEl && $pageContentEl.length > 0) {\n $pageContentEl.css({\n 'padding-bottom': ''\n });\n }\n }\n function handleClick(e) {\n const target = e.target;\n const $target = $(target);\n const keyboardOpened = !device.desktop && device.cordova && (window.Keyboard && window.Keyboard.isVisible || window.cordova.plugins && window.cordova.plugins.Keyboard && window.cordova.plugins.Keyboard.isVisible);\n if (keyboardOpened) return;\n if ($target.closest(sheet.el).length === 0) {\n if (sheet.params.closeByBackdropClick && sheet.params.backdrop && sheet.backdropEl && sheet.backdropEl === target) {\n sheet.close();\n } else if (sheet.params.closeByOutsideClick) {\n sheet.close();\n }\n }\n }\n function onKeyDown(e) {\n const keyCode = e.keyCode;\n if (keyCode === 27 && sheet.params.closeOnEscape) {\n sheet.close();\n }\n }\n let pushOffset;\n function pushViewScale(offset) {\n return (app.height - offset * 2) / app.height;\n }\n const useBreakpoints = sheet.params.breakpoints && sheet.params.breakpoints.length > 0;\n let isTouched = false;\n let startTouch;\n let currentTouch;\n let isScrolling;\n let touchStartTime;\n let touchesDiff;\n let isMoved = false;\n let isTopSheetModal;\n let swipeStepTranslate;\n let startTranslate;\n let currentTranslate;\n let sheetElOffsetHeight;\n let minTranslate;\n let maxTranslate;\n let $pushViewEl;\n let pushBorderRadius;\n let sheetPageContentEl;\n let sheetPageContentScrollTop;\n let sheetPageContentScrollHeight;\n let sheetPageContentOffsetHeight;\n let breakpointsTranslate = [];\n let currentBreakpointIndex;\n let backdropBreakpointSet = true;\n function handleTouchStart(e) {\n if (isTouched || !(sheet.params.swipeToClose || sheet.params.swipeToStep) || !e.isTrusted) return;\n if (sheet.params.swipeHandler && $(e.target).closest(sheet.params.swipeHandler).length === 0) {\n return;\n }\n if ($(e.target).closest('.sortable-handler').length > 0) return;\n isTouched = true;\n isMoved = false;\n startTouch = {\n x: e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY\n };\n touchStartTime = now();\n isScrolling = undefined;\n isTopSheetModal = $el.hasClass('sheet-modal-top');\n if (!sheet.params.swipeHandler && e.type === 'touchstart') {\n sheetPageContentEl = $(e.target).closest('.page-content')[0];\n }\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n currentTouch = {\n x: e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX,\n y: e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY\n };\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(currentTouch.x - startTouch.x) > Math.abs(currentTouch.y - startTouch.y));\n }\n if (isScrolling) {\n isTouched = false;\n isMoved = false;\n return;\n }\n touchesDiff = startTouch.y - currentTouch.y;\n const direction = touchesDiff < 0 ? 'to-bottom' : 'to-top';\n if (!isMoved) {\n if (sheetPageContentEl && !$el.hasClass('modal-in-swipe-step')) {\n sheetPageContentScrollTop = sheetPageContentEl.scrollTop;\n sheetPageContentScrollHeight = sheetPageContentEl.scrollHeight;\n sheetPageContentOffsetHeight = sheetPageContentEl.offsetHeight;\n if (!(sheetPageContentScrollHeight === sheetPageContentOffsetHeight) && !(direction === 'to-bottom' && sheetPageContentScrollTop === 0) && !(direction === 'to-top' && sheetPageContentScrollTop === sheetPageContentScrollHeight - sheetPageContentOffsetHeight)) {\n $el.transform('');\n isTouched = false;\n isMoved = false;\n return;\n }\n }\n if (sheet.push && pushOffset) {\n $pushViewEl = app.$el.children('.view, .views');\n }\n sheetElOffsetHeight = $el[0].offsetHeight;\n startTranslate = getTranslate($el[0], 'y');\n if (isTopSheetModal) {\n minTranslate = sheet.params.swipeToClose ? -sheetElOffsetHeight : -swipeStepTranslate;\n maxTranslate = 0;\n } else {\n minTranslate = 0;\n maxTranslate = sheet.params.swipeToClose ? sheetElOffsetHeight : useBreakpoints ? breakpointsTranslate[0] : swipeStepTranslate;\n }\n isMoved = true;\n }\n currentTranslate = startTranslate - touchesDiff;\n currentTranslate = Math.min(Math.max(currentTranslate, minTranslate), maxTranslate);\n e.preventDefault();\n if (useBreakpoints) {\n let progress = isTopSheetModal ? 1 + currentTranslate / sheetElOffsetHeight : 1 - currentTranslate / sheetElOffsetHeight;\n progress = Math.abs(progress);\n progress = Math.min(Math.max(progress, 0), 1);\n // eslint-disable-next-line\n setBackdropBreakpoint(progress);\n // eslint-disable-next-line\n setPushBreakpoint(progress);\n }\n if (sheet.push && pushOffset && !useBreakpoints) {\n let progress = (currentTranslate - startTranslate) / sheetElOffsetHeight;\n if (sheet.params.swipeToStep) {\n if (isTopSheetModal) {\n progress = currentTranslate / swipeStepTranslate;\n } else {\n progress = 1 - (swipeStepTranslate - currentTranslate) / swipeStepTranslate;\n }\n }\n progress = Math.abs(progress);\n progress = Math.min(Math.max(progress, 0), 1);\n const pushProgress = 1 - progress;\n const scale = 1 - (1 - pushViewScale(pushOffset)) * pushProgress;\n $pushViewEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${scale})`, 'important');\n });\n if (sheet.params.swipeToStep) {\n $pushViewEl.css('border-radius', `${pushBorderRadius * pushProgress}px`);\n }\n }\n $el.transition(0).transform(`translate3d(0,${currentTranslate}px,0)`);\n if (sheet.params.swipeToStep) {\n let progress;\n if (isTopSheetModal) {\n progress = 1 - currentTranslate / swipeStepTranslate;\n } else {\n progress = (swipeStepTranslate - currentTranslate) / swipeStepTranslate;\n }\n progress = Math.min(Math.max(progress, 0), 1);\n $el.trigger('sheet:stepprogress', progress);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, progress);\n }\n }\n function handleTouchEnd() {\n isTouched = false;\n if (!isMoved) {\n return;\n }\n isMoved = false;\n $el.transform('').transition('');\n if (sheet.push && pushOffset) {\n $pushViewEl.transition('');\n if (!useBreakpoints) {\n $pushViewEl.transform('');\n $pushViewEl.css('border-radius', '');\n }\n }\n const direction = touchesDiff < 0 ? 'to-bottom' : 'to-top';\n const diff = Math.abs(touchesDiff);\n if (diff === 0 || currentTranslate === startTranslate) return;\n const timeDiff = new Date().getTime() - touchStartTime;\n if (!sheet.params.swipeToStep && !useBreakpoints) {\n if (direction !== (isTopSheetModal ? 'to-top' : 'to-bottom')) {\n return;\n }\n if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > sheetElOffsetHeight / 2) {\n sheet.close();\n }\n return;\n }\n const openDirection = isTopSheetModal ? 'to-bottom' : 'to-top';\n const closeDirection = isTopSheetModal ? 'to-top' : 'to-bottom';\n const absCurrentTranslate = Math.abs(currentTranslate);\n const absSwipeStepTranslate = Math.abs(swipeStepTranslate);\n if (timeDiff < 300 && diff > 10 && useBreakpoints) {\n // SHORT SWIPES BREAKPOINTS\n if (direction === openDirection && typeof currentBreakpointIndex !== 'undefined') {\n if (currentBreakpointIndex === params.breakpoints.length - 1) {\n // open\n sheet.setBreakpoint(1);\n } else {\n // move to next breakpoint\n currentBreakpointIndex = Math.min(breakpointsTranslate.length - 1, currentBreakpointIndex + 1);\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n }\n if (direction === closeDirection) {\n if (currentBreakpointIndex === 0) {\n // close\n sheet.close();\n } else {\n // move to prev breakpoint\n if (typeof currentBreakpointIndex === 'undefined') {\n currentBreakpointIndex = params.breakpoints.length - 1;\n } else {\n currentBreakpointIndex = Math.max(0, currentBreakpointIndex - 1);\n }\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n }\n } else if (timeDiff < 300 && diff > 10) {\n // SHORT SWIPES SWIPE STEP\n if (direction === openDirection && absCurrentTranslate < absSwipeStepTranslate) {\n // open step\n $el.removeClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 1);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 1);\n sheet.emit('local::_swipeStep', false);\n $el.trigger('sheet:stepopen');\n sheet.emit('local::stepOpen sheetStepOpen', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n $pushViewEl.css('border-radius', '');\n }\n }\n if (direction === closeDirection && absCurrentTranslate > absSwipeStepTranslate) {\n // close sheet\n if (sheet.params.swipeToClose) {\n sheet.close();\n } else {\n // close step\n $el.addClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 0);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 0);\n sheet.emit('local::_swipeStep', true);\n $el.trigger('sheet:stepclose');\n sheet.emit('local::stepClose sheetStepClose', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n $pushViewEl.css('border-radius', '0px');\n }\n }\n }\n if (direction === closeDirection && absCurrentTranslate <= absSwipeStepTranslate) {\n // close step\n $el.addClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 0);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 0);\n sheet.emit('local::_swipeStep', true);\n $el.trigger('sheet:stepclose');\n sheet.emit('local::stepClose sheetStepClose', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n $pushViewEl.css('border-radius', '0px');\n }\n }\n return;\n }\n if (timeDiff >= 300 && useBreakpoints) {\n // LONG SWIPES BREAKPOINTS\n const allBreakpoints = [sheetElOffsetHeight, ...breakpointsTranslate, 0];\n const closestTranslate = allBreakpoints.reduce((prev, curr) => {\n return Math.abs(curr - currentTranslate) < Math.abs(prev - currentTranslate) ? curr : prev;\n });\n const closestIndex = allBreakpoints.indexOf(closestTranslate);\n if (closestTranslate === 0) {\n // open\n sheet.setBreakpoint(1);\n } else if (closestIndex === 0) {\n // close\n sheet.close();\n } else {\n // set bp\n currentBreakpointIndex = closestIndex - 1;\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n } else if (timeDiff >= 300) {\n // LONG SWIPES SWIPE STEP\n const stepOpened = !$el.hasClass('modal-in-swipe-step');\n if (!stepOpened) {\n if (absCurrentTranslate < absSwipeStepTranslate / 2) {\n // open step\n $el.removeClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 1);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 1);\n sheet.emit('local::_swipeStep', false);\n $el.trigger('sheet:stepopen');\n sheet.emit('local::stepOpen sheetStepOpen', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n $pushViewEl.css('border-radius', '');\n }\n } else if (absCurrentTranslate - absSwipeStepTranslate > (sheetElOffsetHeight - absSwipeStepTranslate) / 2) {\n // close sheet\n if (sheet.params.swipeToClose) sheet.close();\n }\n } else if (stepOpened) {\n if (absCurrentTranslate > absSwipeStepTranslate + (sheetElOffsetHeight - absSwipeStepTranslate) / 2) {\n // close sheet\n if (sheet.params.swipeToClose) sheet.close();\n } else if (absCurrentTranslate > absSwipeStepTranslate / 2) {\n // close step\n $el.addClass('modal-in-swipe-step');\n $el.trigger('sheet:stepprogress', 0);\n sheet.emit('local::stepProgress sheetStepProgress', sheet, 0);\n sheet.emit('local::_swipeStep', true);\n $el.trigger('sheet:stepclose');\n sheet.emit('local::stepClose sheetStepClose', sheet);\n if (sheet.push && pushOffset) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n $pushViewEl.css('border-radius', '0px');\n }\n }\n }\n }\n }\n const setPushBreakpoint = breakpoint => {\n const {\n pushBreakpoint\n } = params;\n if (pushBreakpoint === null || typeof pushBreakpoint === 'undefined' || !sheet.push || !pushOffset) return;\n if (breakpoint >= pushBreakpoint) {\n sheet.$htmlEl.addClass('with-modal-sheet-push').removeClass('with-modal-sheet-push-closing');\n $pushViewEl.transition('').forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${pushViewScale(pushOffset)})`, 'important');\n });\n $pushViewEl.css('border-radius', `${pushBorderRadius * 1}px`);\n } else {\n const pushBreakpoints = [0, ...params.breakpoints, 1];\n const pushTransparentBreakpoint = pushBreakpoints[pushBreakpoints.indexOf(pushBreakpoint) - 1];\n if (breakpoint <= pushTransparentBreakpoint) {\n $pushViewEl.transition('').css('transform', '');\n $pushViewEl.css('border-radius', '');\n sheet.$htmlEl.removeClass('with-modal-sheet-push');\n if (breakpoint === pushTransparentBreakpoint) {\n sheet.$htmlEl.addClass('with-modal-sheet-push-closing');\n }\n } else {\n const progress = (breakpoint - pushTransparentBreakpoint) / (pushBreakpoint - pushTransparentBreakpoint);\n sheet.$htmlEl.addClass('with-modal-sheet-push').removeClass('with-modal-sheet-push-closing');\n $pushViewEl.transition(0).forEach(el => {\n el.style.setProperty('transform', `translate3d(0,0,0) scale(${1 - (1 - pushViewScale(pushOffset)) * progress})`, 'important');\n });\n $pushViewEl.css('border-radius', `${pushBorderRadius * progress}px`);\n }\n }\n };\n const setBackdropBreakpoint = breakpoint => {\n const {\n backdrop,\n backdropBreakpoint\n } = params;\n if (!backdropBreakpoint || !backdrop || !$backdropEl.length) return;\n if (breakpoint >= backdropBreakpoint) {\n if (!backdropBreakpointSet) {\n $backdropEl.transition('').css({\n opacity: '',\n pointerEvents: ''\n });\n }\n backdropBreakpointSet = true;\n } else {\n const backdropBreakpoints = [0, ...params.breakpoints, 1];\n const backdropTransparentBreakpoint = backdropBreakpoints[backdropBreakpoints.indexOf(backdropBreakpoint) - 1];\n if (breakpoint <= backdropTransparentBreakpoint) {\n if (backdropBreakpointSet) {\n $backdropEl.transition('').css({\n opacity: 0,\n pointerEvents: 'none'\n });\n }\n backdropBreakpointSet = false;\n } else {\n const progress = (breakpoint - backdropTransparentBreakpoint) / (backdropBreakpoint - backdropTransparentBreakpoint);\n $backdropEl.transition(0).css({\n opacity: progress,\n pointerEvents: 'auto'\n });\n }\n }\n };\n sheet.calcBreakpoints = () => {\n if (!useBreakpoints) {\n return;\n }\n const fullSize = $el[0].offsetHeight;\n // eslint-disable-next-line\n const isTopSheetModal = $el.hasClass('sheet-modal-top');\n breakpointsTranslate = [];\n sheet.params.breakpoints.forEach(ratio => {\n breakpointsTranslate.push((fullSize - fullSize * ratio) * (isTopSheetModal ? -1 : 1));\n });\n };\n sheet.setBreakpoint = value => {\n if (!useBreakpoints) {\n return sheet;\n }\n if (value === 1) {\n // open\n if (!sheet.opened) {\n sheet.open();\n }\n $el.removeClass('modal-in-breakpoint');\n currentBreakpointIndex = undefined;\n setBackdropBreakpoint(value);\n setPushBreakpoint(value);\n $el.trigger('sheet:breakpoint', value);\n sheet.emit('local::breakpoint sheetBreakpoint', sheet, value);\n } else if (value === 0) {\n // close\n $el.trigger('sheet:breakpoint', value);\n sheet.emit('local::breakpoint sheetBreakpoint', sheet, value);\n sheet.close();\n } else {\n const index = params.breakpoints.indexOf(value);\n if (index < 0) return sheet;\n if (!sheet.opened) {\n sheet.open();\n }\n setBackdropBreakpoint(value);\n setPushBreakpoint(value);\n $el.trigger('sheet:breakpoint', value);\n sheet.emit('local::breakpoint sheetBreakpoint', sheet, value);\n currentBreakpointIndex = index;\n $el[0].style.setProperty('--f7-sheet-breakpoint', `${breakpointsTranslate[index]}px`);\n $el.addClass('modal-in-breakpoint');\n }\n return sheet;\n };\n const setBreakpointsOnResize = () => {\n sheet.calcBreakpoints();\n if (typeof currentBreakpointIndex !== 'undefined') {\n sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);\n }\n };\n sheet.setSwipeStep = function setSwipeStep(byResize) {\n if (byResize === void 0) {\n byResize = true;\n }\n const $swipeStepEl = $el.find('.sheet-modal-swipe-step').eq(0);\n if (!$swipeStepEl.length) return;\n\n // eslint-disable-next-line\n if ($el.hasClass('sheet-modal-top')) {\n swipeStepTranslate = -($swipeStepEl.offset().top - $el.offset().top + $swipeStepEl[0].offsetHeight);\n } else {\n swipeStepTranslate = $el[0].offsetHeight - ($swipeStepEl.offset().top - $el.offset().top + $swipeStepEl[0].offsetHeight);\n }\n $el[0].style.setProperty('--f7-sheet-swipe-step', `${swipeStepTranslate}px`);\n if (!byResize) {\n $el.addClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', true);\n }\n };\n function onResize() {\n if (useBreakpoints) {\n setBreakpointsOnResize();\n } else {\n sheet.setSwipeStep(true);\n }\n }\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (sheet.params.swipeToClose || sheet.params.swipeToStep || useBreakpoints) {\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n sheet.once('sheetDestroy', () => {\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n });\n }\n sheet.on('open', () => {\n if (sheet.params.closeOnEscape) {\n $(document).on('keydown', onKeyDown);\n }\n $el.prevAll('.popup.modal-in').addClass('popup-behind');\n app.on('resize', onResize);\n if (sheet.params.scrollToEl) {\n scrollToElementOnOpen();\n }\n if (sheet.push) {\n pushOffset = parseInt($el.css('--f7-sheet-push-offset'), 10);\n if (Number.isNaN(pushOffset)) pushOffset = 0;\n if (!pushOffset) pushOffset = app.theme === 'ios' ? 44 : 48;\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-offset', `${pushOffset}px`);\n $el.addClass('sheet-modal-push');\n if (!useBreakpoints) {\n sheet.$htmlEl.addClass('with-modal-sheet-push');\n }\n if (!sheet.params.swipeToStep && !useBreakpoints) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n } else {\n $pushViewEl = app.$el.children('.view, .views');\n pushBorderRadius = app.theme === 'ios' ? 10 : 16;\n $pushViewEl.css('border-radius', '0px');\n }\n }\n if (useBreakpoints) {\n sheet.calcBreakpoints();\n sheet.setBreakpoint(params.breakpoints[0]);\n } else if (sheet.params.swipeToStep) {\n sheet.setSwipeStep(false);\n }\n });\n sheet.on('opened', () => {\n if (sheet.params.closeByOutsideClick || sheet.params.closeByBackdropClick) {\n app.on('click', handleClick);\n }\n });\n sheet.on('close', () => {\n currentBreakpointIndex = undefined;\n if (sheet.params.swipeToStep || useBreakpoints) {\n $el.removeClass('modal-in-swipe-step modal-in-breakpoint');\n sheet.emit('local::_swipeStep', false);\n }\n app.off('resize', onResize);\n if (sheet.params.closeOnEscape) {\n $(document).off('keydown', onKeyDown);\n }\n if (sheet.params.scrollToEl) {\n scrollToElementOnClose();\n }\n if (sheet.params.closeByOutsideClick || sheet.params.closeByBackdropClick) {\n app.off('click', handleClick);\n }\n $el.prevAll('.popup.modal-in').eq(0).removeClass('popup-behind');\n if (sheet.push && pushOffset) {\n sheet.$htmlEl.removeClass('with-modal-sheet-push');\n sheet.$htmlEl.addClass('with-modal-sheet-push-closing');\n if ($pushViewEl) {\n $pushViewEl.transform('');\n $pushViewEl.css('border-radius', '');\n }\n }\n });\n sheet.on('closed', () => {\n if (sheet.push && pushOffset) {\n sheet.$htmlEl.removeClass('with-modal-sheet-push-closing');\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-offset');\n }\n });\n sheet.stepOpen = function stepOpen() {\n $el.removeClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', false);\n if (sheet.push) {\n if (!pushOffset) {\n pushOffset = parseInt($el.css('--f7-sheet-push-offset'), 10);\n if (Number.isNaN(pushOffset)) pushOffset = 0;\n }\n if (pushOffset) {\n sheet.$htmlEl[0].style.setProperty('--f7-sheet-push-scale', pushViewScale(pushOffset));\n }\n }\n };\n sheet.stepClose = function stepClose() {\n $el.addClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', true);\n if (sheet.push) {\n sheet.$htmlEl[0].style.removeProperty('--f7-sheet-push-scale');\n }\n };\n sheet.stepToggle = function stepToggle() {\n $el.toggleClass('modal-in-swipe-step');\n sheet.emit('local::_swipeStep', $el.hasClass('modal-in-swipe-step'));\n };\n $el[0].f7Modal = sheet;\n return sheet;\n }\n}\nexport default Sheet;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Sheet from './sheet-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'sheet',\n params: {\n sheet: {\n push: false,\n backdrop: undefined,\n backdropEl: undefined,\n backdropUnique: false,\n closeByBackdropClick: true,\n closeByOutsideClick: false,\n closeOnEscape: false,\n swipeToClose: false,\n swipeToStep: false,\n breakpoints: [],\n backdropBreakpoint: 0,\n pushBreakpoint: 0,\n swipeHandler: null,\n containerEl: null\n }\n },\n static: {\n Sheet\n },\n create() {\n const app = this;\n app.sheet = extend({}, ModalMethods({\n app,\n constructor: Sheet,\n defaultSelector: '.sheet-modal.modal-in'\n }), {\n stepOpen(sheet) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.stepOpen) return sheetInstance.stepOpen();\n return undefined;\n },\n stepClose(sheet) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.stepClose) return sheetInstance.stepClose();\n return undefined;\n },\n stepToggle(sheet) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.stepToggle) return sheetInstance.stepToggle();\n return undefined;\n },\n setBreakpoint(sheet, breakpoint) {\n const sheetInstance = app.sheet.get(sheet);\n if (sheetInstance && sheetInstance.setBreakpoint) return sheetInstance.setBreakpoint(breakpoint);\n return undefined;\n }\n });\n },\n clicks: {\n '.sheet-open': function openSheet($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n if ($('.sheet-modal.modal-in').length > 0 && data.sheet && $(data.sheet)[0] !== $('.sheet-modal.modal-in')[0]) {\n app.sheet.close('.sheet-modal.modal-in');\n }\n app.sheet.open(data.sheet, data.animate, $clickedEl);\n },\n '.sheet-close': function closeSheet($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sheet.close(data.sheet, data.animate, $clickedEl);\n }\n }\n};", "import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, nextTick } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Toast extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.toast, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const toast = this;\n const window = getWindow();\n toast.app = app;\n toast.params = extendedParams;\n const {\n closeButton,\n closeTimeout\n } = toast.params;\n let $el;\n if (!toast.params.el) {\n // Find Element\n const toastHtml = toast.render();\n $el = $(toastHtml);\n } else {\n $el = $(toast.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return toast.destroy();\n }\n extend(toast, {\n $el,\n el: $el[0],\n type: 'toast'\n });\n $el[0].f7Modal = toast;\n if (closeButton) {\n $el.find('.toast-button').on('click', () => {\n toast.emit('local::closeButtonClick toastCloseButtonClick', toast);\n toast.close();\n });\n toast.on('beforeDestroy', () => {\n $el.find('.toast-button').off('click');\n });\n }\n let timeoutId;\n toast.on('open', () => {\n $('.toast.modal-in').each(openedEl => {\n const toastInstance = app.toast.get(openedEl);\n if (openedEl !== toast.el && toastInstance) {\n toastInstance.close();\n }\n });\n if (closeTimeout) {\n timeoutId = nextTick(() => {\n toast.close();\n }, closeTimeout);\n }\n });\n toast.on('close', () => {\n window.clearTimeout(timeoutId);\n });\n if (toast.params.destroyOnClose) {\n toast.once('closed', () => {\n setTimeout(() => {\n toast.destroy();\n }, 0);\n });\n }\n return toast;\n }\n render() {\n const toast = this;\n if (toast.params.render) return toast.params.render.call(toast, toast);\n const {\n position,\n horizontalPosition,\n cssClass,\n icon,\n text,\n closeButton,\n closeButtonColor,\n closeButtonText\n } = toast.params;\n const horizontalClass = position === 'top' || position === 'bottom' ? `toast-horizontal-${horizontalPosition}` : '';\n return $jsx(\"div\", {\n class: `toast toast-${position} ${horizontalClass} ${cssClass || ''} ${icon ? 'toast-with-icon' : ''}`\n }, $jsx(\"div\", {\n class: \"toast-content\"\n }, icon && $jsx(\"div\", {\n class: \"toast-icon\"\n }, icon), $jsx(\"div\", {\n class: \"toast-text\"\n }, text), closeButton && !icon && $jsx(\"a\", {\n class: `toast-button button ${closeButtonColor ? `color-${closeButtonColor}` : ''}`\n }, closeButtonText)));\n }\n}\nexport default Toast;", "import { extend } from '../../shared/utils.js';\nimport Toast from './toast-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'toast',\n static: {\n Toast\n },\n create() {\n const app = this;\n app.toast = extend({}, ModalMethods({\n app,\n constructor: Toast,\n defaultSelector: '.toast.modal-in'\n }), {\n // Shortcuts\n show(params) {\n extend(params, {\n destroyOnClose: true\n });\n return new Toast(app, params).open();\n }\n });\n },\n params: {\n toast: {\n icon: null,\n text: null,\n position: 'bottom',\n horizontalPosition: 'left',\n closeButton: false,\n closeButtonColor: null,\n closeButtonText: 'Ok',\n closeTimeout: null,\n cssClass: null,\n render: null,\n containerEl: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nconst Preloader = {\n init(el) {\n const app = this;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const $el = $(el);\n if ($el.length === 0 || $el.children('.preloader-inner').length > 0 || $el.children('.preloader-inner-line').length > 0) return;\n $el.append(preloaders[`${app.theme}PreloaderContent`]);\n },\n // Modal\n visible: false,\n show(color) {\n if (color === void 0) {\n color = 'white';\n }\n const app = this;\n if (Preloader.visible) return;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || '';\n $('html').addClass('with-modal-preloader');\n // prettier-ignore\n app.$el.append(`\n \n \n `);\n Preloader.visible = true;\n },\n showIn(el, color) {\n if (color === void 0) {\n color = 'white';\n }\n const app = this;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || '';\n $(el || 'html').addClass('with-modal-preloader');\n // prettier-ignore\n $(el || app.$el).append(`\n \n \n `);\n },\n hide() {\n const app = this;\n if (!Preloader.visible) return;\n $('html').removeClass('with-modal-preloader');\n app.$el.find('.preloader-backdrop, .preloader-modal').remove();\n Preloader.visible = false;\n },\n hideIn(el) {\n const app = this;\n $(el || 'html').removeClass('with-modal-preloader');\n $(el || app.$el).find('.preloader-backdrop, .preloader-modal').remove();\n }\n};\nexport default {\n name: 'preloader',\n create() {\n const app = this;\n bindMethods(app, {\n preloader: Preloader\n });\n },\n on: {\n photoBrowserOpen(pb) {\n const app = this;\n pb.$el.find('.preloader').each(preloaderEl => {\n app.preloader.init(preloaderEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.preloader').each(preloaderEl => {\n app.preloader.init(preloaderEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.preloader').each(preloaderEl => {\n app.preloader.init(preloaderEl);\n });\n }\n },\n vnode: {\n preloader: {\n insert(vnode) {\n const app = this;\n const preloaderEl = vnode.elm;\n app.preloader.init(preloaderEl);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nconst Progressbar = {\n set() {\n const app = this;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [el, progress, duration] = args;\n if (typeof args[0] === 'number') {\n [progress, duration] = args;\n el = app.$el;\n }\n if (typeof progress === 'undefined' || progress === null) return el;\n if (!progress) progress = 0;\n const $el = $(el || app.$el);\n if ($el.length === 0) {\n return el;\n }\n const progressNormalized = Math.min(Math.max(progress, 0), 100);\n let $progressbarEl;\n if ($el.hasClass('progressbar')) $progressbarEl = $el.eq(0);else {\n $progressbarEl = $el.children('.progressbar');\n }\n if ($progressbarEl.length === 0 || $progressbarEl.hasClass('progressbar-infinite')) {\n return $progressbarEl;\n }\n let $progressbarLine = $progressbarEl.children('span');\n if ($progressbarLine.length === 0) {\n $progressbarLine = $('');\n $progressbarEl.append($progressbarLine);\n }\n $progressbarLine.transition(typeof duration !== 'undefined' ? duration : '').transform(`translate3d(${(-100 + progressNormalized) * (app.rtl ? -1 : 1)}%,0,0)`);\n return $progressbarEl[0];\n },\n show() {\n const app = this;\n\n // '.page', 50, 'multi'\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n let [el, progress, color] = args;\n let type = 'determined';\n if (args.length === 2) {\n if ((typeof args[0] === 'string' || typeof args[0] === 'object') && typeof args[1] === 'string') {\n // '.page', 'multi'\n [el, color, progress] = args;\n type = 'infinite';\n } else if (typeof args[0] === 'number' && typeof args[1] === 'string') {\n // 50, 'multi'\n [progress, color] = args;\n el = app.$el;\n }\n } else if (args.length === 1) {\n if (typeof args[0] === 'number') {\n el = app.$el;\n progress = args[0];\n } else if (typeof args[0] === 'string') {\n type = 'infinite';\n el = app.$el;\n color = args[0];\n }\n } else if (args.length === 0) {\n type = 'infinite';\n el = app.$el;\n }\n const $el = $(el);\n if ($el.length === 0) return undefined;\n let $progressbarEl;\n if ($el.hasClass('progressbar') || $el.hasClass('progressbar-infinite')) {\n $progressbarEl = $el;\n } else {\n $progressbarEl = $el.children('.progressbar:not(.progressbar-out), .progressbar-infinite:not(.progressbar-out)');\n if ($progressbarEl.length === 0) {\n $progressbarEl = $(`\n \n ${type === 'infinite' ? '' : ''}\n `);\n $el.append($progressbarEl);\n }\n }\n if (typeof progress !== 'undefined') {\n app.progressbar.set($progressbarEl, progress);\n }\n return $progressbarEl[0];\n },\n hide(el, removeAfterHide) {\n if (removeAfterHide === void 0) {\n removeAfterHide = true;\n }\n const app = this;\n const $el = $(el || app.$el);\n if ($el.length === 0) return undefined;\n let $progressbarEl;\n if ($el.hasClass('progressbar') || $el.hasClass('progressbar-infinite')) {\n $progressbarEl = $el;\n } else {\n $progressbarEl = $el.children('.progressbar, .progressbar-infinite');\n }\n if ($progressbarEl.length === 0 || !$progressbarEl.hasClass('progressbar-in') || $progressbarEl.hasClass('progressbar-out')) {\n return $progressbarEl;\n }\n $progressbarEl.removeClass('progressbar-in').addClass('progressbar-out').animationEnd(() => {\n if (removeAfterHide) {\n $progressbarEl.remove();\n }\n });\n return $progressbarEl;\n }\n};\nexport default {\n name: 'progressbar',\n create() {\n const app = this;\n bindMethods(app, {\n progressbar: Progressbar\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.progressbar').each(progressbarEl => {\n const $progressbarEl = $(progressbarEl);\n app.progressbar.set($progressbarEl, $progressbarEl.attr('data-progress'));\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.progressbar').each(progressbarEl => {\n const $progressbarEl = $(progressbarEl);\n app.progressbar.set($progressbarEl, $progressbarEl.attr('data-progress'));\n });\n }\n },\n vnode: {\n progressbar: {\n insert(vnode) {\n const app = this;\n const el = vnode.elm;\n app.progressbar.set(el, el.getAttribute('data-progress'));\n },\n update(vnode) {\n const app = this;\n const el = vnode.elm;\n app.progressbar.set(el, el.getAttribute('data-progress'));\n }\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nconst Sortable = {\n init() {\n const app = this;\n const document = getDocument();\n let isTouched;\n let isMoved;\n let touchStartY;\n let touchesDiff;\n let $sortingEl;\n let $sortingItems;\n let $sortableContainer;\n let sortingElHeight;\n let minTop;\n let maxTop;\n let $insertAfterEl;\n let $insertBeforeEl;\n let indexFrom;\n let $pageEl;\n let $pageContentEl;\n let pageHeight;\n let pageOffset;\n let sortingElOffsetLocal;\n let sortingElOffsetTop;\n let initialScrollTop;\n let wasTapHold;\n function handleTouchStart(e, isTapHold) {\n isMoved = false;\n isTouched = true;\n wasTapHold = false;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n $sortingEl = $(e.target).closest('li').eq(0);\n indexFrom = $sortingEl.index();\n $sortableContainer = $sortingEl.parents('.sortable');\n const $listGroup = $sortingEl.parents('.list-group');\n if ($listGroup.length && $listGroup.parents($sortableContainer).length) {\n $sortableContainer = $listGroup;\n }\n $sortingItems = $sortableContainer.children('ul').children('li:not(.disallow-sorting):not(.no-sorting)');\n if (app.panel) app.panel.allowOpen = false;\n if (app.swipeout) app.swipeout.allow = false;\n if (isTapHold) {\n $sortingEl.addClass('sorting');\n $sortableContainer.addClass('sortable-sorting');\n wasTapHold = true;\n }\n }\n function handleTouchMove(e) {\n if (!isTouched || !$sortingEl) return;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (!isMoved) {\n $pageEl = $sortingEl.parents('.page');\n $pageContentEl = $sortingEl.parents('.page-content');\n const paddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const paddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n initialScrollTop = $pageContentEl[0].scrollTop;\n pageOffset = $pageEl.offset().top + paddingTop;\n pageHeight = $pageEl.height() - paddingTop - paddingBottom;\n $sortingEl.addClass('sorting');\n $sortableContainer.addClass('sortable-sorting');\n sortingElOffsetLocal = $sortingEl[0].offsetTop;\n minTop = $sortingEl[0].offsetTop;\n maxTop = $sortingEl.parent().height() - sortingElOffsetLocal - $sortingEl.height();\n sortingElHeight = $sortingEl[0].offsetHeight;\n sortingElOffsetTop = $sortingEl.offset().top;\n }\n isMoved = true;\n e.preventDefault();\n e.f7PreventSwipePanel = true;\n touchesDiff = pageY - touchStartY;\n const translateScrollOffset = $pageContentEl[0].scrollTop - initialScrollTop;\n const translate = Math.min(Math.max(touchesDiff + translateScrollOffset, -minTop), maxTop);\n $sortingEl.transform(`translate3d(0,${translate}px,0)`);\n const scrollAddition = 44;\n let allowScroll = true;\n if (touchesDiff + translateScrollOffset + scrollAddition < -minTop) {\n allowScroll = false;\n }\n if (touchesDiff + translateScrollOffset - scrollAddition > maxTop) {\n allowScroll = false;\n }\n $insertBeforeEl = undefined;\n $insertAfterEl = undefined;\n let scrollDiff;\n if (allowScroll) {\n if (sortingElOffsetTop + touchesDiff + sortingElHeight + scrollAddition > pageOffset + pageHeight) {\n // To Bottom\n scrollDiff = sortingElOffsetTop + touchesDiff + sortingElHeight + scrollAddition - (pageOffset + pageHeight);\n }\n if (sortingElOffsetTop + touchesDiff < pageOffset + scrollAddition) {\n // To Top\n scrollDiff = sortingElOffsetTop + touchesDiff - pageOffset - scrollAddition;\n }\n if (scrollDiff) {\n $pageContentEl[0].scrollTop += scrollDiff;\n }\n }\n $sortingItems.each(el => {\n const $currentEl = $(el);\n if ($currentEl[0] === $sortingEl[0]) return;\n const currentElOffset = $currentEl[0].offsetTop;\n const currentElHeight = $currentEl.height();\n const sortingElOffset = sortingElOffsetLocal + translate;\n let currentTranslate;\n const prevTranslate = $currentEl[0].f7Translate;\n if (sortingElOffset >= currentElOffset - currentElHeight / 2 && $sortingEl.index() < $currentEl.index()) {\n currentTranslate = -sortingElHeight;\n $currentEl.transform(`translate3d(0, ${currentTranslate}px,0)`);\n $insertAfterEl = $currentEl;\n $insertBeforeEl = undefined;\n } else if (sortingElOffset <= currentElOffset + currentElHeight / 2 && $sortingEl.index() > $currentEl.index()) {\n currentTranslate = sortingElHeight;\n $currentEl[0].f7Translate = currentTranslate;\n $currentEl.transform(`translate3d(0, ${currentTranslate}px,0)`);\n $insertAfterEl = undefined;\n if (!$insertBeforeEl) $insertBeforeEl = $currentEl;\n } else {\n currentTranslate = undefined;\n $currentEl.transform('translate3d(0, 0%,0)');\n }\n if (prevTranslate !== currentTranslate) {\n $currentEl.trigger('sortable:move');\n app.emit('sortableMove', $currentEl[0], $sortableContainer[0]);\n }\n $currentEl[0].f7Translate = currentTranslate;\n });\n }\n function handleTouchEnd() {\n if (!isTouched || !isMoved) {\n if (isTouched && !isMoved) {\n if (app.panel) app.panel.allowOpen = true;\n if (app.swipeout) app.swipeout.allow = true;\n if (wasTapHold) {\n $sortingEl.removeClass('sorting');\n $sortableContainer.removeClass('sortable-sorting');\n }\n }\n isTouched = false;\n isMoved = false;\n return;\n }\n if (app.panel) app.panel.allowOpen = true;\n if (app.swipeout) app.swipeout.allow = true;\n $sortingItems.transform('');\n $sortingEl.removeClass('sorting');\n $sortableContainer.removeClass('sortable-sorting');\n let indexTo;\n if ($insertAfterEl) indexTo = $insertAfterEl.index();else if ($insertBeforeEl) indexTo = $insertBeforeEl.index();\n let moveElements = $sortableContainer.dataset().sortableMoveElements;\n if (typeof moveElements === 'undefined') {\n moveElements = app.params.sortable.moveElements;\n }\n if (moveElements) {\n if ($insertAfterEl) {\n $sortingEl.insertAfter($insertAfterEl);\n }\n if ($insertBeforeEl) {\n $sortingEl.insertBefore($insertBeforeEl);\n }\n }\n if (($insertAfterEl || $insertBeforeEl) && $sortableContainer.hasClass('virtual-list')) {\n indexFrom = $sortingEl[0].f7VirtualListIndex;\n if (typeof indexFrom === 'undefined') indexFrom = $sortingEl.attr('data-virtual-list-index');\n if ($insertBeforeEl) {\n indexTo = $insertBeforeEl[0].f7VirtualListIndex;\n if (typeof indexTo === 'undefined') indexTo = $insertBeforeEl.attr('data-virtual-list-index');\n } else {\n indexTo = $insertAfterEl[0].f7VirtualListIndex;\n if (typeof indexTo === 'undefined') indexTo = $insertAfterEl.attr('data-virtual-list-index');\n }\n if (indexTo !== null) indexTo = parseInt(indexTo, 10);else indexTo = undefined;\n const virtualList = $sortableContainer[0].f7VirtualList;\n if (indexFrom) indexFrom = parseInt(indexFrom, 10);\n if (indexTo) indexTo = parseInt(indexTo, 10);\n if (virtualList) virtualList.moveItem(indexFrom, indexTo);\n }\n if (typeof indexTo !== 'undefined' && !Number.isNaN(indexTo) && indexTo !== indexFrom) {\n $sortingEl.trigger('sortable:sort', {\n from: indexFrom,\n to: indexTo\n });\n app.emit('sortableSort', $sortingEl[0], {\n from: indexFrom,\n to: indexTo,\n el: $sortingEl[0]\n }, $sortableContainer[0]);\n }\n $insertBeforeEl = undefined;\n $insertAfterEl = undefined;\n isTouched = false;\n isMoved = false;\n }\n const activeListener = getSupport().passiveListener ? {\n passive: false,\n capture: false\n } : false;\n $(document).on(app.touchEvents.start, '.list.sortable .sortable-handler', handleTouchStart, activeListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n $(document).on('taphold', '.sortable-tap-hold', (e, pointerEvent) => {\n handleTouchStart(pointerEvent, true);\n });\n },\n enable(el) {\n if (el === void 0) {\n el = '.list.sortable';\n }\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n $el.addClass('sortable-enabled');\n $el.trigger('sortable:enable');\n app.emit('sortableEnable', $el[0]);\n },\n disable(el) {\n if (el === void 0) {\n el = '.list.sortable';\n }\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n $el.removeClass('sortable-enabled');\n $el.trigger('sortable:disable');\n app.emit('sortableDisable', $el[0]);\n },\n toggle(el) {\n if (el === void 0) {\n el = '.list.sortable';\n }\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n if ($el.hasClass('sortable-enabled')) {\n app.sortable.disable($el);\n } else {\n app.sortable.enable($el);\n }\n }\n};\nexport default {\n name: 'sortable',\n params: {\n sortable: {\n moveElements: true\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n sortable: Sortable\n });\n },\n on: {\n init() {\n const app = this;\n if (!app.params.sortable) return;\n app.sortable.init();\n }\n },\n clicks: {\n '.sortable-enable': function enable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sortable.enable(data.sortable);\n },\n '.sortable-disable': function disable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sortable.disable(data.sortable);\n },\n '.sortable-toggle': function toggle($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.sortable.toggle(data.sortable);\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nconst Swipeout = {\n init() {\n const app = this;\n const document = getDocument();\n const touchesStart = {};\n let isTouched;\n let isMoved;\n let isScrolling;\n let touchStartTime;\n let touchesDiff;\n let $swipeoutEl;\n let $swipeoutContent;\n let $actionsRight;\n let $actionsLeft;\n let actionsLeftWidth;\n let actionsRightWidth;\n let translate;\n let opened;\n let openedActionsSide;\n let $leftButtons;\n let $rightButtons;\n let direction;\n let $overswipeLeftButton;\n let $overswipeRightButton;\n let overswipeLeft;\n let overswipeRight;\n function handleTouchStart(e) {\n if (!app.swipeout.allow) return;\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchStartTime = new Date().getTime();\n $swipeoutEl = $(this);\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!isMoved) {\n if ($('.list.sortable-opened').length > 0) return;\n $swipeoutContent = $swipeoutEl.find('.swipeout-content');\n $actionsRight = $swipeoutEl.find('.swipeout-actions-right');\n $actionsLeft = $swipeoutEl.find('.swipeout-actions-left');\n actionsLeftWidth = null;\n actionsRightWidth = null;\n $leftButtons = null;\n $rightButtons = null;\n $overswipeRightButton = null;\n $overswipeLeftButton = null;\n if ($actionsLeft.length > 0) {\n actionsLeftWidth = $actionsLeft.outerWidth();\n $leftButtons = $actionsLeft.children('a');\n $overswipeLeftButton = $actionsLeft.find('.swipeout-overswipe');\n }\n if ($actionsRight.length > 0) {\n actionsRightWidth = $actionsRight.outerWidth();\n $rightButtons = $actionsRight.children('a');\n $overswipeRightButton = $actionsRight.find('.swipeout-overswipe');\n }\n opened = $swipeoutEl.hasClass('swipeout-opened');\n if (opened) {\n openedActionsSide = $swipeoutEl.find('.swipeout-actions-left.swipeout-actions-opened').length > 0 ? 'left' : 'right';\n }\n $swipeoutEl.removeClass('swipeout-transitioning');\n if (!app.params.swipeout.noFollow) {\n $swipeoutEl.find('.swipeout-actions-opened').removeClass('swipeout-actions-opened');\n $swipeoutEl.removeClass('swipeout-opened');\n }\n }\n isMoved = true;\n if (e.cancelable) {\n e.preventDefault();\n }\n touchesDiff = pageX - touchesStart.x;\n translate = touchesDiff;\n if (opened) {\n if (openedActionsSide === 'right') translate -= actionsRightWidth;else translate += actionsLeftWidth;\n }\n if (translate > 0 && $actionsLeft.length === 0 || translate < 0 && $actionsRight.length === 0) {\n if (!opened) {\n isTouched = false;\n isMoved = false;\n $swipeoutContent.transform('');\n if ($rightButtons && $rightButtons.length > 0) {\n $rightButtons.transform('');\n }\n if ($leftButtons && $leftButtons.length > 0) {\n $leftButtons.transform('');\n }\n return;\n }\n translate = 0;\n }\n if (translate < 0) direction = 'to-left';else if (translate > 0) direction = 'to-right';else if (!direction) direction = 'to-left';\n let buttonOffset;\n let progress;\n e.f7PreventSwipePanel = true;\n if (app.params.swipeout.noFollow) {\n if (opened) {\n if (openedActionsSide === 'right' && touchesDiff > 0) {\n app.swipeout.close($swipeoutEl);\n }\n if (openedActionsSide === 'left' && touchesDiff < 0) {\n app.swipeout.close($swipeoutEl);\n }\n } else {\n if (touchesDiff < 0 && $actionsRight.length > 0) {\n app.swipeout.open($swipeoutEl, 'right');\n }\n if (touchesDiff > 0 && $actionsLeft.length > 0) {\n app.swipeout.open($swipeoutEl, 'left');\n }\n }\n isTouched = false;\n isMoved = false;\n return;\n }\n overswipeLeft = false;\n overswipeRight = false;\n if ($actionsRight.length > 0) {\n // Show right actions\n let buttonTranslate = translate;\n progress = buttonTranslate / actionsRightWidth;\n if (buttonTranslate < -actionsRightWidth) {\n const ratio = buttonTranslate / -actionsRightWidth;\n buttonTranslate = -actionsRightWidth - (-buttonTranslate - actionsRightWidth) ** 0.8;\n translate = buttonTranslate;\n if ($overswipeRightButton.length > 0 && ratio > app.params.swipeout.overswipeRatio) {\n overswipeRight = true;\n }\n }\n if (direction !== 'to-left') {\n progress = 0;\n buttonTranslate = 0;\n }\n $rightButtons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n if (typeof buttonEl.f7SwipeoutButtonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = buttonEl.offsetLeft;\n }\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if ($overswipeRightButton.length > 0 && $buttonEl.hasClass('swipeout-overswipe') && direction === 'to-left') {\n $buttonEl.css({\n left: `${overswipeRight ? -buttonOffset : 0}px`\n });\n if (overswipeRight) {\n if (!$buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeenter');\n app.emit('swipeoutOverswipeEnter', $swipeoutEl[0]);\n }\n $buttonEl.addClass('swipeout-overswipe-active');\n } else {\n if ($buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeexit');\n app.emit('swipeoutOverswipeExit', $swipeoutEl[0]);\n }\n $buttonEl.removeClass('swipeout-overswipe-active');\n }\n }\n $buttonEl.transform(`translate3d(${buttonTranslate - buttonOffset * (1 + Math.max(progress, -1))}px,0,0)`);\n });\n }\n if ($actionsLeft.length > 0) {\n // Show left actions\n let buttonTranslate = translate;\n progress = buttonTranslate / actionsLeftWidth;\n if (buttonTranslate > actionsLeftWidth) {\n const ratio = buttonTranslate / actionsRightWidth;\n buttonTranslate = actionsLeftWidth + (buttonTranslate - actionsLeftWidth) ** 0.8;\n translate = buttonTranslate;\n if ($overswipeLeftButton.length > 0 && ratio > app.params.swipeout.overswipeRatio) {\n overswipeLeft = true;\n }\n }\n if (direction !== 'to-right') {\n buttonTranslate = 0;\n progress = 0;\n }\n $leftButtons.each((buttonEl, index) => {\n const $buttonEl = $(buttonEl);\n if (typeof buttonEl.f7SwipeoutButtonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;\n }\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if ($overswipeLeftButton.length > 0 && $buttonEl.hasClass('swipeout-overswipe') && direction === 'to-right') {\n $buttonEl.css({\n left: `${overswipeLeft ? buttonOffset : 0}px`\n });\n if (overswipeLeft) {\n if (!$buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeenter');\n app.emit('swipeoutOverswipeEnter', $swipeoutEl[0]);\n }\n $buttonEl.addClass('swipeout-overswipe-active');\n } else {\n if ($buttonEl.hasClass('swipeout-overswipe-active')) {\n $swipeoutEl.trigger('swipeout:overswipeexit');\n app.emit('swipeoutOverswipeExit', $swipeoutEl[0]);\n }\n $buttonEl.removeClass('swipeout-overswipe-active');\n }\n }\n if ($leftButtons.length > 1) {\n $buttonEl.css('z-index', $leftButtons.length - index);\n }\n $buttonEl.transform(`translate3d(${buttonTranslate + buttonOffset * (1 - Math.min(progress, 1))}px,0,0)`);\n });\n }\n $swipeoutEl.trigger('swipeout', progress);\n app.emit('swipeout', $swipeoutEl[0], progress);\n $swipeoutContent.transform(`translate3d(${translate}px,0,0)`);\n }\n function handleTouchEnd() {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n const timeDiff = new Date().getTime() - touchStartTime;\n const $actions = direction === 'to-left' ? $actionsRight : $actionsLeft;\n const actionsWidth = direction === 'to-left' ? actionsRightWidth : actionsLeftWidth;\n let action;\n let $buttons;\n let i;\n if (timeDiff < 300 && (touchesDiff < -10 && direction === 'to-left' || touchesDiff > 10 && direction === 'to-right') || timeDiff >= 300 && Math.abs(translate) > actionsWidth / 2) {\n action = 'open';\n } else {\n action = 'close';\n }\n if (timeDiff < 300) {\n if (Math.abs(translate) === 0) action = 'close';\n if (Math.abs(translate) === actionsWidth) action = 'open';\n }\n if (action === 'open') {\n Swipeout.el = $swipeoutEl[0];\n $swipeoutEl.trigger('swipeout:open');\n app.emit('swipeoutOpen', $swipeoutEl[0]);\n $swipeoutEl.addClass('swipeout-opened swipeout-transitioning');\n const newTranslate = direction === 'to-left' ? -actionsWidth : actionsWidth;\n $swipeoutContent.transform(`translate3d(${newTranslate}px,0,0)`);\n $actions.addClass('swipeout-actions-opened');\n $buttons = direction === 'to-left' ? $rightButtons : $leftButtons;\n if ($buttons) {\n for (i = 0; i < $buttons.length; i += 1) {\n $($buttons[i]).transform(`translate3d(${newTranslate}px,0,0)`);\n }\n }\n if (overswipeRight) {\n $actionsRight.find('.swipeout-overswipe').trigger('click', 'f7Overswipe');\n }\n if (overswipeLeft) {\n $actionsLeft.find('.swipeout-overswipe').trigger('click', 'f7Overswipe');\n }\n } else {\n $swipeoutEl.trigger('swipeout:close');\n app.emit('swipeoutClose', $swipeoutEl[0]);\n Swipeout.el = undefined;\n $swipeoutEl.addClass('swipeout-transitioning').removeClass('swipeout-opened');\n $swipeoutContent.transform('');\n $actions.removeClass('swipeout-actions-opened');\n }\n let buttonOffset;\n if ($leftButtons && $leftButtons.length > 0 && $leftButtons !== $buttons) {\n $leftButtons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if (typeof buttonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;\n }\n $buttonEl.transform(`translate3d(${buttonOffset}px,0,0)`);\n });\n }\n if ($rightButtons && $rightButtons.length > 0 && $rightButtons !== $buttons) {\n $rightButtons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n buttonOffset = buttonEl.f7SwipeoutButtonOffset;\n if (typeof buttonOffset === 'undefined') {\n $buttonEl[0].f7SwipeoutButtonOffset = buttonEl.offsetLeft;\n }\n $buttonEl.transform(`translate3d(${-buttonOffset}px,0,0)`);\n });\n }\n $swipeoutContent.transitionEnd(() => {\n if (opened && action === 'open' || !opened && action === 'close') return;\n $swipeoutEl.trigger(action === 'open' ? 'swipeout:opened' : 'swipeout:closed');\n app.emit(action === 'open' ? 'swipeoutOpened' : 'swipeoutClosed', $swipeoutEl[0]);\n $swipeoutEl.removeClass('swipeout-transitioning');\n if (opened && action === 'close') {\n if ($actionsRight.length > 0) {\n $rightButtons.transform('');\n }\n if ($actionsLeft.length > 0) {\n $leftButtons.transform('');\n }\n }\n });\n }\n const passiveListener = getSupport().passiveListener ? {\n passive: true\n } : false;\n app.on('touchstart', e => {\n if (Swipeout.el) {\n const $targetEl = $(e.target);\n if (!($(Swipeout.el).is($targetEl[0]) || $targetEl.parents('.swipeout').is(Swipeout.el) || $targetEl.hasClass('modal-in') || ($targetEl.attr('class') || '').indexOf('-backdrop') > 0 || $targetEl.hasClass('actions-modal') || $targetEl.parents('.actions-modal.modal-in, .dialog.modal-in').length > 0)) {\n app.swipeout.close(Swipeout.el);\n }\n }\n });\n $(document).on(app.touchEvents.start, 'li.swipeout', handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n },\n allow: true,\n el: undefined,\n open() {\n const app = this;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n let [el, side, callback] = args;\n if (typeof args[1] === 'function') {\n [el, callback, side] = args;\n }\n const $el = $(el).eq(0);\n if ($el.length === 0) return;\n if (!$el.hasClass('swipeout') || $el.hasClass('swipeout-opened')) return;\n if (!side) {\n if ($el.find('.swipeout-actions-right').length > 0) side = 'right';else side = 'left';\n }\n const $swipeoutActions = $el.find(`.swipeout-actions-${side}`);\n const $swipeoutContent = $el.find('.swipeout-content');\n if ($swipeoutActions.length === 0) return;\n $el.trigger('swipeout:open').addClass('swipeout-opened').removeClass('swipeout-transitioning');\n app.emit('swipeoutOpen', $el[0]);\n $swipeoutActions.addClass('swipeout-actions-opened');\n const $buttons = $swipeoutActions.children('a');\n const swipeoutActionsWidth = $swipeoutActions.outerWidth();\n const translate = side === 'right' ? -swipeoutActionsWidth : swipeoutActionsWidth;\n if ($buttons.length > 1) {\n $buttons.each((buttonEl, buttonIndex) => {\n const $buttonEl = $(buttonEl);\n if (side === 'right') {\n $buttonEl.transform(`translate3d(${-buttonEl.offsetLeft}px,0,0)`);\n } else {\n $buttonEl.css('z-index', $buttons.length - buttonIndex).transform(`translate3d(${swipeoutActionsWidth - buttonEl.offsetWidth - buttonEl.offsetLeft}px,0,0)`);\n }\n });\n }\n $el.addClass('swipeout-transitioning');\n $swipeoutContent.transitionEnd(() => {\n $el.trigger('swipeout:opened');\n app.emit('swipeoutOpened', $el[0]);\n if (callback) callback.call($el[0]);\n });\n nextFrame(() => {\n $buttons.transform(`translate3d(${translate}px,0,0)`);\n $swipeoutContent.transform(`translate3d(${translate}px,0,0)`);\n });\n Swipeout.el = $el[0];\n },\n close(el, callback) {\n const app = this;\n const $el = $(el).eq(0);\n if ($el.length === 0) return;\n if (!$el.hasClass('swipeout-opened')) return;\n const side = $el.find('.swipeout-actions-opened').hasClass('swipeout-actions-right') ? 'right' : 'left';\n const $swipeoutActions = $el.find('.swipeout-actions-opened').removeClass('swipeout-actions-opened');\n const $buttons = $swipeoutActions.children('a');\n const swipeoutActionsWidth = $swipeoutActions.outerWidth();\n app.swipeout.allow = false;\n $el.trigger('swipeout:close');\n app.emit('swipeoutClose', $el[0]);\n $el.removeClass('swipeout-opened').addClass('swipeout-transitioning');\n let closeTimeout;\n function onSwipeoutClose() {\n app.swipeout.allow = true;\n if ($el.hasClass('swipeout-opened')) return;\n $el.removeClass('swipeout-transitioning');\n $buttons.transform('');\n $el.trigger('swipeout:closed');\n app.emit('swipeoutClosed', $el[0]);\n if (callback) callback.call($el[0]);\n if (closeTimeout) clearTimeout(closeTimeout);\n }\n $el.find('.swipeout-content').transform('').transitionEnd(onSwipeoutClose);\n closeTimeout = setTimeout(onSwipeoutClose, 500);\n $buttons.each(buttonEl => {\n const $buttonEl = $(buttonEl);\n if (side === 'right') {\n $buttonEl.transform(`translate3d(${-buttonEl.offsetLeft}px,0,0)`);\n } else {\n $buttonEl.transform(`translate3d(${swipeoutActionsWidth - buttonEl.offsetWidth - buttonEl.offsetLeft}px,0,0)`);\n }\n $buttonEl.css({\n left: '0px'\n }).removeClass('swipeout-overswipe-active');\n });\n if (Swipeout.el && Swipeout.el === $el[0]) Swipeout.el = undefined;\n },\n delete(el, callback) {\n const app = this;\n const $el = $(el).eq(0);\n if ($el.length === 0) return;\n Swipeout.el = undefined;\n $el.trigger('swipeout:delete');\n app.emit('swipeoutDelete', $el[0]);\n $el.css({\n height: `${$el.outerHeight()}px`\n });\n $el.transitionEnd(() => {\n $el.trigger('swipeout:deleted');\n app.emit('swipeoutDeleted', $el[0]);\n if (callback) callback.call($el[0]);\n if ($el.parents('.virtual-list').length > 0) {\n const virtualList = $el.parents('.virtual-list')[0].f7VirtualList;\n const virtualIndex = $el[0].f7VirtualListIndex;\n if (virtualList && typeof virtualIndex !== 'undefined') virtualList.deleteItem(virtualIndex);\n } else if (app.params.swipeout.removeElements) {\n if (app.params.swipeout.removeElementsWithTimeout) {\n setTimeout(() => {\n $el.remove();\n }, app.params.swipeout.removeElementsTimeout);\n } else {\n $el.remove();\n }\n } else {\n $el.removeClass('swipeout-deleting swipeout-transitioning');\n }\n });\n // eslint-disable-next-line\n // $el[0]._clientLeft = $el[0].clientLeft;\n nextFrame(() => {\n $el.addClass('swipeout-deleting swipeout-transitioning').css({\n height: '0px'\n }).find('.swipeout-content').transform('translate3d(-100%,0,0)');\n });\n }\n};\nexport default {\n name: 'swipeout',\n params: {\n swipeout: {\n actionsNoFold: false,\n noFollow: false,\n removeElements: true,\n removeElementsWithTimeout: false,\n removeElementsTimeout: 0,\n overswipeRatio: 1.2\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n swipeout: Swipeout\n });\n },\n clicks: {\n '.swipeout-open': function openSwipeout($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.swipeout.open(data.swipeout, data.side);\n },\n '.swipeout-close': function closeSwipeout($clickedEl) {\n const app = this;\n const $swipeoutEl = $clickedEl.closest('.swipeout');\n if ($swipeoutEl.length === 0) return;\n app.swipeout.close($swipeoutEl);\n },\n '.swipeout-delete': function deleteSwipeout($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const $swipeoutEl = $clickedEl.closest('.swipeout');\n if ($swipeoutEl.length === 0) return;\n const {\n confirm,\n confirmTitle\n } = data;\n if (data.confirm) {\n app.dialog.confirm(confirm, confirmTitle, () => {\n app.swipeout.delete($swipeoutEl);\n });\n } else {\n app.swipeout.delete($swipeoutEl);\n }\n }\n },\n on: {\n init() {\n const app = this;\n if (!app.params.swipeout) return;\n app.swipeout.init();\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { nextFrame, bindMethods } from '../../shared/utils.js';\nconst Accordion = {\n toggleClicked($clickedEl) {\n const app = this;\n let $accordionItemEl = $clickedEl.closest('.accordion-item').eq(0);\n if (!$accordionItemEl.length) $accordionItemEl = $clickedEl.parents('li').eq(0);\n const $accordionContent = $clickedEl.parents('.accordion-item-content').eq(0);\n if ($accordionContent.length) {\n if ($accordionContent.parents($accordionItemEl).length) return;\n }\n if ($clickedEl.parents('li').length > 1 && $clickedEl.parents('li')[0] !== $accordionItemEl[0]) return;\n app.accordion.toggle($accordionItemEl);\n },\n open(el) {\n const app = this;\n const $el = $(el);\n let prevented = false;\n function prevent() {\n prevented = true;\n }\n $el.trigger('accordion:beforeopen', {\n prevent\n }, prevent);\n app.emit('accordionBeforeOpen', $el[0], prevent);\n if (prevented) return;\n const $list = $el.parents('.accordion-list').eq(0);\n let $contentEl = $el.children('.accordion-item-content');\n $contentEl.removeAttr('aria-hidden');\n if ($contentEl.length === 0) $contentEl = $el.find('.accordion-item-content');\n if ($contentEl.length === 0) return;\n const $openedItem = $list.length > 0 && $el.parent().children('.accordion-item-opened');\n if ($openedItem.length > 0) {\n app.accordion.close($openedItem);\n }\n $contentEl.transitionEnd(() => {\n if ($el.hasClass('accordion-item-opened')) {\n $contentEl.transition(0);\n $contentEl.css('height', 'auto');\n nextFrame(() => {\n $contentEl.transition('');\n $el.trigger('accordion:opened');\n app.emit('accordionOpened', $el[0]);\n });\n } else {\n $contentEl.css('height', '');\n $el.trigger('accordion:closed');\n app.emit('accordionClosed', $el[0]);\n }\n });\n $contentEl.css('height', `${$contentEl[0].scrollHeight}px`);\n $el.trigger('accordion:open');\n $el.addClass('accordion-item-opened');\n app.emit('accordionOpen', $el[0]);\n },\n close(el) {\n const app = this;\n const $el = $(el);\n let prevented = false;\n function prevent() {\n prevented = true;\n }\n $el.trigger('accordion:beforeclose', {\n prevent\n }, prevent);\n app.emit('accordionBeforeClose', $el[0], prevent);\n if (prevented) return;\n let $contentEl = $el.children('.accordion-item-content');\n if ($contentEl.length === 0) $contentEl = $el.find('.accordion-item-content');\n $el.removeClass('accordion-item-opened');\n $contentEl.attr('aria-hidden', true);\n $contentEl.transition(0);\n $contentEl.css('height', `${$contentEl[0].scrollHeight}px`);\n // Close\n $contentEl.transitionEnd(() => {\n if ($el.hasClass('accordion-item-opened')) {\n $contentEl.transition(0);\n $contentEl.css('height', 'auto');\n nextFrame(() => {\n $contentEl.transition('');\n $el.trigger('accordion:opened');\n app.emit('accordionOpened', $el[0]);\n });\n } else {\n $contentEl.css('height', '');\n $el.trigger('accordion:closed');\n app.emit('accordionClosed', $el[0]);\n }\n });\n nextFrame(() => {\n $contentEl.transition('');\n $contentEl.css('height', '');\n $el.trigger('accordion:close');\n app.emit('accordionClose', $el[0]);\n });\n },\n toggle(el) {\n const app = this;\n const $el = $(el);\n if ($el.length === 0) return;\n if ($el.hasClass('accordion-item-opened')) app.accordion.close(el);else app.accordion.open(el);\n }\n};\nexport default {\n name: 'accordion',\n create() {\n const app = this;\n bindMethods(app, {\n accordion: Accordion\n });\n },\n clicks: {\n '.accordion-item .item-link, .accordion-item-toggle, .links-list.accordion-list > ul > li > a': function open($clickedEl) {\n const app = this;\n Accordion.toggleClicked.call(app, $clickedEl);\n }\n }\n};", "export default {\n name: 'contactsList'\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nclass VirtualList extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const vl = this;\n const device = getDevice();\n const document = getDocument();\n let defaultHeight;\n if (app.theme === 'md') {\n defaultHeight = 48;\n } else if (app.theme === 'ios') {\n defaultHeight = 44;\n }\n const defaults = {\n cols: 1,\n height: defaultHeight,\n cache: true,\n dynamicHeightBufferSize: 1,\n showFilteredItemsOnly: false,\n renderExternal: undefined,\n setListHeight: true,\n searchByItem: undefined,\n searchAll: undefined,\n ul: null,\n createUl: true,\n scrollableParentEl: undefined,\n renderItem(item) {\n return `\n - \n \n
\n `.trim();\n },\n on: {}\n };\n\n // Extend defaults with modules params\n vl.useModulesParams(defaults);\n vl.params = extend(defaults, params);\n if (vl.params.height === undefined || !vl.params.height) {\n vl.params.height = defaultHeight;\n }\n vl.$el = $(params.el);\n vl.el = vl.$el[0];\n if (vl.$el.length === 0) return undefined;\n vl.$el[0].f7VirtualList = vl;\n vl.items = vl.params.items;\n if (vl.params.showFilteredItemsOnly) {\n vl.filteredItems = [];\n }\n if (vl.params.renderItem) {\n vl.renderItem = vl.params.renderItem;\n }\n vl.$pageContentEl = vl.$el.parents('.page-content');\n vl.pageContentEl = vl.$pageContentEl[0];\n vl.$scrollableParentEl = vl.params.scrollableParentEl ? $(vl.params.scrollableParentEl).eq(0) : vl.$pageContentEl;\n if (!vl.$scrollableParentEl.length && vl.$pageContentEl.length) {\n vl.$scrollableParentEl = vl.$pageContentEl;\n }\n vl.scrollableParentEl = vl.$scrollableParentEl[0];\n\n // Bad scroll\n if (typeof vl.params.updatableScroll !== 'undefined') {\n vl.updatableScroll = vl.params.updatableScroll;\n } else {\n vl.updatableScroll = true;\n if (device.ios && device.osVersion.split('.')[0] < 8) {\n vl.updatableScroll = false;\n }\n }\n\n // Append \n const ul = vl.params.ul;\n vl.$ul = ul ? $(vl.params.ul) : vl.$el.children('ul');\n if (vl.$ul.length === 0 && vl.params.createUl) {\n vl.$el.append('');\n vl.$ul = vl.$el.children('ul');\n }\n vl.ul = vl.$ul[0];\n let $itemsWrapEl;\n if (!vl.ul && !vl.params.createUl) $itemsWrapEl = vl.$el;else $itemsWrapEl = vl.$ul;\n extend(vl, {\n $itemsWrapEl,\n itemsWrapEl: $itemsWrapEl[0],\n // DOM cached items\n domCache: {},\n // Temporary DOM Element\n tempDomElement: document.createElement('ul'),\n // Last repain position\n lastRepaintY: null,\n // Fragment\n fragment: document.createDocumentFragment(),\n // Props\n pageHeight: undefined,\n rowsPerScreen: undefined,\n rowsBefore: undefined,\n rowsAfter: undefined,\n rowsToRender: undefined,\n maxBufferHeight: 0,\n listHeight: undefined,\n dynamicHeight: typeof vl.params.height === 'function',\n autoHeight: vl.params.height === 'auto'\n });\n\n // Install Modules\n vl.useModules();\n\n // Attach events\n const handleScrollBound = vl.handleScroll.bind(vl);\n const handleResizeBound = vl.handleResize.bind(vl);\n let $pageEl;\n let $tabEl;\n let $panelEl;\n let $popupEl;\n vl.attachEvents = function attachEvents() {\n $pageEl = vl.$el.parents('.page').eq(0);\n $tabEl = vl.$el.parents('.tab').filter(tabEl => {\n return $(tabEl).parent('.tabs').parent('.tabs-animated-wrap, swiper-container.tabs').length === 0;\n }).eq(0);\n $panelEl = vl.$el.parents('.panel').eq(0);\n $popupEl = vl.$el.parents('.popup').eq(0);\n vl.$scrollableParentEl.on('scroll', handleScrollBound);\n if ($pageEl.length) $pageEl.on('page:reinit', handleResizeBound);\n if ($tabEl.length) $tabEl.on('tab:show', handleResizeBound);\n if ($panelEl.length) $panelEl.on('panel:open', handleResizeBound);\n if ($popupEl.length) $popupEl.on('popup:open', handleResizeBound);\n app.on('resize', handleResizeBound);\n };\n vl.detachEvents = function attachEvents() {\n vl.$scrollableParentEl.off('scroll', handleScrollBound);\n if ($pageEl.length) $pageEl.off('page:reinit', handleResizeBound);\n if ($tabEl.length) $tabEl.off('tab:show', handleResizeBound);\n if ($panelEl.length) $panelEl.off('panel:open', handleResizeBound);\n if ($popupEl.length) $popupEl.off('popup:open', handleResizeBound);\n app.off('resize', handleResizeBound);\n };\n // Init\n vl.init();\n return vl;\n }\n setListSize(autoHeightRerender) {\n const vl = this;\n const items = vl.filteredItems || vl.items;\n if (!autoHeightRerender) {\n vl.pageHeight = vl.$scrollableParentEl[0].offsetHeight;\n }\n if (vl.dynamicHeight) {\n vl.listHeight = 0;\n vl.heights = [];\n for (let i = 0; i < items.length; i += 1) {\n const itemHeight = vl.params.height(items[i]);\n vl.listHeight += itemHeight;\n vl.heights.push(itemHeight);\n }\n } else if (vl.autoHeight) {\n vl.listHeight = 0;\n if (!vl.heights) vl.heights = [];\n if (!vl.heightsCalculated) vl.heightsCalculated = [];\n const renderedItems = {};\n vl.$itemsWrapEl.find(`[data-virtual-list-index]`).forEach(el => {\n renderedItems[parseInt(el.getAttribute('data-virtual-list-index'), 10)] = el;\n });\n for (let i = 0; i < items.length; i += 1) {\n const itemIndex = vl.items.indexOf(items[i]);\n const renderedItem = renderedItems[itemIndex];\n if (renderedItem) {\n if (!vl.heightsCalculated.includes(itemIndex)) {\n vl.heights[itemIndex] = renderedItem.offsetHeight;\n vl.heightsCalculated.push(itemIndex);\n }\n }\n if (typeof vl.heights[i] === 'undefined') {\n vl.heights[itemIndex] = 40;\n }\n vl.listHeight += vl.heights[itemIndex];\n }\n } else {\n vl.listHeight = Math.ceil(items.length / vl.params.cols) * vl.params.height;\n vl.rowsPerScreen = Math.ceil(vl.pageHeight / vl.params.height);\n vl.rowsBefore = vl.params.rowsBefore || vl.rowsPerScreen * 2;\n vl.rowsAfter = vl.params.rowsAfter || vl.rowsPerScreen;\n vl.rowsToRender = vl.rowsPerScreen + vl.rowsBefore + vl.rowsAfter;\n vl.maxBufferHeight = vl.rowsBefore / 2 * vl.params.height;\n }\n if (vl.updatableScroll || vl.params.setListHeight) {\n vl.$itemsWrapEl.css({\n height: `${vl.listHeight}px`\n });\n }\n }\n render(force, forceScrollTop) {\n const vl = this;\n if (force) vl.lastRepaintY = null;\n let scrollTop = -(vl.$el[0].getBoundingClientRect().top - vl.$scrollableParentEl[0].getBoundingClientRect().top);\n if (typeof forceScrollTop !== 'undefined') scrollTop = forceScrollTop;\n if (vl.lastRepaintY === null || Math.abs(scrollTop - vl.lastRepaintY) > vl.maxBufferHeight || !vl.updatableScroll && vl.$scrollableParentEl[0].scrollTop + vl.pageHeight >= vl.$scrollableParentEl[0].scrollHeight) {\n vl.lastRepaintY = scrollTop;\n } else {\n return;\n }\n const items = vl.filteredItems || vl.items;\n let fromIndex;\n let toIndex;\n let heightBeforeFirstItem = 0;\n let heightBeforeLastItem = 0;\n if (vl.dynamicHeight || vl.autoHeight) {\n let itemTop = 0;\n let itemHeight;\n vl.maxBufferHeight = vl.pageHeight;\n for (let j = 0; j < vl.heights.length; j += 1) {\n itemHeight = vl.heights[j];\n if (typeof fromIndex === 'undefined') {\n if (itemTop + itemHeight >= scrollTop - vl.pageHeight * 2 * vl.params.dynamicHeightBufferSize) fromIndex = j;else heightBeforeFirstItem += itemHeight;\n }\n if (typeof toIndex === 'undefined') {\n if (itemTop + itemHeight >= scrollTop + vl.pageHeight * 2 * vl.params.dynamicHeightBufferSize || j === vl.heights.length - 1) toIndex = j + 1;\n heightBeforeLastItem += itemHeight;\n }\n itemTop += itemHeight;\n }\n toIndex = Math.min(toIndex, items.length);\n } else {\n fromIndex = (parseInt(scrollTop / vl.params.height, 10) - vl.rowsBefore) * vl.params.cols;\n if (fromIndex < 0) {\n fromIndex = 0;\n }\n toIndex = Math.min(fromIndex + vl.rowsToRender * vl.params.cols, items.length);\n }\n let topPosition;\n const renderExternalItems = [];\n vl.reachEnd = false;\n let i;\n for (i = fromIndex; i < toIndex; i += 1) {\n let itemEl;\n // Define real item index\n const index = vl.items.indexOf(items[i]);\n if (i === fromIndex) vl.currentFromIndex = index;\n if (i === toIndex - 1) vl.currentToIndex = index;\n if (vl.filteredItems) {\n if (vl.items[index] === vl.filteredItems[vl.filteredItems.length - 1]) vl.reachEnd = true;\n } else if (index === vl.items.length - 1) vl.reachEnd = true;\n\n // Find items\n if (vl.params.renderExternal) {\n renderExternalItems.push(items[i]);\n } else if (vl.domCache[index]) {\n itemEl = vl.domCache[index];\n itemEl.f7VirtualListIndex = index;\n } else {\n if (vl.renderItem) {\n vl.tempDomElement.innerHTML = vl.renderItem(items[i], index).trim();\n } else {\n vl.tempDomElement.innerHTML = items[i].toString().trim();\n }\n itemEl = vl.tempDomElement.childNodes[0];\n if (vl.params.cache) vl.domCache[index] = itemEl;\n itemEl.f7VirtualListIndex = index;\n }\n\n // Set item top position\n if (i === fromIndex) {\n if (vl.dynamicHeight || vl.autoHeight) {\n topPosition = heightBeforeFirstItem;\n } else {\n topPosition = i * vl.params.height / vl.params.cols;\n }\n }\n if (!vl.params.renderExternal) {\n itemEl.style.top = `${topPosition}px`;\n\n // Before item insert\n vl.emit('local::itemBeforeInsert vlItemBeforeInsert', vl, itemEl, items[i]);\n\n // Append item to fragment\n vl.fragment.appendChild(itemEl);\n }\n }\n\n // Update list height with not updatable scroll\n if (!vl.updatableScroll) {\n if (vl.dynamicHeight || vl.autoHeight) {\n vl.itemsWrapEl.style.height = `${heightBeforeLastItem}px`;\n } else {\n vl.itemsWrapEl.style.height = `${i * vl.params.height / vl.params.cols}px`;\n }\n }\n\n // Update list html\n if (vl.params.renderExternal) {\n if (items && items.length === 0) {\n vl.reachEnd = true;\n }\n } else {\n vl.emit('local::beforeClear vlBeforeClear', vl, vl.fragment);\n vl.itemsWrapEl.innerHTML = '';\n vl.emit('local::itemsBeforeInsert vlItemsBeforeInsert', vl, vl.fragment);\n if (items && items.length === 0) {\n vl.reachEnd = true;\n if (vl.params.emptyTemplate) vl.itemsWrapEl.innerHTML = vl.params.emptyTemplate;\n } else {\n vl.itemsWrapEl.appendChild(vl.fragment);\n }\n vl.emit('local::itemsAfterInsert vlItemsAfterInsert', vl, vl.fragment);\n }\n if (typeof forceScrollTop !== 'undefined' && force) {\n vl.$scrollableParentEl.scrollTop(forceScrollTop, 0);\n }\n if (vl.params.renderExternal) {\n vl.params.renderExternal(vl, {\n fromIndex,\n toIndex,\n listHeight: vl.listHeight,\n topPosition,\n items: renderExternalItems\n });\n }\n if (vl.autoHeight) {\n requestAnimationFrame(() => {\n vl.setListSize(true);\n });\n }\n }\n\n // Filter\n filterItems(indexes, resetScrollTop) {\n if (resetScrollTop === void 0) {\n resetScrollTop = true;\n }\n const vl = this;\n vl.filteredItems = [];\n for (let i = 0; i < indexes.length; i += 1) {\n vl.filteredItems.push(vl.items[indexes[i]]);\n }\n if (resetScrollTop) {\n vl.$scrollableParentEl[0].scrollTop = 0;\n }\n vl.update();\n }\n resetFilter() {\n const vl = this;\n if (vl.params.showFilteredItemsOnly) {\n vl.filteredItems = [];\n } else {\n vl.filteredItems = null;\n delete vl.filteredItems;\n }\n vl.update();\n }\n scrollToItem(index) {\n const vl = this;\n if (index > vl.items.length) return false;\n let itemTop = 0;\n if (vl.dynamicHeight || vl.autoHeight) {\n for (let i = 0; i < index; i += 1) {\n itemTop += vl.heights[i];\n }\n } else {\n itemTop = index * vl.params.height;\n }\n const listTop = vl.$el[0].offsetTop;\n vl.render(true, listTop + itemTop - parseInt(vl.$scrollableParentEl.css('padding-top'), 10));\n return true;\n }\n handleScroll() {\n const vl = this;\n vl.render();\n }\n\n // Handle resize event\n isVisible() {\n const vl = this;\n return !!(vl.el.offsetWidth || vl.el.offsetHeight || vl.el.getClientRects().length);\n }\n handleResize() {\n const vl = this;\n if (vl.isVisible()) {\n vl.heightsCalculated = [];\n vl.setListSize();\n vl.render(true);\n }\n }\n\n // Append\n appendItems(items) {\n const vl = this;\n for (let i = 0; i < items.length; i += 1) {\n vl.items.push(items[i]);\n }\n vl.update();\n }\n appendItem(item) {\n const vl = this;\n vl.appendItems([item]);\n }\n\n // Replace\n replaceAllItems(items) {\n const vl = this;\n vl.items = items;\n delete vl.filteredItems;\n vl.domCache = {};\n vl.update();\n }\n replaceItem(index, item) {\n const vl = this;\n vl.items[index] = item;\n if (vl.params.cache) delete vl.domCache[index];\n vl.update();\n }\n\n // Prepend\n prependItems(items) {\n const vl = this;\n for (let i = items.length - 1; i >= 0; i -= 1) {\n vl.items.unshift(items[i]);\n }\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n newCache[parseInt(cached, 10) + items.length] = vl.domCache[cached];\n });\n vl.domCache = newCache;\n }\n vl.update();\n }\n prependItem(item) {\n const vl = this;\n vl.prependItems([item]);\n }\n\n // Move\n moveItem(from, to) {\n const vl = this;\n const fromIndex = from;\n let toIndex = to;\n if (fromIndex === toIndex) return;\n // remove item from array\n const item = vl.items.splice(fromIndex, 1)[0];\n if (toIndex >= vl.items.length) {\n // Add item to the end\n vl.items.push(item);\n toIndex = vl.items.length - 1;\n } else {\n // Add item to new index\n vl.items.splice(toIndex, 0, item);\n }\n // Update cache\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n const cachedIndex = parseInt(cached, 10);\n const leftIndex = fromIndex < toIndex ? fromIndex : toIndex;\n const rightIndex = fromIndex < toIndex ? toIndex : fromIndex;\n const indexShift = fromIndex < toIndex ? -1 : 1;\n if (cachedIndex < leftIndex || cachedIndex > rightIndex) newCache[cachedIndex] = vl.domCache[cachedIndex];\n if (cachedIndex === leftIndex) newCache[rightIndex] = vl.domCache[cachedIndex];\n if (cachedIndex > leftIndex && cachedIndex <= rightIndex) newCache[cachedIndex + indexShift] = vl.domCache[cachedIndex];\n });\n vl.domCache = newCache;\n }\n vl.update();\n }\n\n // Insert before\n insertItemBefore(index, item) {\n const vl = this;\n if (index === 0) {\n vl.prependItem(item);\n return;\n }\n if (index >= vl.items.length) {\n vl.appendItem(item);\n return;\n }\n vl.items.splice(index, 0, item);\n // Update cache\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n const cachedIndex = parseInt(cached, 10);\n if (cachedIndex >= index) {\n newCache[cachedIndex + 1] = vl.domCache[cachedIndex];\n }\n });\n vl.domCache = newCache;\n }\n vl.update();\n }\n\n // Delete\n deleteItems(indexes) {\n const vl = this;\n let prevIndex;\n let indexShift = 0;\n for (let i = 0; i < indexes.length; i += 1) {\n let index = indexes[i];\n if (typeof prevIndex !== 'undefined') {\n if (index > prevIndex) {\n indexShift = -i;\n }\n }\n index += indexShift;\n prevIndex = indexes[i];\n // Delete item\n const deletedItem = vl.items.splice(index, 1)[0];\n\n // Delete from filtered\n if (vl.filteredItems && vl.filteredItems.indexOf(deletedItem) >= 0) {\n vl.filteredItems.splice(vl.filteredItems.indexOf(deletedItem), 1);\n }\n // Update cache\n if (vl.params.cache) {\n const newCache = {};\n Object.keys(vl.domCache).forEach(cached => {\n const cachedIndex = parseInt(cached, 10);\n if (cachedIndex === index) {\n delete vl.domCache[index];\n } else if (parseInt(cached, 10) > index) {\n newCache[cachedIndex - 1] = vl.domCache[cached];\n } else {\n newCache[cachedIndex] = vl.domCache[cached];\n }\n });\n vl.domCache = newCache;\n }\n }\n vl.update();\n }\n deleteAllItems() {\n const vl = this;\n vl.items = [];\n delete vl.filteredItems;\n if (vl.params.cache) vl.domCache = {};\n vl.update();\n }\n deleteItem(index) {\n const vl = this;\n vl.deleteItems([index]);\n }\n\n // Clear cache\n clearCache() {\n const vl = this;\n vl.domCache = {};\n }\n\n // Update Virtual List\n update(deleteCache) {\n const vl = this;\n if (deleteCache && vl.params.cache) {\n vl.domCache = {};\n }\n vl.heightsCalculated = [];\n vl.setListSize();\n vl.render(true);\n }\n init() {\n const vl = this;\n vl.attachEvents();\n vl.setListSize();\n vl.render();\n }\n destroy() {\n let vl = this;\n vl.detachEvents();\n vl.$el[0].f7VirtualList = null;\n delete vl.$el[0].f7VirtualList;\n deleteProps(vl);\n vl = null;\n }\n}\nexport default VirtualList;", "import VirtualList from './virtual-list-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'virtualList',\n static: {\n VirtualList\n },\n create() {\n const app = this;\n app.virtualList = ConstructorMethods({\n defaultSelector: '.virtual-list',\n constructor: VirtualList,\n app,\n domProp: 'f7VirtualList'\n });\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nclass ListIndex extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const index = this;\n const defaults = {\n el: null,\n // where to render indexes\n listEl: null,\n // list el to generate indexes\n indexes: 'auto',\n // or array of indexes\n iosItemHeight: 14,\n mdItemHeight: 14,\n scrollList: true,\n label: false,\n // eslint-disable-next-line\n renderItem(itemContent, itemIndex) {\n return `\n - ${itemContent}
\n `.trim();\n },\n renderSkipPlaceholder() {\n return '';\n },\n on: {}\n };\n\n // Extend defaults with modules params\n index.useModulesParams(defaults);\n index.params = extend(defaults, params);\n let $el;\n let $listEl;\n let $pageContentEl;\n let $ul;\n if (index.params.el) {\n $el = $(index.params.el);\n } else {\n return index;\n }\n if ($el[0].f7ListIndex) {\n return $el[0].f7ListIndex;\n }\n $ul = $el.find('ul');\n if ($ul.length === 0) {\n $ul = $('');\n $el.append($ul);\n }\n if (index.params.listEl) {\n $listEl = $(index.params.listEl);\n }\n if (index.params.indexes === 'auto' && !$listEl) {\n return index;\n }\n if ($listEl) {\n $pageContentEl = $listEl.parents('.page-content').eq(0);\n } else {\n $pageContentEl = $el.siblings('.page-content').eq(0);\n if ($pageContentEl.length === 0) {\n $pageContentEl = $el.parents('.page').eq(0).find('.page-content').eq(0);\n }\n }\n $el[0].f7ListIndex = index;\n extend(index, {\n app,\n $el,\n el: $el && $el[0],\n $ul,\n ul: $ul && $ul[0],\n $listEl,\n listEl: $listEl && $listEl[0],\n $pageContentEl,\n pageContentEl: $pageContentEl && $pageContentEl[0],\n indexes: params.indexes,\n height: 0,\n skipRate: 0\n });\n\n // Install Modules\n index.useModules();\n\n // Attach events\n function handleResize() {\n const height = {\n index\n };\n index.calcSize();\n if (height !== index.height) {\n index.render();\n }\n }\n function handleClick(e) {\n const $clickedLi = $(e.target).closest('li');\n if (!$clickedLi.length) return;\n let itemIndex = $clickedLi.index();\n if (index.skipRate > 0) {\n const percentage = itemIndex / ($clickedLi.siblings('li').length - 1);\n itemIndex = Math.round((index.indexes.length - 1) * percentage);\n }\n const itemContent = index.indexes[itemIndex];\n index.$el.trigger('listindex:click', {\n content: itemContent,\n index: itemIndex\n });\n index.emit('local::click listIndexClick', index, itemContent, itemIndex);\n index.$el.trigger('listindex:select', {\n content: itemContent,\n index: itemIndex\n });\n index.emit('local::select listIndexSelect', index, itemContent, itemIndex);\n if (index.$listEl && index.params.scrollList) {\n index.scrollListToIndex(itemContent, itemIndex);\n }\n }\n const touchesStart = {};\n let isTouched;\n let isMoved;\n let topPoint;\n let bottomPoint;\n let $labelEl;\n let previousIndex = null;\n function handleTouchStart(e) {\n const $children = $ul.children();\n if (!$children.length) return;\n topPoint = $children[0].getBoundingClientRect().top;\n bottomPoint = $children[$children.length - 1].getBoundingClientRect().top + $children[0].offsetHeight;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isTouched = true;\n isMoved = false;\n previousIndex = null;\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n if (!isMoved && index.params.label) {\n $labelEl = $('');\n $el.append($labelEl);\n }\n isMoved = true;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n let percentage = (pageY - topPoint) / (bottomPoint - topPoint);\n percentage = Math.min(Math.max(percentage, 0), 1);\n const itemIndex = Math.round((index.indexes.length - 1) * percentage);\n const itemContent = index.indexes[itemIndex];\n const ulHeight = bottomPoint - topPoint;\n const bubbleBottom = (index.height - ulHeight) / 2 + (1 - percentage) * ulHeight;\n if (itemIndex !== previousIndex) {\n if (index.params.label) {\n $labelEl.html(itemContent).transform(`translateY(-${bubbleBottom}px)`);\n }\n if (index.$listEl && index.params.scrollList) {\n index.scrollListToIndex(itemContent, itemIndex);\n }\n }\n previousIndex = itemIndex;\n index.$el.trigger('listindex:select');\n index.emit('local::select listIndexSelect', index, itemContent, itemIndex);\n }\n function handleTouchEnd() {\n if (!isTouched) return;\n isTouched = false;\n isMoved = false;\n if (index.params.label) {\n if ($labelEl) $labelEl.remove();\n $labelEl = undefined;\n }\n }\n const passiveListener = getSupport().passiveListener ? {\n passive: true\n } : false;\n index.attachEvents = function attachEvents() {\n $el.parents('.tab').on('tab:show', handleResize);\n $el.parents('.page').on('page:reinit', handleResize);\n $el.parents('.panel').on('panel:open', handleResize);\n $el.parents('.sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast').on('modal:open', handleResize);\n app.on('resize', handleResize);\n $el.on('click', handleClick);\n $el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n };\n index.detachEvents = function attachEvents() {\n $el.parents('.tab').off('tab:show', handleResize);\n $el.parents('.page').off('page:reinit', handleResize);\n $el.parents('.panel').off('panel:open', handleResize);\n $el.parents('.sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast').off('modal:open', handleResize);\n app.off('resize', handleResize);\n $el.off('click', handleClick);\n $el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n };\n // Init\n index.init();\n return index;\n }\n // eslint-disable-next-line\n scrollListToIndex(itemContent, itemIndex) {\n const index = this;\n const {\n $listEl,\n $pageContentEl,\n app\n } = index;\n if (!$listEl || !$pageContentEl || $pageContentEl.length === 0) return index;\n let $scrollToEl;\n $listEl.find('.list-group-title').each(el => {\n if ($scrollToEl) return;\n const $el = $(el);\n if ($el.text() === itemContent) {\n $scrollToEl = $el;\n }\n });\n if (!$scrollToEl || $scrollToEl.length === 0) return index;\n const parentTop = $scrollToEl.parent().offset().top;\n let paddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const scrollTop = $pageContentEl[0].scrollTop;\n const scrollToElTop = $scrollToEl.offset().top;\n if ($pageContentEl.parents('.page-with-navbar-large').length) {\n const navbarInnerEl = app.navbar.getElByPage($pageContentEl.parents('.page-with-navbar-large').eq(0));\n const $titleLargeEl = $(navbarInnerEl).find('.title-large');\n if ($titleLargeEl.length) {\n paddingTop -= $titleLargeEl[0].offsetHeight || 0;\n }\n }\n if (parentTop <= paddingTop) {\n $pageContentEl.scrollTop(parentTop + scrollTop - paddingTop);\n } else {\n $pageContentEl.scrollTop(scrollToElTop + scrollTop - paddingTop);\n }\n return index;\n }\n renderSkipPlaceholder() {\n const index = this;\n return index.params.renderSkipPlaceholder.call(index);\n }\n renderItem(itemContent, itemIndex) {\n const index = this;\n return index.params.renderItem.call(index, itemContent, itemIndex);\n }\n render() {\n const index = this;\n const {\n $ul,\n indexes,\n skipRate\n } = index;\n let wasSkipped;\n const html = indexes.map((itemContent, itemIndex) => {\n if (itemIndex % skipRate !== 0 && skipRate > 0) {\n wasSkipped = true;\n return '';\n }\n let itemHtml = index.renderItem(itemContent, itemIndex);\n if (wasSkipped) {\n itemHtml = index.renderSkipPlaceholder() + itemHtml;\n }\n wasSkipped = false;\n return itemHtml;\n }).join('');\n $ul.html(html);\n return index;\n }\n calcSize() {\n const index = this;\n const {\n app,\n params,\n el,\n indexes\n } = index;\n const height = el.offsetHeight;\n const itemHeight = params[`${app.theme}ItemHeight`];\n const maxItems = Math.floor(height / itemHeight);\n const items = indexes.length;\n let skipRate = 0;\n if (items > maxItems) {\n skipRate = Math.ceil((items * 2 - 1) / maxItems);\n }\n index.height = height;\n index.skipRate = skipRate;\n return index;\n }\n calcIndexes() {\n const index = this;\n if (index.params.indexes === 'auto') {\n index.indexes = [];\n index.$listEl.find('.list-group-title').each(el => {\n const elContent = $(el).text();\n if (index.indexes.indexOf(elContent) < 0) {\n index.indexes.push(elContent);\n }\n });\n } else {\n index.indexes = index.params.indexes;\n }\n return index;\n }\n update() {\n const index = this;\n index.calcIndexes();\n index.calcSize();\n index.render();\n return index;\n }\n init() {\n const index = this;\n index.calcIndexes();\n index.calcSize();\n index.render();\n index.attachEvents();\n }\n destroy() {\n let index = this;\n index.$el.trigger('listindex:beforedestroy', index);\n index.emit('local::beforeDestroy listIndexBeforeDestroy');\n index.detachEvents();\n if (index.$el[0]) {\n index.$el[0].f7ListIndex = null;\n delete index.$el[0].f7ListIndex;\n }\n deleteProps(index);\n index = null;\n }\n}\nexport default ListIndex;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport ListIndex from './list-index-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'listIndex',\n static: {\n ListIndex\n },\n create() {\n const app = this;\n app.listIndex = ConstructorMethods({\n defaultSelector: '.list-index',\n constructor: ListIndex,\n app,\n domProp: 'f7ListIndex'\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.list-index-init').each(listIndexEl => {\n const params = extend($(listIndexEl).dataset(), {\n el: listIndexEl\n });\n app.listIndex.create(params);\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.list-index-init').each(listIndexEl => {\n if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.list-index-init').each(listIndexEl => {\n const params = extend($(listIndexEl).dataset(), {\n el: listIndexEl\n });\n app.listIndex.create(params);\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.list-index-init').each(listIndexEl => {\n if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();\n });\n }\n },\n vnode: {\n 'list-index-init': {\n insert(vnode) {\n const app = this;\n const listIndexEl = vnode.elm;\n const params = extend($(listIndexEl).dataset(), {\n el: listIndexEl\n });\n app.listIndex.create(params);\n },\n destroy(vnode) {\n const listIndexEl = vnode.elm;\n if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();\n }\n }\n }\n};", "export default {\n name: 'timeline'\n};", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nconst Tab = {\n show() {\n const app = this;\n let tabEl;\n let tabLinkEl;\n let animate;\n let tabRoute;\n let animatedInit;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0] && args[0].constructor === Object) {\n tabEl = args[0].tabEl;\n tabLinkEl = args[0].tabLinkEl;\n animate = args[0].animate;\n tabRoute = args[0].tabRoute;\n animatedInit = args[0].animatedInit;\n } else {\n [tabEl, tabLinkEl, animate, tabRoute] = args;\n if (typeof args[1] === 'boolean') {\n [tabEl, animate, tabLinkEl, tabRoute] = args;\n if (args.length > 2 && tabLinkEl.constructor === Object) {\n [tabEl, animate, tabRoute, tabLinkEl] = args;\n }\n }\n }\n if (typeof animate === 'undefined') animate = true;\n const $newTabEl = $(tabEl);\n if (tabRoute && $newTabEl[0]) {\n $newTabEl[0].f7TabRoute = tabRoute;\n }\n if (!animatedInit && ($newTabEl.length === 0 || $newTabEl.hasClass('tab-active'))) {\n return {\n $newTabEl,\n newTabEl: $newTabEl[0]\n };\n }\n let $tabLinkEl;\n if (tabLinkEl) $tabLinkEl = $(tabLinkEl);\n const $tabsEl = $newTabEl.parent('.tabs');\n if ($tabsEl.length === 0) {\n return {\n $newTabEl,\n newTabEl: $newTabEl[0]\n };\n }\n\n // Release swipeouts in hidden tabs\n if (app.swipeout) app.swipeout.allowOpen = true;\n\n // Animated tabs\n const tabsChangedCallbacks = [];\n function onTabsChanged(callback) {\n tabsChangedCallbacks.push(callback);\n }\n function tabsChanged() {\n tabsChangedCallbacks.forEach(callback => {\n callback();\n });\n }\n let animated = false;\n if ($tabsEl.parent().hasClass('tabs-animated-wrap')) {\n $tabsEl.parent()[animate ? 'removeClass' : 'addClass']('not-animated');\n const transitionDuration = parseFloat($tabsEl.css('transition-duration').replace(',', '.'));\n if (animate && transitionDuration) {\n $tabsEl.transitionEnd(tabsChanged);\n animated = true;\n }\n const tabsTranslate = (app.rtl ? $newTabEl.index() : -$newTabEl.index()) * 100;\n $tabsEl.transform(`translate3d(${tabsTranslate}%,0,0)`);\n }\n\n // Swipeable tabs\n let swiper;\n if ($tabsEl[0].nodeName.toLowerCase() === 'swiper-container' && app.swiper) {\n swiper = $tabsEl[0].swiper;\n const newTabIndex = swiper.slides.indexOf($newTabEl[0]);\n if (swiper && swiper.activeIndex !== newTabIndex) {\n animated = true;\n swiper.once('slideChangeTransitionEnd', () => {\n tabsChanged();\n }).slideTo(newTabIndex, animate ? undefined : 0);\n } else if (swiper && swiper.animating) {\n animated = true;\n swiper.once('slideChangeTransitionEnd', () => {\n tabsChanged();\n });\n }\n }\n\n // Remove active class from old tabs\n const $oldTabEl = $tabsEl.children('.tab-active');\n $oldTabEl.removeClass('tab-active');\n if (!animatedInit && (!swiper || swiper && !swiper.animating || swiper && tabRoute)) {\n if ($oldTabEl.hasClass('view') && $oldTabEl.children('.page').length) {\n $oldTabEl.children('.page').each(pageEl => {\n $(pageEl).trigger('page:tabhide');\n app.emit('pageTabHide', pageEl);\n });\n }\n $oldTabEl.trigger('tab:hide');\n app.emit('tabHide', $oldTabEl[0]);\n }\n\n // Trigger 'show' event on new tab\n $newTabEl.addClass('tab-active');\n if (!animatedInit && (!swiper || swiper && !swiper.animating || swiper && tabRoute)) {\n if ($newTabEl.hasClass('view') && $newTabEl.children('.page').length) {\n $newTabEl.children('.page').each(pageEl => {\n $(pageEl).trigger('page:tabshow');\n app.emit('pageTabShow', pageEl);\n });\n }\n $newTabEl.trigger('tab:show');\n app.emit('tabShow', $newTabEl[0]);\n }\n\n // Find related link for new tab\n if (!$tabLinkEl) {\n // Search by id\n if (typeof tabEl === 'string') $tabLinkEl = $(`.tab-link[href=\"${tabEl}\"]`);else $tabLinkEl = $(`.tab-link[href=\"#${$newTabEl.attr('id')}\"]`);\n // Search by data-tab\n if (!$tabLinkEl || $tabLinkEl && $tabLinkEl.length === 0) {\n $('[data-tab]').each(el => {\n if ($newTabEl.is($(el).attr('data-tab'))) $tabLinkEl = $(el);\n });\n }\n if (tabRoute && (!$tabLinkEl || $tabLinkEl && $tabLinkEl.length === 0)) {\n $tabLinkEl = $(`[data-route-tab-id=\"${tabRoute.route.tab.id}\"]`);\n if ($tabLinkEl.length === 0) {\n $tabLinkEl = $(`.tab-link[href=\"${tabRoute.url}\"]`);\n }\n }\n if ($tabLinkEl.length > 1 && $newTabEl.parents('.page').length) {\n // eslint-disable-next-line\n $tabLinkEl = $tabLinkEl.filter(tabLinkElement => {\n return $(tabLinkElement).parents('.page')[0] === $newTabEl.parents('.page')[0];\n });\n if (app.theme === 'ios' && $tabLinkEl.length === 0 && tabRoute) {\n const $pageEl = $newTabEl.parents('.page');\n const $navbarEl = $(app.navbar.getElByPage($pageEl));\n $tabLinkEl = $navbarEl.find(`[data-route-tab-id=\"${tabRoute.route.tab.id}\"]`);\n if ($tabLinkEl.length === 0) {\n $tabLinkEl = $navbarEl.find(`.tab-link[href=\"${tabRoute.url}\"]`);\n }\n }\n }\n }\n if ($tabLinkEl.length > 0) {\n // Find related link for old tab\n let $oldTabLinkEl;\n if ($oldTabEl && $oldTabEl.length > 0) {\n // Search by id\n const oldTabId = $oldTabEl.attr('id');\n if (oldTabId) {\n $oldTabLinkEl = $(`.tab-link[href=\"#${oldTabId}\"]`);\n // Search by data-route-tab-id\n if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {\n $oldTabLinkEl = $(`.tab-link[data-route-tab-id=\"${oldTabId}\"]`);\n }\n }\n // Search by data-tab\n if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {\n $('[data-tab]').each(tabLinkElement => {\n if ($oldTabEl.is($(tabLinkElement).attr('data-tab'))) $oldTabLinkEl = $(tabLinkElement);\n });\n }\n if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {\n $oldTabLinkEl = $tabLinkEl.siblings('.tab-link-active');\n }\n } else if (tabRoute) {\n $oldTabLinkEl = $tabLinkEl.siblings('.tab-link-active');\n }\n if ($oldTabLinkEl && $oldTabLinkEl.length > 1 && $oldTabEl && $oldTabEl.parents('.page').length) {\n // eslint-disable-next-line\n $oldTabLinkEl = $oldTabLinkEl.filter(tabLinkElement => {\n return $(tabLinkElement).parents('.page')[0] === $oldTabEl.parents('.page')[0];\n });\n }\n if ($oldTabLinkEl && $oldTabLinkEl.length > 0) $oldTabLinkEl.removeClass('tab-link-active');\n\n // Update links' classes\n if ($tabLinkEl && $tabLinkEl.length > 0) {\n $tabLinkEl.addClass('tab-link-active');\n // Material Highlight\n const $tabbarEl = $tabLinkEl.parents('.tabbar, .tabbar-icons');\n const hasHighlight = app.toolbar && $tabbarEl.length > 0 && ($tabbarEl.hasClass('tabbar-highlight') || app.theme !== 'ios');\n if (hasHighlight) {\n app.toolbar.setHighlight($tabbarEl);\n }\n }\n }\n return {\n $newTabEl,\n newTabEl: $newTabEl[0],\n $oldTabEl,\n oldTabEl: $oldTabEl[0],\n onTabsChanged,\n animated\n };\n }\n};\nexport default {\n name: 'tabs',\n create() {\n const app = this;\n extend(app, {\n tab: {\n show: Tab.show.bind(app)\n }\n });\n },\n on: {\n 'pageInit tabMounted': function onInit(pageOrTabEl) {\n const $el = $(pageOrTabEl.el || pageOrTabEl);\n const animatedTabEl = $el.find('.tabs-animated-wrap > .tabs > .tab-active')[0];\n if (!animatedTabEl) return;\n const app = this;\n app.tab.show({\n tabEl: animatedTabEl,\n animatedInit: true,\n animate: false\n });\n }\n },\n clicks: {\n '.tab-link': function tabLinkClick($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n if ($clickedEl.attr('href') && $clickedEl.attr('href').indexOf('#') === 0 || $clickedEl.attr('data-tab')) {\n const app = this;\n app.tab.show({\n tabEl: data.tab || $clickedEl.attr('href'),\n tabLinkEl: $clickedEl,\n animate: data.animate\n });\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, now, nextFrame } from '../../shared/utils.js';\nfunction swipePanel(panel) {\n const app = panel.app;\n if (panel.swipeInitialized) {\n return;\n }\n extend(panel, {\n swipeable: true,\n swipeInitialized: true\n });\n const params = panel.params;\n const {\n $el,\n $backdropEl,\n side,\n effect\n } = panel;\n let otherPanel;\n let isTouched;\n let isGestureStarted;\n let isMoved;\n let isScrolling;\n let isInterrupted;\n const touchesStart = {};\n let touchStartTime;\n let touchesDiff;\n let translate;\n let backdropOpacity;\n let panelWidth;\n let direction;\n let $viewEl;\n let touchMoves = 0;\n function handleTouchStart(e) {\n if (!panel.swipeable || isGestureStarted) return;\n if (!app.panel.allowOpen || !params.swipe && !params.swipeOnlyClose || isTouched) return;\n if ($('.modal-in:not(.toast):not(.notification), .photo-browser-in').length > 0) return;\n otherPanel = app.panel.get(side === 'left' ? 'right' : 'left') || {};\n const otherPanelOpened = otherPanel.opened && otherPanel.$el && !otherPanel.$el.hasClass('panel-in-breakpoint');\n if (!panel.opened && otherPanelOpened) {\n return;\n }\n if (!params.swipeOnlyClose) {\n if (otherPanelOpened) return;\n }\n if (e.target && e.target.nodeName.toLowerCase() === 'input' && e.target.type === 'range') return;\n if ($(e.target).closest('.range-slider, swiper-container.tabs, .calendar-months, .no-swipe-panel, .card-opened').length > 0) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n if (params.swipeOnlyClose && !panel.opened) {\n return;\n }\n if (params.swipeActiveArea && !panel.opened) {\n if (side === 'left') {\n if (touchesStart.x > params.swipeActiveArea) return;\n }\n if (side === 'right') {\n if (touchesStart.x < app.width - params.swipeActiveArea) return;\n }\n }\n touchMoves = 0;\n $viewEl = $(panel.getViewEl());\n isMoved = false;\n isTouched = true;\n isScrolling = undefined;\n isInterrupted = false;\n touchStartTime = now();\n direction = undefined;\n }\n function handleTouchMove(e) {\n if (!isTouched || isGestureStarted || isInterrupted) return;\n touchMoves += 1;\n if (touchMoves < 2) return;\n if (e.f7PreventSwipePanel || app.preventSwipePanelBySwipeBack || app.preventSwipePanel) {\n isTouched = false;\n return;\n }\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n if (!direction) {\n if (pageX > touchesStart.x) {\n direction = 'to-right';\n } else {\n direction = 'to-left';\n }\n if (params.swipeActiveArea > 0 && !panel.opened) {\n if (side === 'left' && touchesStart.x > params.swipeActiveArea) {\n isTouched = false;\n return;\n }\n if (side === 'right' && touchesStart.x < app.width - params.swipeActiveArea) {\n isTouched = false;\n return;\n }\n }\n if ($el.hasClass('panel-in-breakpoint')) {\n isTouched = false;\n return;\n }\n if (side === 'left' && direction === 'to-left' && !$el.hasClass('panel-in') || side === 'right' && direction === 'to-right' && !$el.hasClass('panel-in')) {\n isTouched = false;\n return;\n }\n }\n let threshold = panel.opened ? 0 : -params.swipeThreshold;\n if (side === 'right') threshold = -threshold;\n if (!isMoved) {\n if (!panel.opened) {\n panel.insertToRoot();\n $el.addClass('panel-in-swipe');\n if ($backdropEl) $backdropEl.css('visibility', 'visible');\n $el.trigger('panel:swipeopen');\n panel.emit('local::swipeOpen panelSwipeOpen', panel);\n }\n panelWidth = $el[0].offsetWidth;\n if (effect === 'reveal' && $el.hasClass('panel-in-collapsed')) {\n panelWidth -= parseFloat($viewEl.css(`margin-${side}`));\n }\n $el.transition(0);\n }\n isMoved = true;\n if (e.cancelable) {\n e.preventDefault();\n }\n touchesDiff = pageX - touchesStart.x + threshold;\n const startTranslate = effect === 'floating' ? 8 : 0;\n if (side === 'right') {\n if (effect === 'cover' || effect === 'push' || effect === 'floating') {\n translate = touchesDiff + (panel.opened ? startTranslate : panelWidth);\n if (translate < 0 - startTranslate) translate = -startTranslate;\n if (translate > panelWidth) {\n translate = panelWidth;\n }\n } else {\n translate = touchesDiff - (panel.opened ? panelWidth : 0);\n if (translate > 0) translate = 0;\n if (translate < -panelWidth) {\n translate = -panelWidth;\n }\n }\n } else {\n translate = touchesDiff + (panel.opened ? panelWidth : startTranslate);\n if (translate < 0) translate = 0;\n if (translate > panelWidth + startTranslate) {\n translate = panelWidth + startTranslate;\n }\n }\n const noFollowProgress = Math.abs(translate / panelWidth);\n if (effect === 'reveal') {\n if (!params.swipeNoFollow) {\n $viewEl.transform(`translate3d(${translate}px,0,0)`).transition(0);\n if ($backdropEl) $backdropEl.transform(`translate3d(${translate}px,0,0)`).transition(0);\n }\n $el.trigger('panel:swipe', Math.abs(translate / panelWidth));\n panel.emit('local::swipe panelSwipe', panel, Math.abs(translate / panelWidth));\n } else {\n if (side === 'left') translate -= panelWidth;\n if (!params.swipeNoFollow) {\n backdropOpacity = 1 - Math.abs(translate / panelWidth);\n if ($backdropEl) {\n $backdropEl.transition(0);\n $backdropEl.css({\n opacity: backdropOpacity\n });\n }\n $el.transform(`translate3d(${translate}px,0,0)`).transition(0);\n if (effect === 'push') {\n const viewTranslate = side === 'left' ? translate + panelWidth : translate - panelWidth;\n $viewEl.transform(`translate3d(${viewTranslate}px,0,0)`).transition(0);\n if ($backdropEl) {\n $backdropEl.transform(`translate3d(${viewTranslate}px,0,0)`).transition(0);\n }\n }\n }\n $el.trigger('panel:swipe', Math.abs(translate / panelWidth));\n panel.emit('local::swipe panelSwipe', panel, Math.abs(translate / panelWidth));\n }\n if (params.swipeNoFollow) {\n const stateChanged = panel.opened && noFollowProgress === 0 || !panel.opened && noFollowProgress === 1;\n if (stateChanged) {\n isInterrupted = true;\n // eslint-disable-next-line\n handleTouchEnd(e);\n }\n }\n }\n function handleTouchEnd(e) {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n const isGesture = e.type === 'gesturestart' || isGestureStarted;\n isTouched = false;\n isMoved = false;\n const timeDiff = new Date().getTime() - touchStartTime;\n let action;\n const startTranslate = effect === 'floating' ? side === 'left' ? 8 : -8 : 0;\n const edge = (translate === startTranslate || Math.abs(translate) === panelWidth) && !params.swipeNoFollow;\n const threshold = params.swipeThreshold || 0;\n if (isGesture) {\n action = 'reset';\n } else if (!panel.opened) {\n if (Math.abs(touchesDiff) < threshold) {\n action = 'reset';\n } else if (effect === 'cover' || effect === 'push' || effect === 'floating') {\n if (translate === 0 + startTranslate) {\n action = 'swap'; // open\n } else if (timeDiff < 300 && Math.abs(translate) > 0) {\n action = 'swap'; // open\n } else if (timeDiff >= 300 && Math.abs(translate) < panelWidth / 2) {\n action = 'swap'; // open\n } else {\n action = 'reset'; // close\n }\n } else if (translate === 0) {\n action = 'reset';\n } else if (timeDiff < 300 && Math.abs(translate) > 0 || timeDiff >= 300 && Math.abs(translate) >= panelWidth / 2) {\n action = 'swap';\n } else {\n action = 'reset';\n }\n } else if (effect === 'cover' || effect === 'push' || effect === 'floating') {\n if (translate === 0) {\n action = 'reset'; // open\n } else if (timeDiff < 300 && Math.abs(translate) > 0) {\n action = 'swap'; // open\n } else if (timeDiff >= 300 && Math.abs(translate) < panelWidth / 2) {\n action = 'reset'; // open\n } else {\n action = 'swap'; // close\n }\n } else if (translate === -panelWidth) {\n action = 'reset';\n } else if (timeDiff < 300 && Math.abs(translate) >= 0 || timeDiff >= 300 && Math.abs(translate) <= panelWidth / 2) {\n if (side === 'left' && translate === panelWidth) action = 'reset';else action = 'swap';\n } else {\n action = 'reset';\n }\n if (action === 'swap') {\n if (panel.opened) {\n panel.close(!edge);\n } else {\n panel.open(!edge);\n }\n }\n let removePanelInClass = true;\n if (action === 'reset') {\n if (!panel.opened) {\n if (edge) {\n // edge position\n $el.removeClass('panel-in-swipe');\n } else {\n removePanelInClass = false;\n const target = effect === 'reveal' ? $viewEl : $el;\n panel.setStateClasses('before-closing');\n target.transitionEnd(() => {\n if ($el.hasClass('panel-in')) return;\n $el.removeClass('panel-in-swipe');\n panel.setStateClasses('after-closing');\n });\n }\n }\n }\n if (effect === 'reveal' || effect === 'push') {\n nextFrame(() => {\n $viewEl.transition('');\n $viewEl.transform('');\n });\n }\n if (removePanelInClass) {\n $el.removeClass('panel-in-swipe');\n }\n $el.transition('').transform('');\n if ($backdropEl) {\n $backdropEl.transform('').transition('').css({\n opacity: '',\n visibility: ''\n });\n }\n }\n function handleGestureStart(e) {\n isGestureStarted = true;\n handleTouchEnd(e);\n }\n function handleGestureEnd() {\n isGestureStarted = false;\n }\n\n // Add Events\n app.on('touchstart:passive', handleTouchStart);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('gesturestart', handleGestureStart);\n app.on('gestureend', handleGestureEnd);\n panel.on('panelDestroy', () => {\n app.off('touchstart:passive', handleTouchStart);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('gesturestart', handleGestureStart);\n app.off('gestureend', handleGestureEnd);\n });\n}\nexport default swipePanel;", "import $ from '../../shared/dom7.js';\nimport { extend, nextFrame } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nfunction resizablePanel(panel) {\n const app = panel.app;\n const support = getSupport();\n if (panel.resizableInitialized) return;\n extend(panel, {\n resizable: true,\n resizableWidth: null,\n resizableInitialized: true\n });\n const $htmlEl = $('html');\n const {\n $el,\n $backdropEl,\n side,\n effect\n } = panel;\n if (!$el) return;\n let isTouched;\n let isMoved;\n const touchesStart = {};\n let touchesDiff;\n let panelWidth;\n let $viewEl;\n let panelMinWidth;\n let panelMaxWidth;\n let visibleByBreakpoint;\n const isPushingPanel = effect !== 'cover' && effect !== 'floating';\n function transformCSSWidth(v) {\n if (!v) return null;\n if (v.indexOf('%') >= 0 || v.indexOf('vw') >= 0) {\n return parseInt(v, 10) / 100 * app.width;\n }\n const newV = parseInt(v, 10);\n if (Number.isNaN(newV)) return null;\n return newV;\n }\n function isResizable() {\n return panel.resizable && $el.hasClass('panel-resizable');\n }\n function handleTouchStart(e) {\n if (!isResizable()) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isMoved = false;\n isTouched = true;\n panelMinWidth = transformCSSWidth($el.css('min-width'));\n panelMaxWidth = transformCSSWidth($el.css('max-width'));\n visibleByBreakpoint = $el.hasClass('panel-in-breakpoint');\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n if (!isMoved) {\n panelWidth = $el[0].offsetWidth;\n $el.transition(0);\n $el.addClass('panel-resizing');\n $htmlEl.css('cursor', 'col-resize');\n if (isPushingPanel || visibleByBreakpoint) {\n $viewEl = $(panel.getViewEl());\n if (panel.$containerEl && panel.$containerEl.hasClass('page')) {\n $viewEl.add(panel.$containerEl.children('.page-content, .tabs, .fab'));\n }\n }\n if (isPushingPanel && !visibleByBreakpoint) {\n $backdropEl.transition(0);\n $viewEl.transition(0);\n }\n }\n isMoved = true;\n e.preventDefault();\n touchesDiff = pageX - touchesStart.x;\n let newPanelWidth = side === 'left' ? panelWidth + touchesDiff : panelWidth - touchesDiff;\n if (panelMinWidth && !Number.isNaN(panelMinWidth)) {\n newPanelWidth = Math.max(newPanelWidth, panelMinWidth);\n }\n if (panelMaxWidth && !Number.isNaN(panelMaxWidth)) {\n newPanelWidth = Math.min(newPanelWidth, panelMaxWidth);\n }\n newPanelWidth = Math.min(Math.max(newPanelWidth, 0), app.width);\n panel.resizableWidth = newPanelWidth;\n $el[0].style.width = `${newPanelWidth}px`;\n if (isPushingPanel && !visibleByBreakpoint) {\n if ($viewEl) {\n $viewEl.transform(`translate3d(${side === 'left' ? newPanelWidth : -newPanelWidth}px, 0, 0)`);\n }\n if ($backdropEl) {\n $backdropEl.transform(`translate3d(${side === 'left' ? newPanelWidth : -newPanelWidth}px, 0, 0)`);\n }\n } else if (visibleByBreakpoint && $viewEl) {\n $viewEl.css(`margin-${side}`, `${newPanelWidth}px`);\n }\n $el.trigger('panel:resize', newPanelWidth);\n panel.emit('local::resize panelResize', panel, newPanelWidth);\n }\n function handleTouchEnd() {\n $('html').css('cursor', '');\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n $htmlEl[0].style.setProperty(`--f7-panel-${side}-width`, `${panel.resizableWidth}px`);\n $el[0].style.width = '';\n if (isPushingPanel && !visibleByBreakpoint) {\n $viewEl.transform('');\n $backdropEl.transform('');\n }\n $el.removeClass('panel-resizing');\n nextFrame(() => {\n $el.transition('');\n if (isPushingPanel) {\n $backdropEl.transition('');\n if ($viewEl) $viewEl.transition('');\n }\n });\n }\n function handleResize() {\n if (!panel.opened || !panel.resizableWidth) return;\n panelMinWidth = transformCSSWidth($el.css('min-width'));\n panelMaxWidth = transformCSSWidth($el.css('max-width'));\n if (panelMinWidth && !Number.isNaN(panelMinWidth) && panel.resizableWidth < panelMinWidth) {\n panel.resizableWidth = Math.max(panel.resizableWidth, panelMinWidth);\n }\n if (panelMaxWidth && !Number.isNaN(panelMaxWidth) && panel.resizableWidth > panelMaxWidth) {\n panel.resizableWidth = Math.min(panel.resizableWidth, panelMaxWidth);\n }\n panel.resizableWidth = Math.min(Math.max(panel.resizableWidth, 0), app.width);\n $htmlEl[0].style.setProperty(`--f7-panel-${side}-width`, `${panel.resizableWidth}px`);\n }\n if (panel.$el.find('.panel-resize-handler').length === 0) {\n panel.$el.append('');\n }\n panel.$resizeHandlerEl = panel.$el.children('.panel-resize-handler');\n $el.addClass('panel-resizable');\n\n // Add Events\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n panel.$el.on(app.touchEvents.start, '.panel-resize-handler', handleTouchStart, passive);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n panel.on('beforeOpen', handleResize);\n panel.once('panelDestroy', () => {\n $el.removeClass('panel-resizable');\n panel.$resizeHandlerEl.remove();\n panel.$el.off(app.touchEvents.start, '.panel-resize-handler', handleTouchStart, passive);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n panel.off('beforeOpen', handleResize);\n });\n}\nexport default resizablePanel;", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport swipePanel from './swipe-panel.js';\nimport resizablePanel from './resizable-panel.js';\nclass Panel extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n const extendedParams = extend({\n on: {}\n }, app.params.panel, params);\n super(extendedParams, [app]);\n const panel = this;\n panel.params = extendedParams;\n panel.$containerEl = panel.params.containerEl ? $(panel.params.containerEl).eq(0) : app.$el;\n panel.containerEl = panel.$containerEl[0];\n if (!panel.containerEl) {\n panel.$containerEl = app.$el;\n panel.containerEl = app.$el[0];\n }\n let $el;\n if (panel.params.el) {\n $el = $(panel.params.el).eq(0);\n } else if (panel.params.content) {\n $el = $(panel.params.content).filter(node => node.nodeType === 1).eq(0);\n }\n if ($el.length === 0) return panel;\n if ($el[0].f7Panel) return $el[0].f7Panel;\n $el[0].f7Panel = panel;\n let {\n side,\n effect,\n resizable\n } = panel.params;\n if (typeof side === 'undefined') side = $el.hasClass('panel-left') ? 'left' : 'right';\n if (typeof effect === 'undefined')\n // eslint-disable-next-line\n effect = $el.hasClass('panel-cover') ? 'cover' : $el.hasClass('panel-push') ? 'push' : $el.hasClass('panel-floating') ? 'floating' : 'reveal';\n if (typeof resizable === 'undefined') resizable = $el.hasClass('panel-resizable');\n let $backdropEl;\n if (panel.params.backdrop && panel.params.backdropEl) {\n $backdropEl = $(panel.params.backdropEl);\n } else if (panel.params.backdrop) {\n $backdropEl = panel.$containerEl.children('.panel-backdrop');\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n panel.$containerEl.prepend($backdropEl);\n }\n }\n extend(panel, {\n app,\n side,\n effect,\n resizable,\n $el,\n el: $el[0],\n opened: false,\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0]\n });\n\n // Install Modules\n panel.useModules();\n\n // Init\n panel.init();\n return panel;\n }\n getViewEl() {\n const panel = this;\n let viewEl;\n if (panel.$containerEl.children('.views').length > 0) {\n viewEl = panel.$containerEl.children('.views')[0];\n } else {\n viewEl = panel.$containerEl.children('.view')[0];\n }\n return viewEl;\n }\n setStateClasses(state) {\n const panel = this;\n const {\n side,\n el,\n effect\n } = panel;\n const viewEl = panel.getViewEl();\n const panelInView = viewEl && viewEl.contains(el);\n const $targetEl = !viewEl || panelInView ? panel.$containerEl : $('html');\n if (state === 'open') {\n $targetEl.addClass(`with-panel with-panel-${panel.side}-${panel.effect}`);\n }\n if (state === 'before-closing') {\n $targetEl.addClass('with-panel-closing');\n }\n if (state === 'closing') {\n $targetEl.addClass('with-panel-closing');\n $targetEl.removeClass(`with-panel with-panel-${panel.side}-${panel.effect}`);\n }\n if (state === 'after-closing') {\n $targetEl.removeClass('with-panel-closing');\n }\n if (state === 'closed') {\n $targetEl.removeClass(`with-panel-${side}-${effect}`);\n }\n }\n enableVisibleBreakpoint() {\n const panel = this;\n panel.visibleBreakpointDisabled = false;\n panel.setVisibleBreakpoint();\n return panel;\n }\n disableVisibleBreakpoint() {\n const panel = this;\n panel.visibleBreakpointDisabled = true;\n panel.setVisibleBreakpoint();\n return panel;\n }\n toggleVisibleBreakpoint() {\n const panel = this;\n panel.visibleBreakpointDisabled = !panel.visibleBreakpointDisabled;\n panel.setVisibleBreakpoint();\n return panel;\n }\n setVisibleBreakpoint(emitEvents) {\n if (emitEvents === void 0) {\n emitEvents = true;\n }\n const panel = this;\n const app = panel.app;\n if (!panel.visibleBreakpointResizeHandler) {\n panel.visibleBreakpointResizeHandler = function visibleBreakpointResizeHandler() {\n panel.setVisibleBreakpoint();\n };\n app.on('resize', panel.visibleBreakpointResizeHandler);\n }\n const {\n side,\n $el,\n $containerEl,\n params,\n visibleBreakpointDisabled\n } = panel;\n const breakpoint = params.visibleBreakpoint;\n const $viewEl = $(panel.getViewEl());\n const wasVisible = $el.hasClass('panel-in-breakpoint');\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs, .fab'));\n }\n if (app.width >= breakpoint && typeof breakpoint !== 'undefined' && breakpoint !== null && !visibleBreakpointDisabled) {\n if (!wasVisible) {\n panel.setStateClasses('closed');\n $el.addClass('panel-in-breakpoint').removeClass('panel-in panel-in-collapsed');\n panel.onOpen(false);\n panel.onOpened();\n $viewEl.css({\n [`margin-${side}`]: `${$el.width()}px`\n });\n app.allowPanelOpen = true;\n if (emitEvents) {\n panel.emit('local::breakpoint panelBreakpoint', panel);\n panel.$el.trigger('panel:breakpoint');\n }\n } else {\n $viewEl.css({\n [`margin-${side}`]: `${$el.width()}px`\n });\n }\n } else if (wasVisible) {\n $el.removeClass('panel-in-breakpoint panel-in');\n panel.onClose();\n panel.onClosed();\n $viewEl.css({\n [`margin-${side}`]: ''\n });\n if (emitEvents) {\n panel.emit('local::breakpoint panelBreakpoint', panel);\n panel.$el.trigger('panel:breakpoint');\n }\n }\n }\n enableCollapsedBreakpoint() {\n const panel = this;\n panel.collapsedBreakpointDisabled = false;\n panel.setCollapsedBreakpoint();\n return panel;\n }\n disableCollapsedBreakpoint() {\n const panel = this;\n panel.collapsedBreakpointDisabled = true;\n panel.setCollapsedBreakpoint();\n return panel;\n }\n toggleCollapsedBreakpoint() {\n const panel = this;\n panel.collapsedBreakpointDisabled = !panel.collapsedBreakpointDisabled;\n panel.setCollapsedBreakpoint();\n return panel;\n }\n setCollapsedBreakpoint(emitEvents) {\n if (emitEvents === void 0) {\n emitEvents = true;\n }\n const panel = this;\n const app = panel.app;\n if (!panel.collapsedBreakpointResizeHandler) {\n panel.collapsedBreakpointResizeHandler = function collapsedBreakpointResizeHandler() {\n panel.setCollapsedBreakpoint();\n };\n app.on('resize', panel.collapsedBreakpointResizeHandler);\n }\n const {\n $el,\n params,\n collapsedBreakpointDisabled\n } = panel;\n if ($el.hasClass('panel-in-breakpoint')) return;\n const breakpoint = params.collapsedBreakpoint;\n const wasVisible = $el.hasClass('panel-in-collapsed');\n if (app.width >= breakpoint && typeof breakpoint !== 'undefined' && breakpoint !== null && !collapsedBreakpointDisabled) {\n if (!wasVisible) {\n panel.setStateClasses('closed');\n $el.addClass('panel-in-collapsed').removeClass('panel-in');\n panel.collapsed = true;\n app.allowPanelOpen = true;\n if (emitEvents) {\n panel.emit('local::collapsedBreakpoint panelCollapsedBreakpoint', panel);\n panel.$el.trigger('panel:collapsedbreakpoint');\n }\n }\n } else if (wasVisible) {\n $el.removeClass('panel-in-collapsed panel-in');\n panel.collapsed = false;\n if (emitEvents) {\n panel.emit('local::collapsedBreakpoint panelCollapsedBreakpoint', panel);\n panel.$el.trigger('panel:collapsedbreakpoint');\n }\n }\n }\n enableResizable() {\n const panel = this;\n if (panel.resizableInitialized) {\n panel.resizable = true;\n panel.$el.addClass('panel-resizable');\n } else {\n resizablePanel(panel);\n }\n return panel;\n }\n disableResizable() {\n const panel = this;\n panel.resizable = false;\n panel.$el.removeClass('panel-resizable');\n return panel;\n }\n enableSwipe() {\n const panel = this;\n if (panel.swipeInitialized) {\n panel.swipeable = true;\n } else {\n swipePanel(panel);\n }\n return panel;\n }\n disableSwipe() {\n const panel = this;\n panel.swipeable = false;\n return panel;\n }\n onOpen(modifyHtmlClasses) {\n if (modifyHtmlClasses === void 0) {\n modifyHtmlClasses = true;\n }\n const panel = this;\n // eslint-disable-next-line\n panel._openTransitionStarted = false;\n const app = panel.app;\n panel.opened = true;\n app.panel.allowOpen = false;\n panel.$el.trigger('panel:beforeopen');\n panel.emit('local::beforeOpen panelBeforeOpen', panel);\n if (modifyHtmlClasses) {\n panel.setStateClasses('open');\n }\n panel.$el.trigger('panel:open');\n panel.emit('local::open panelOpen', panel);\n }\n onOpened() {\n const panel = this;\n const app = panel.app;\n app.panel.allowOpen = true;\n panel.$el.trigger('panel:opened');\n panel.emit('local::opened panelOpened', panel);\n }\n onClose() {\n const panel = this;\n const app = panel.app;\n panel.opened = false;\n app.panel.allowOpen = false;\n panel.$el.trigger('panel:beforeclose');\n panel.emit('local::beforeClose panelBeforeClose', panel);\n panel.setStateClasses('closing');\n panel.$el.trigger('panel:close');\n panel.emit('local::close panelClose', panel);\n }\n onClosed() {\n const panel = this;\n const app = panel.app;\n app.panel.allowOpen = true;\n panel.setStateClasses('after-closing');\n panel.$el.removeClass('panel-out');\n if (panel.$backdropEl) {\n const otherPanel = app.panel.get('.panel-in');\n const shouldHideBackdrop = !otherPanel || otherPanel && !otherPanel.$backdropEl;\n if (shouldHideBackdrop) {\n panel.$backdropEl.removeClass('panel-backdrop-in');\n }\n }\n panel.$el.trigger('panel:closed');\n panel.emit('local::closed panelClosed', panel);\n }\n toggle(animate) {\n if (animate === void 0) {\n animate = true;\n }\n const panel = this;\n const breakpoint = panel.params.visibleBreakpoint;\n const app = panel.app;\n if (app.width >= breakpoint && typeof breakpoint !== 'undefined' && breakpoint !== null) {\n return panel.toggleVisibleBreakpoint();\n }\n if (panel.opened) panel.close(animate);else panel.open(animate);\n return panel;\n }\n insertToRoot() {\n const panel = this;\n const document = getDocument();\n const {\n $el,\n $backdropEl,\n $containerEl\n } = panel;\n const $panelParentEl = $el.parent();\n const wasInDom = $el.parents(document).length > 0;\n if (!$panelParentEl.is($containerEl) || $el.prevAll('.views, .view').length) {\n const $insertBeforeEl = $containerEl.children('.panel, .views, .view').eq(0);\n const $insertAfterEl = $containerEl.children('.panel-backdrop').eq(0);\n if ($insertBeforeEl.length) {\n $el.insertBefore($insertBeforeEl);\n } else if ($insertAfterEl) {\n $el.insertBefore($insertAfterEl);\n } else {\n $containerEl.prepend($el);\n }\n if ($backdropEl && $backdropEl.length && (!$backdropEl.parent().is($containerEl) && $backdropEl.nextAll('.panel').length === 0 || $backdropEl.parent().is($containerEl) && $backdropEl.nextAll('.panel').length === 0)) {\n $backdropEl.insertBefore($el);\n }\n panel.once('panelClosed', () => {\n if (wasInDom) {\n $panelParentEl.append($el);\n } else {\n $el.remove();\n }\n });\n }\n }\n open(animate) {\n if (animate === void 0) {\n animate = true;\n }\n const panel = this;\n const app = panel.app;\n if (!app.panel.allowOpen) return false;\n const {\n effect,\n $el,\n $backdropEl,\n opened,\n $containerEl\n } = panel;\n if (!$el || $el.hasClass('panel-in')) {\n return panel;\n }\n panel.insertToRoot();\n\n // Ignore if opened\n if (opened || $el.hasClass('panel-in-breakpoint') || $el.hasClass('panel-in')) return false;\n\n // Close if some panel is opened\n const otherOpenedPanel = app.panel.get('.panel-in');\n if (otherOpenedPanel && otherOpenedPanel !== panel) {\n otherOpenedPanel.close(animate);\n }\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n $el.addClass('panel-in');\n if ($backdropEl) {\n $backdropEl.addClass('panel-backdrop-in');\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n }\n if (['cover', 'push', 'floating'].includes(panel.effect)) {\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n panel._clientLeft = $el[0].clientLeft;\n }\n\n // Transitionend\n const $viewEl = $(panel.getViewEl());\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs'));\n }\n const transitionEndTarget = effect === 'reveal' ? $viewEl : $el;\n function panelTransitionStart() {\n transitionEndTarget.transitionStart(() => {\n // eslint-disable-next-line\n panel._openTransitionStarted = true;\n });\n }\n function panelTransitionEnd() {\n transitionEndTarget.transitionEnd(e => {\n if ($(e.target).is(transitionEndTarget)) {\n if ($el.hasClass('panel-out')) {\n panel.onClosed();\n } else {\n panel.onOpened();\n }\n } else panelTransitionEnd();\n });\n }\n if (animate) {\n if ($backdropEl) {\n $backdropEl.removeClass('not-animated');\n }\n panelTransitionStart();\n panelTransitionEnd();\n $el.removeClass('panel-out not-animated').addClass('panel-in');\n panel.onOpen();\n } else {\n if ($backdropEl) {\n $backdropEl.addClass('not-animated');\n }\n $el.removeClass('panel-out').addClass('panel-in not-animated');\n panel.onOpen();\n panel.onOpened();\n // eslint-disable-next-line\n panel._openTransitionStarted = true;\n }\n return true;\n }\n close(animate) {\n if (animate === void 0) {\n animate = true;\n }\n const panel = this;\n const {\n effect,\n $el,\n $backdropEl,\n opened,\n $containerEl\n } = panel;\n if (!opened || $el.hasClass('panel-in-breakpoint') || !$el.hasClass('panel-in')) return panel;\n $el[animate ? 'removeClass' : 'addClass']('not-animated');\n if ($backdropEl) {\n $backdropEl[animate ? 'removeClass' : 'addClass']('not-animated');\n }\n const $viewEl = $(panel.getViewEl());\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs'));\n }\n const transitionEndTarget = effect === 'reveal' ? $viewEl : $el;\n // eslint-disable-next-line\n if (!panel._openTransitionStarted) {\n // eslint-disable-next-line\n animate = false;\n }\n function transitionEnd() {\n if ($el.hasClass('panel-out')) {\n panel.onClosed();\n } else if ($el.hasClass('panel-in')) {\n panel.onOpened();\n }\n panel.setStateClasses('after-closing');\n }\n if (animate) {\n transitionEndTarget.transitionEnd(() => {\n transitionEnd();\n });\n $el.removeClass('panel-in').addClass('panel-out');\n // Emit close\n panel.onClose();\n } else {\n $el.addClass('not-animated').removeClass('panel-in').addClass('panel-out');\n // Emit close\n panel.onClose();\n panel.onClosed();\n }\n return panel;\n }\n init() {\n const panel = this;\n // const app = panel.app;\n if (typeof panel.params.visibleBreakpoint !== 'undefined') {\n panel.setVisibleBreakpoint();\n }\n if (typeof panel.params.collapsedBreakpoint !== 'undefined') {\n panel.setCollapsedBreakpoint();\n }\n if (panel.params.swipe) {\n panel.enableSwipe();\n }\n if (panel.resizable) {\n panel.enableResizable();\n }\n }\n destroy() {\n let panel = this;\n const app = panel.app;\n const {\n $containerEl\n } = panel;\n if (!panel.$el) {\n // Panel already destroyed\n return;\n }\n panel.emit('local::beforeDestroy panelBeforeDestroy', panel);\n panel.$el.trigger('panel:beforedestroy');\n if (panel.visibleBreakpointResizeHandler) {\n app.off('resize', panel.visibleBreakpointResizeHandler);\n }\n if (panel.collapsedBreakpointResizeHandler) {\n app.off('resize', panel.collapsedBreakpointResizeHandler);\n }\n if (panel.$el.hasClass('panel-in-breakpoint') || panel.$el.hasClass('panel-in-collapsed')) {\n const $viewEl = $(panel.getViewEl());\n if ($containerEl && $containerEl.hasClass('page')) {\n $viewEl.add($containerEl.children('.page-content, .tabs'));\n }\n panel.$el.removeClass('panel-in-breakpoint panel-in-collapsed panel-in');\n $viewEl.css({\n [`margin-${panel.side}`]: ''\n });\n panel.emit('local::breakpoint panelBreakpoint', panel);\n panel.$el.trigger('panel:breakpoint');\n }\n panel.$el.trigger('panel:destroy');\n panel.emit('local::destroy panelDestroy', panel);\n if (panel.el) {\n panel.el.f7Panel = null;\n delete panel.el.f7Panel;\n }\n deleteProps(panel);\n panel = null;\n }\n}\nexport default Panel;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Panel from './panel-class.js';\nexport default {\n name: 'panel',\n params: {\n panel: {\n opened: undefined,\n // default based on panel-in class\n side: undefined,\n // default based on panel class\n effect: undefined,\n // default based on panel class\n resizable: undefined,\n // default based on panel-resizable class\n backdrop: true,\n backdropEl: undefined,\n visibleBreakpoint: undefined,\n collapsedBreakpoint: undefined,\n swipe: false,\n // or true\n swipeNoFollow: false,\n // or true\n swipeOnlyClose: false,\n swipeActiveArea: 0,\n swipeThreshold: 0,\n closeByBackdropClick: true,\n containerEl: undefined\n }\n },\n static: {\n Panel\n },\n create() {\n const app = this;\n extend(app, {\n panel: {\n allowOpen: true,\n create(params) {\n return new Panel(app, params);\n },\n get(el) {\n if (el === void 0) {\n el = '.panel';\n }\n if (el instanceof Panel) return el;\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n const $el = $(el);\n if ($el.length === 0 || $el.length > 1) return undefined;\n return $el[0].f7Panel;\n },\n destroy(el) {\n if (el === void 0) {\n el = '.panel';\n }\n const panel = app.panel.get(el);\n if (panel && panel.destroy) return panel.destroy();\n return undefined;\n },\n open(el, animate) {\n if (el === void 0) {\n el = '.panel';\n }\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n let panel = app.panel.get(el);\n if (panel && panel.open) return panel.open(animate);\n if (!panel) {\n panel = app.panel.create({\n el\n });\n return panel.open(animate);\n }\n return undefined;\n },\n close(el, animate) {\n if (el === void 0) {\n el = '.panel-in';\n }\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n let panel = app.panel.get(el);\n if (panel && panel.open) return panel.close(animate);\n if (!panel) {\n panel = app.panel.create({\n el\n });\n return panel.close(animate);\n }\n return undefined;\n },\n toggle(el, animate) {\n if (el === void 0) {\n el = '.panel';\n }\n if (el === 'left' || el === 'right') el = `.panel-${el}`; // eslint-disable-line\n let panel = app.panel.get(el);\n if (panel && panel.toggle) return panel.toggle(animate);\n if (!panel) {\n panel = app.panel.create({\n el\n });\n return panel.toggle(animate);\n }\n return undefined;\n }\n }\n });\n },\n on: {\n init() {\n const app = this;\n $('.panel-init').each(panelEl => {\n const params = Object.assign({\n el: panelEl\n }, $(panelEl).dataset() || {});\n app.panel.create(params);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.panel-init').each(panelEl => {\n const params = Object.assign({\n el: panelEl\n }, $(panelEl).dataset() || {});\n app.panel.create(params);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.panel-init').each(panelEl => {\n const panel = app.panel.get(panelEl);\n if (panel && panel.destroy) panel.destroy();\n });\n }\n },\n vnode: {\n 'panel-init': {\n insert(vnode) {\n const app = this;\n const panelEl = vnode.elm;\n const params = Object.assign({\n el: panelEl\n }, $(panelEl).dataset() || {});\n app.panel.create(params);\n },\n destroy(vnode) {\n const app = this;\n const panelEl = vnode.elm;\n const panel = app.panel.get(panelEl);\n if (panel && panel.destroy) panel.destroy();\n }\n }\n },\n clicks: {\n '.panel-open': function open(clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.panel.open(data.panel, data.animate);\n },\n '.panel-close': function close(clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.panel.close(data.panel, data.animate);\n },\n '.panel-toggle': function close(clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.panel.toggle(data.panel, data.animate);\n },\n '.panel-backdrop': function close() {\n const app = this;\n const $panelEl = $('.panel-in:not(.panel-out)');\n if (!$panelEl.length) return;\n const instance = $panelEl[0] && $panelEl[0].f7Panel;\n $panelEl.trigger('panel:backdrop-click');\n if (instance) {\n instance.emit('backdropClick', instance);\n }\n app.emit('panelBackdropClick', instance || $panelEl[0]);\n if (instance && instance.params.closeByBackdropClick === false) return;\n if (app.params.panel.closeByBackdropClick) app.panel.close();\n }\n }\n};", "/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport $ from '../../shared/dom7.js';\nconst CardExpandable = {\n open(cardEl, animate) {\n if (cardEl === void 0) {\n cardEl = '.card-expandable';\n }\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const device = getDevice();\n const document = getDocument();\n const support = getSupport();\n const $cardEl = $(cardEl).eq(0);\n if (!$cardEl || !$cardEl.length) return;\n if ($cardEl.hasClass('card-opened') || $cardEl.hasClass('card-opening') || $cardEl.hasClass('card-closing')) return;\n const $pageEl = $cardEl.parents('.page').eq(0);\n if (!$pageEl.length) return;\n if ($pageEl.find('.card-opened').length) {\n return;\n }\n let prevented;\n function prevent() {\n prevented = true;\n }\n $cardEl.trigger('card:beforeopen', {\n prevent\n });\n app.emit('cardBeforeOpen', $cardEl[0], prevent);\n if (prevented) return;\n const cardParams = Object.assign({\n animate\n }, app.params.card, $cardEl.dataset());\n const $pageContentEl = $cardEl.parents('.page-content');\n let $backdropEl;\n if ($cardEl.attr('data-backdrop-el')) {\n $backdropEl = $($cardEl.attr('data-backdrop-el'));\n }\n if (!$backdropEl && cardParams.backdrop) {\n $backdropEl = $pageContentEl.find('.card-backdrop');\n if (!$backdropEl.length) {\n $backdropEl = $('');\n $pageContentEl.append($backdropEl);\n }\n }\n let $navbarEl;\n let $toolbarEl;\n if (cardParams.hideNavbarOnOpen) {\n $navbarEl = $pageEl.children('.navbar');\n if (!$navbarEl.length) {\n if ($pageEl[0].f7Page) $navbarEl = $pageEl[0].f7Page.$navbarEl;\n }\n }\n if (cardParams.hideToolbarOnOpen) {\n $toolbarEl = $pageEl.children('.toolbar');\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n }\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.views').children('.toolbar');\n }\n }\n const currTransform = $cardEl.css('transform');\n let hasTransform;\n if (currTransform && currTransform.match(/[2-9]/)) {\n hasTransform = true;\n }\n const $cardContentEl = $cardEl.children('.card-content');\n const $cardSizeEl = $(document.createElement('div')).addClass('card-expandable-size');\n $cardEl.append($cardSizeEl);\n let cardWidth = $cardEl[0].offsetWidth;\n let cardHeight = $cardEl[0].offsetHeight;\n let pageWidth = $pageEl[0].offsetWidth;\n let pageHeight = $pageEl[0].offsetHeight;\n let maxWidth = $cardSizeEl[0].offsetWidth || pageWidth;\n let maxHeight = $cardSizeEl[0].offsetHeight || pageHeight;\n let statusbarHeight;\n if ($navbarEl && !cardParams.hideStatusbarOnOpen && maxHeight === pageHeight) {\n statusbarHeight = parseInt($navbarEl.css('--f7-safe-area-top'), 10);\n if (Number.isNaN(statusbarHeight)) statusbarHeight = 0;\n }\n if (statusbarHeight) {\n maxHeight -= statusbarHeight;\n }\n let scaleX = maxWidth / cardWidth;\n let scaleY = maxHeight / cardHeight;\n let offset = $cardEl.offset();\n let pageOffset = $pageEl.offset();\n if (statusbarHeight) {\n pageOffset.top += statusbarHeight / 2;\n }\n offset.left -= pageOffset.left;\n let cardLeftOffset;\n let cardTopOffset;\n if (hasTransform) {\n const transformValues = currTransform.replace(/matrix\\(|\\)/g, '').split(',').map(el => el.trim());\n if (transformValues && transformValues.length > 1) {\n const scale = parseFloat(transformValues[0]);\n cardLeftOffset = offset.left - cardWidth * (1 - scale) / 2;\n cardTopOffset = offset.top - pageOffset.top - cardHeight * (1 - scale) / 2;\n if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;\n } else {\n cardLeftOffset = $cardEl[0].offsetLeft;\n cardTopOffset = $cardEl[0].offsetTop - ($pageContentEl.length ? $pageContentEl[0].scrollTop : 0);\n }\n } else {\n cardLeftOffset = offset.left;\n cardTopOffset = offset.top - pageOffset.top;\n if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;\n }\n cardLeftOffset -= (pageWidth - maxWidth) / 2;\n cardTopOffset -= (pageHeight - maxHeight) / 2;\n let cardRightOffset = maxWidth - cardWidth - cardLeftOffset;\n if (app.rtl) {\n [cardLeftOffset, cardRightOffset] = [cardRightOffset, cardLeftOffset];\n }\n let cardBottomOffset = maxHeight - cardHeight - cardTopOffset;\n let translateX = (cardRightOffset - cardLeftOffset) / 2;\n let translateY = (cardBottomOffset - cardTopOffset) / 2;\n if (cardParams.hideNavbarOnOpen && $navbarEl && $navbarEl.length) {\n if ($navbarEl.closest('.navbar-hidden').length) {\n // Was hidden\n $cardEl[0].f7KeepNavbarOnClose = true;\n } else {\n delete $cardEl[0].f7KeepNavbarOnClose;\n app.navbar.hide($navbarEl, cardParams.animate, cardParams.hideStatusbarOnOpen, true);\n }\n }\n if (cardParams.hideToolbarOnOpen && $toolbarEl && $toolbarEl.length) {\n if ($toolbarEl.closest('.toolbar-hidden').length) {\n // Was hidden\n $cardEl[0].f7KeepToolbarOnClose = true;\n } else {\n delete $cardEl[0].f7KeepToolbarOnClose;\n app.toolbar.hide($toolbarEl, cardParams.animate);\n }\n }\n if ($backdropEl) {\n $backdropEl.removeClass('card-backdrop-out').addClass('card-backdrop-in');\n }\n $cardEl.removeClass('card-transitioning');\n if (cardParams.animate) {\n $cardEl.addClass('card-opening');\n }\n $cardEl.trigger('card:open');\n app.emit('cardOpen', $cardEl[0]);\n function transitionEnd() {\n $pageEl.addClass('page-with-card-opened');\n if (device.ios && $pageContentEl.length) {\n $pageContentEl.css('height', `${$pageContentEl[0].offsetHeight + 1}px`);\n setTimeout(() => {\n $pageContentEl.css('height', '');\n });\n }\n $cardEl.addClass('card-opened');\n $cardEl.removeClass('card-opening');\n $cardEl.trigger('card:opened');\n app.emit('cardOpened', $cardEl[0], $pageEl[0]);\n }\n $cardContentEl.css({\n width: `${maxWidth}px`,\n height: `${maxHeight}px`\n }).transform(`translate3d(${app.rtl ? cardLeftOffset + translateX : -cardLeftOffset - translateX}px, 0px, 0) scale(${1 / scaleX}, ${1 / scaleY})`);\n $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);\n if (cardParams.animate) {\n $cardEl.transitionEnd(() => {\n transitionEnd();\n });\n } else {\n transitionEnd();\n }\n function onResize() {\n $cardEl.removeClass('card-transitioning');\n cardWidth = $cardEl[0].offsetWidth;\n cardHeight = $cardEl[0].offsetHeight;\n pageWidth = $pageEl[0].offsetWidth;\n pageHeight = $pageEl[0].offsetHeight;\n maxWidth = $cardSizeEl[0].offsetWidth || pageWidth;\n maxHeight = $cardSizeEl[0].offsetHeight || pageHeight;\n statusbarHeight = 0;\n if ($navbarEl && !cardParams.hideStatusbarOnOpen && maxHeight === pageHeight) {\n statusbarHeight = parseInt($navbarEl.css('--f7-safe-area-top'), 10);\n if (Number.isNaN(statusbarHeight)) statusbarHeight = 0;\n }\n if (statusbarHeight) {\n maxHeight -= statusbarHeight;\n }\n scaleX = maxWidth / cardWidth;\n scaleY = maxHeight / cardHeight;\n $cardEl.transform('translate3d(0px, 0px, 0) scale(1)');\n offset = $cardEl.offset();\n pageOffset = $pageEl.offset();\n if (statusbarHeight) {\n pageOffset.top += statusbarHeight / 2;\n }\n offset.left -= pageOffset.left;\n offset.top -= pageOffset.top;\n cardLeftOffset = offset.left - (pageWidth - maxWidth) / 2;\n if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;\n cardTopOffset = offset.top - (pageHeight - maxHeight) / 2;\n cardRightOffset = maxWidth - cardWidth - cardLeftOffset;\n cardBottomOffset = maxHeight - cardHeight - cardTopOffset;\n if (app.rtl) {\n [cardLeftOffset, cardRightOffset] = [cardRightOffset, cardLeftOffset];\n }\n translateX = (cardRightOffset - cardLeftOffset) / 2;\n translateY = (cardBottomOffset - cardTopOffset) / 2;\n $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);\n $cardContentEl.css({\n width: `${maxWidth}px`,\n height: `${maxHeight}px`\n }).transform(`translate3d(${app.rtl ? cardLeftOffset + translateX : -cardLeftOffset - translateX}px, 0px, 0) scale(${1 / scaleX}, ${1 / scaleY})`);\n }\n let cardScrollTop;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchEndX;\n let touchEndY;\n let isScrolling;\n let progress;\n let isV;\n let isH;\n let $cardScrollableEl;\n function onTouchStart(e) {\n if (!$(e.target).closest($cardEl).length || !e.isTrusted) return;\n if (!$cardEl.hasClass('card-opened')) return;\n $cardScrollableEl = $cardEl.find(cardParams.scrollableEl);\n if ($cardScrollableEl[0] && $cardScrollableEl[0] !== $cardContentEl[0] && !$cardScrollableEl[0].contains(e.target)) {\n cardScrollTop = 0;\n } else {\n cardScrollTop = $cardScrollableEl.scrollTop();\n }\n isTouched = true;\n touchStartX = e.targetTouches[0].pageX;\n touchStartY = e.targetTouches[0].pageY;\n isScrolling = undefined;\n isV = false;\n isH = false;\n }\n function onTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n touchEndX = e.targetTouches[0].pageX;\n touchEndY = e.targetTouches[0].pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(touchEndY - touchStartY) > Math.abs(touchEndX - touchStartX));\n }\n if (!isH && !isV) {\n if (!isScrolling && e.targetTouches[0].clientX <= 50) {\n isH = true;\n } else {\n isV = true;\n }\n }\n if (!(isH || isV) || isV && cardScrollTop !== 0) {\n isTouched = true;\n isMoved = true;\n return;\n }\n if (!isMoved) {\n $cardEl.removeClass('card-transitioning');\n }\n isMoved = true;\n progress = isV ? Math.max((touchEndY - touchStartY) / 150, 0) : Math.max((touchEndX - touchStartX) / (cardWidth / 2), 0);\n if (progress > 0 && isV || isH) {\n if (isV && device.ios && $cardScrollableEl[0] === $cardContentEl[0]) {\n $cardScrollableEl.css('-webkit-overflow-scrolling', 'auto');\n $cardScrollableEl.scrollTop(0);\n }\n e.preventDefault();\n }\n if (progress > 1) progress **= 0.3;\n if (progress > (isV ? 1.3 : 1.1)) {\n isTouched = false;\n isMoved = false;\n app.card.close($cardEl);\n } else {\n $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX * (1 - progress * 0.2)}, ${scaleY * (1 - progress * 0.2)})`);\n }\n }\n function onTouchEnd(e) {\n if (!isTouched || !isMoved || !e.isTrusted) return;\n isTouched = false;\n isMoved = false;\n if (device.ios) {\n $cardScrollableEl.css('-webkit-overflow-scrolling', '');\n }\n if (progress >= 0.8) {\n app.card.close($cardEl);\n } else {\n $cardEl.addClass('card-transitioning').transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);\n }\n }\n $cardEl[0].detachEventHandlers = function detachEventHandlers() {\n app.off('resize', onResize);\n if (support.touch && cardParams.swipeToClose) {\n app.off('touchstart:passive', onTouchStart);\n app.off('touchmove:active', onTouchMove);\n app.off('touchend:passive', onTouchEnd);\n }\n };\n app.on('resize', onResize);\n if (support.touch && cardParams.swipeToClose) {\n app.on('touchstart:passive', onTouchStart);\n app.on('touchmove:active', onTouchMove);\n app.on('touchend:passive', onTouchEnd);\n }\n },\n close(cardEl, animate) {\n if (cardEl === void 0) {\n cardEl = '.card-expandable.card-opened';\n }\n if (animate === void 0) {\n animate = true;\n }\n const app = this;\n const device = getDevice();\n const $cardEl = $(cardEl).eq(0);\n if (!$cardEl || !$cardEl.length) return;\n if (!$cardEl.hasClass('card-opened') || $cardEl.hasClass('card-opening') || $cardEl.hasClass('card-closing')) return;\n const $cardContentEl = $cardEl.children('.card-content');\n const $pageContentEl = $cardEl.parents('.page-content');\n const $pageEl = $cardEl.parents('.page').eq(0);\n if (!$pageEl.length) return;\n const cardParams = Object.assign({\n animate\n }, app.params.card, $cardEl.dataset());\n const $cardScrollableEl = $cardEl.find(cardParams.scrollableEl);\n let $navbarEl;\n let $toolbarEl;\n let $backdropEl;\n if ($cardEl.attr('data-backdrop-el')) {\n $backdropEl = $($cardEl.attr('data-backdrop-el'));\n }\n if (cardParams.backdrop) {\n $backdropEl = $cardEl.parents('.page-content').find('.card-backdrop');\n }\n if (cardParams.hideNavbarOnOpen) {\n $navbarEl = $pageEl.children('.navbar');\n if (!$navbarEl.length) {\n if ($pageEl[0].f7Page) $navbarEl = $pageEl[0].f7Page.$navbarEl;\n }\n if ($navbarEl && $navbarEl.length && !$cardEl[0].f7KeepNavbarOnClose) {\n app.navbar.show($navbarEl, cardParams.animate, true);\n }\n }\n if (cardParams.hideToolbarOnOpen) {\n $toolbarEl = $pageEl.children('.toolbar');\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.view').children('.toolbar');\n }\n if (!$toolbarEl.length) {\n $toolbarEl = $pageEl.parents('.views').children('.toolbar');\n }\n if ($toolbarEl && $toolbarEl.length && !$cardEl[0].f7KeepToolbarOnClose) {\n app.toolbar.show($toolbarEl, cardParams.animate);\n }\n }\n $pageEl.removeClass('page-with-card-opened');\n if (device.ios && $pageContentEl.length) {\n $pageContentEl.css('height', `${$pageContentEl[0].offsetHeight + 1}px`);\n setTimeout(() => {\n $pageContentEl.css('height', '');\n });\n }\n if ($backdropEl && $backdropEl.length) {\n $backdropEl.removeClass('card-backdrop-in').addClass('card-backdrop-out');\n }\n $cardEl.removeClass('card-opened card-transitioning');\n if (cardParams.animate) {\n $cardEl.addClass('card-closing');\n } else {\n $cardEl.addClass('card-no-transition');\n }\n $cardEl.transform('');\n $cardEl.trigger('card:close');\n app.emit('cardClose', $cardEl[0], $pageEl[0]);\n const animateWidth = $cardEl.hasClass('card-expandable-animate-width');\n function transitionEnd() {\n if (!animateWidth) {\n $cardContentEl.css({\n width: '',\n height: ''\n });\n }\n if ($backdropEl && $backdropEl.length) {\n $backdropEl.removeClass('card-backdrop-in card-backdrop-out');\n }\n $cardEl.removeClass('card-closing card-no-transition');\n $cardEl.trigger('card:closed');\n $cardEl.find('.card-expandable-size').remove();\n app.emit('cardClosed', $cardEl[0], $pageEl[0]);\n }\n if (animateWidth) {\n $cardContentEl.css({\n width: '',\n height: ''\n });\n }\n $cardContentEl.transform('').scrollTop(0, animate ? 300 : 0);\n if ($cardScrollableEl.length && $cardScrollableEl[0] !== $cardContentEl[0]) {\n $cardScrollableEl.scrollTop(0, animate ? 300 : 0);\n }\n if (animate) {\n $cardContentEl.transitionEnd(() => {\n transitionEnd();\n });\n } else {\n transitionEnd();\n }\n if ($cardEl[0].detachEventHandlers) {\n $cardEl[0].detachEventHandlers();\n delete $cardEl[0].detachEventHandlers;\n }\n },\n toggle(cardEl, animate) {\n if (cardEl === void 0) {\n cardEl = '.card-expandable';\n }\n const app = this;\n const $cardEl = $(cardEl).eq(0);\n if (!$cardEl.length) return;\n if ($cardEl.hasClass('card-opened')) {\n app.card.close($cardEl, animate);\n } else {\n app.card.open($cardEl, animate);\n }\n }\n};\nexport default {\n name: 'card',\n params: {\n card: {\n hideNavbarOnOpen: true,\n hideStatusbarOnOpen: true,\n hideToolbarOnOpen: true,\n scrollableEl: '.card-content',\n swipeToClose: true,\n closeByBackdropClick: true,\n backdrop: true\n }\n },\n create() {\n const app = this;\n bindMethods(app, {\n card: CardExpandable\n });\n },\n on: {\n pageBeforeIn(page) {\n const app = this;\n if (app.params.card.hideNavbarOnOpen && page.navbarEl && page.$el.find('.card-opened.card-expandable').length) {\n app.navbar.hide(page.navbarEl, true, app.params.card.hideStatusbarOnOpen, true);\n }\n if (app.params.card.hideToolbarOnOpen && page.$el.find('.card-opened.card-expandable').length) {\n let $toolbarEl = page.$el.children('.toolbar');\n if (!$toolbarEl.length) {\n $toolbarEl = page.$el.parents('.view').children('.toolbar');\n }\n if (!$toolbarEl.length) {\n $toolbarEl = page.$el.parents('.views').children('.toolbar');\n }\n if ($toolbarEl && $toolbarEl.length) {\n app.toolbar.hide($toolbarEl);\n }\n }\n }\n },\n clicks: {\n '.card-close': function closeCard($clickedEl, data) {\n const app = this;\n app.card.close(data.card, data.animate);\n },\n '.card-open': function closeCard($clickedEl, data) {\n const app = this;\n app.card.open(data.card, data.animate);\n },\n '.card-expandable': function toggleExpandableCard($clickedEl, data, e) {\n const app = this;\n if ($clickedEl.hasClass('card-opened') || $clickedEl.hasClass('card-opening') || $clickedEl.hasClass('card-closing')) return;\n if ($(e.target).closest('.card-prevent-open, .card-close').length) return;\n app.card.open($clickedEl);\n },\n '.card-backdrop-in': function onBackdropClick() {\n const app = this;\n let needToClose = false;\n if (app.params.card.closeByBackdropClick) needToClose = true;\n const $openedCardEl = $('.card-opened');\n if (!$openedCardEl.length) return;\n if ($openedCardEl.attr('data-close-by-backdrop-click') === 'true') {\n needToClose = true;\n } else if ($openedCardEl.attr('data-close-by-backdrop-click') === 'false') {\n needToClose = false;\n }\n if (needToClose) app.card.close($openedCardEl);\n }\n }\n};", "export default {\n name: 'chip'\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, serializeObject } from '../../shared/utils.js';\n\n// Form Data\nconst FormData = {\n store(form, data) {\n const app = this;\n const window = getWindow();\n let formId = form;\n const $formEl = $(form);\n if ($formEl.length && $formEl.is('form') && $formEl.attr('id')) {\n formId = $formEl.attr('id');\n }\n // Store form data in app.formsData\n app.form.data[`form-${formId}`] = data;\n\n // Store form data in local storage also\n window.localStorage[`f7form-${formId}`] = JSON.stringify(data);\n },\n get(form) {\n const app = this;\n const window = getWindow();\n let formId = form;\n const $formEl = $(form);\n if ($formEl.length && $formEl.is('form') && $formEl.attr('id')) {\n formId = $formEl.attr('id');\n }\n if (window.localStorage[`f7form-${formId}`]) {\n return JSON.parse(window.localStorage[`f7form-${formId}`]);\n }\n if (app.form.data[`form-${formId}`]) {\n return app.form.data[`form-${formId}`];\n }\n return undefined;\n },\n remove(form) {\n const app = this;\n const window = getWindow();\n let formId = form;\n const $formEl = $(form);\n if ($formEl.length && $formEl.is('form') && $formEl.attr('id')) {\n formId = $formEl.attr('id');\n }\n\n // Delete form data from app.formsData\n if (app.form.data[`form-${formId}`]) {\n app.form.data[`form-${formId}`] = '';\n delete app.form.data[`form-${formId}`];\n }\n\n // Delete form data from local storage also\n if (window.localStorage[`f7form-${formId}`]) {\n window.localStorage[`f7form-${formId}`] = '';\n window.localStorage.removeItem(`f7form-${formId}`);\n }\n }\n};\n\n// Form Storage\nconst FormStorage = {\n init(formEl) {\n const app = this;\n const $formEl = $(formEl);\n const formId = $formEl.attr('id');\n if (!formId) return;\n const initialData = app.form.getFormData(formId);\n if (initialData) {\n app.form.fillFromData($formEl, initialData);\n }\n function store() {\n const data = app.form.convertToData($formEl);\n if (!data) return;\n app.form.storeFormData(formId, data);\n $formEl.trigger('form:storedata', data);\n app.emit('formStoreData', $formEl[0], data);\n }\n $formEl.on('change submit', store);\n },\n destroy(formEl) {\n const $formEl = $(formEl);\n $formEl.off('change submit');\n }\n};\n\n// Form To/From Data\nfunction formToData(formEl) {\n const app = this;\n const $formEl = $(formEl).eq(0);\n if ($formEl.length === 0) return undefined;\n\n // Form data\n const data = {};\n\n // Skip input types\n const skipTypes = ['submit', 'image', 'button', 'file'];\n const skipNames = [];\n $formEl.find('input, select, textarea').each(inputEl => {\n const $inputEl = $(inputEl);\n if ($inputEl.hasClass('ignore-store-data') || $inputEl.hasClass('no-store-data')) {\n return;\n }\n const name = $inputEl.attr('name');\n const type = $inputEl.attr('type');\n const tag = inputEl.nodeName.toLowerCase();\n if (skipTypes.indexOf(type) >= 0) return;\n if (skipNames.indexOf(name) >= 0 || !name) return;\n if (tag === 'select' && $inputEl.prop('multiple')) {\n skipNames.push(name);\n data[name] = [];\n $formEl.find(`select[name=\"${name}\"] option`).each(el => {\n if (el.selected) data[name].push(el.value);\n });\n } else {\n switch (type) {\n case 'checkbox':\n skipNames.push(name);\n data[name] = [];\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n if (el.checked) data[name].push(el.value);\n });\n break;\n case 'radio':\n skipNames.push(name);\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n if (el.checked) data[name] = el.value;\n });\n break;\n default:\n data[name] = $inputEl.val();\n break;\n }\n }\n });\n $formEl.trigger('form:todata', data);\n app.emit('formToData', $formEl[0], data);\n return data;\n}\nfunction formFromData(formEl, formData) {\n const app = this;\n const $formEl = $(formEl).eq(0);\n if (!$formEl.length) return;\n let data = formData;\n const formId = $formEl.attr('id');\n if (!data && formId) {\n data = app.form.getFormData(formId);\n }\n if (!data) return;\n\n // Skip input types\n const skipTypes = ['submit', 'image', 'button', 'file'];\n const skipNames = [];\n $formEl.find('input, select, textarea').each(inputEl => {\n const $inputEl = $(inputEl);\n if ($inputEl.hasClass('ignore-store-data') || $inputEl.hasClass('no-store-data')) {\n return;\n }\n const name = $inputEl.attr('name');\n const type = $inputEl.attr('type');\n const tag = inputEl.nodeName.toLowerCase();\n if (typeof data[name] === 'undefined' || data[name] === null) return;\n if (skipTypes.indexOf(type) >= 0) return;\n if (skipNames.indexOf(name) >= 0 || !name) return;\n if (tag === 'select' && $inputEl.prop('multiple')) {\n skipNames.push(name);\n $formEl.find(`select[name=\"${name}\"] option`).each(el => {\n const selectEl = el;\n if (data[name].indexOf(el.value) >= 0) selectEl.selected = true;else selectEl.selected = false;\n });\n } else {\n switch (type) {\n case 'checkbox':\n skipNames.push(name);\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n const checkboxEl = el;\n if (data[name].indexOf(el.value) >= 0) checkboxEl.checked = true;else checkboxEl.checked = false;\n });\n break;\n case 'radio':\n skipNames.push(name);\n $formEl.find(`input[name=\"${name}\"]`).each(el => {\n const radioEl = el;\n if (data[name] === el.value) radioEl.checked = true;else radioEl.checked = false;\n });\n break;\n default:\n $inputEl.val(data[name]);\n break;\n }\n }\n if (tag === 'select' || tag === 'input' || tag === 'textarea') {\n $inputEl.trigger('change', 'fromdata');\n }\n });\n $formEl.trigger('form:fromdata', data);\n app.emit('formFromData', $formEl[0], data);\n}\nfunction initAjaxForm() {\n const app = this;\n const window = getWindow();\n const document = getDocument();\n function onSubmitChange(e, fromData) {\n const $formEl = $(this);\n if (e.type === 'change' && !$formEl.hasClass('form-ajax-submit-onchange')) return;\n if (e.type === 'submit') e.preventDefault();\n if (e.type === 'change' && fromData === 'fromdata') return;\n const method = ($formEl.attr('method') || 'GET').toUpperCase();\n const contentType = $formEl.attr('enctype') || $formEl.prop('enctype');\n let url = $formEl.attr('action');\n if (!url) return;\n let data;\n if (method === 'POST') {\n if (contentType === 'application/x-www-form-urlencoded' || contentType === 'application/json') {\n data = app.form.convertToData($formEl[0]);\n if (contentType === 'application/json') {\n data = JSON.stringify(data);\n }\n } else {\n data = new window.FormData($formEl[0]);\n }\n } else {\n data = serializeObject(app.form.convertToData($formEl[0]));\n if (url.includes('?')) {\n url += `&${data}`;\n } else {\n url += `?${data}`;\n }\n }\n $formEl.trigger('formajax:beforesend', {\n data\n });\n app.emit('formAjaxBeforeSend', $formEl[0], data);\n fetch(url, {\n method,\n headers: {\n 'Content-Type': contentType || 'application/x-www-form-urlencoded'\n },\n ...(method === 'POST' || method === 'PUT' ? {\n body: data\n } : {})\n }).then(response => {\n $formEl.trigger('formajax:complete', {\n data,\n response\n });\n app.emit('formAjaxComplete', $formEl[0], data, response);\n $formEl.trigger('formajax:success', {\n data,\n response\n });\n app.emit('formAjaxSuccess', $formEl[0], data, response);\n }).catch(error => {\n $formEl.trigger('formajax:error', {\n data,\n error\n });\n app.emit('formAjaxError', $formEl[0], data, error);\n });\n }\n $(document).on('submit change', 'form.form-ajax-submit, form.form-ajax-submit-onchange', onSubmitChange);\n}\nexport default {\n name: 'form',\n create() {\n const app = this;\n extend(app, {\n form: {\n data: {},\n storeFormData: FormData.store.bind(app),\n getFormData: FormData.get.bind(app),\n removeFormData: FormData.remove.bind(app),\n convertToData: formToData.bind(app),\n fillFromData: formFromData.bind(app),\n storage: {\n init: FormStorage.init.bind(app),\n destroy: FormStorage.destroy.bind(app)\n }\n }\n });\n },\n on: {\n init() {\n const app = this;\n initAjaxForm.call(app);\n },\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.form-store-data').each(formEl => {\n app.form.storage.destroy(formEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.form-store-data').each(formEl => {\n app.form.storage.init(formEl);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.form-store-data').each(formEl => {\n app.form.storage.destroy(formEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.form-store-data').each(formEl => {\n app.form.storage.init(formEl);\n });\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nconst Input = {\n ignoreTypes: ['checkbox', 'button', 'submit', 'range', 'radio', 'image'],\n createTextareaResizableShadow() {\n const document = getDocument();\n const $shadowEl = $(document.createElement('textarea'));\n $shadowEl.addClass('textarea-resizable-shadow');\n $shadowEl.prop({\n disabled: true,\n readonly: true\n });\n Input.textareaResizableShadow = $shadowEl;\n },\n textareaResizableShadow: undefined,\n resizeTextarea(textareaEl) {\n const app = this;\n const window = getWindow();\n const $textareaEl = $(textareaEl);\n if (!Input.textareaResizableShadow) {\n Input.createTextareaResizableShadow();\n }\n const $shadowEl = Input.textareaResizableShadow;\n if (!$textareaEl.length) return;\n if (!$textareaEl.hasClass('resizable')) return;\n if (Input.textareaResizableShadow.parents().length === 0) {\n app.$el.append($shadowEl);\n }\n const styles = window.getComputedStyle($textareaEl[0]);\n 'padding-top padding-bottom padding-left padding-right margin-left margin-right margin-top margin-bottom width font-size font-family font-style font-weight line-height font-variant text-transform letter-spacing border box-sizing display'.split(' ').forEach(style => {\n let styleValue = styles[style];\n if ('font-size line-height letter-spacing width'.split(' ').indexOf(style) >= 0) {\n styleValue = styleValue.replace(',', '.');\n }\n $shadowEl.css(style, styleValue);\n });\n const currentHeight = $textareaEl[0].clientHeight;\n $shadowEl.val('');\n const initialHeight = $shadowEl[0].scrollHeight;\n $shadowEl.val($textareaEl.val());\n $shadowEl.css('height', 0);\n const scrollHeight = $shadowEl[0].scrollHeight;\n if (currentHeight !== scrollHeight) {\n if (scrollHeight > initialHeight) {\n $textareaEl.css('height', `${scrollHeight}px`);\n } else if (scrollHeight < currentHeight) {\n $textareaEl.css('height', '');\n }\n if (scrollHeight > initialHeight || scrollHeight < currentHeight) {\n $textareaEl.trigger('textarea:resize', {\n initialHeight,\n currentHeight,\n scrollHeight\n });\n app.emit('textareaResize', {\n initialHeight,\n currentHeight,\n scrollHeight\n });\n }\n }\n },\n validate(inputEl) {\n const $inputEl = $(inputEl);\n if (!$inputEl.length) return true;\n const $itemInputEl = $inputEl.parents('.item-input');\n const $inputWrapEl = $inputEl.parents('.input');\n function unsetReadonly() {\n if ($inputEl[0].f7ValidateReadonly) {\n $inputEl[0].readOnly = false;\n }\n }\n function setReadonly() {\n if ($inputEl[0].f7ValidateReadonly) {\n $inputEl[0].readOnly = true;\n }\n }\n unsetReadonly();\n const validity = $inputEl[0].validity;\n const validationMessage = $inputEl.dataset().errorMessage || $inputEl[0].validationMessage || '';\n if (!validity) {\n setReadonly();\n return true;\n }\n if (!validity.valid) {\n let $errorEl = $inputEl.nextAll('.item-input-error-message, .input-error-message');\n if (validationMessage) {\n if ($errorEl.length === 0) {\n $errorEl = $(``);\n $errorEl.insertAfter($inputEl);\n }\n $errorEl.text(validationMessage);\n }\n if ($errorEl.length > 0) {\n $itemInputEl.addClass('item-input-with-error-message');\n $inputWrapEl.addClass('input-with-error-message');\n }\n $itemInputEl.addClass('item-input-invalid');\n $inputWrapEl.addClass('input-invalid');\n $inputEl.addClass('input-invalid');\n setReadonly();\n return false;\n }\n $itemInputEl.removeClass('item-input-invalid item-input-with-error-message');\n $inputWrapEl.removeClass('input-invalid input-with-error-message');\n $inputEl.removeClass('input-invalid');\n setReadonly();\n return true;\n },\n validateInputs(el) {\n const app = this;\n const validates = $(el).find('input, textarea, select').map(inputEl => app.input.validate(inputEl));\n return validates.indexOf(false) < 0;\n },\n focus(inputEl) {\n const $inputEl = $(inputEl);\n const type = $inputEl.attr('type');\n if (Input.ignoreTypes.indexOf(type) >= 0) return;\n $inputEl.parents('.item-input').addClass('item-input-focused');\n $inputEl.parents('.input').addClass('input-focused');\n $inputEl.addClass('input-focused');\n },\n blur(inputEl) {\n const $inputEl = $(inputEl);\n $inputEl.parents('.item-input').removeClass('item-input-focused');\n $inputEl.parents('.input').removeClass('input-focused');\n $inputEl.removeClass('input-focused');\n },\n checkEmptyState(inputEl) {\n const app = this;\n let $inputEl = $(inputEl);\n if (!$inputEl.is('input, select, textarea, .item-input [contenteditable]')) {\n $inputEl = $inputEl.find('input, select, textarea, .item-input [contenteditable]').eq(0);\n }\n if (!$inputEl.length) return;\n const isContentEditable = $inputEl[0].hasAttribute('contenteditable');\n let value;\n if (isContentEditable) {\n if ($inputEl.find('.text-editor-placeholder').length) value = '';else value = $inputEl.html();\n } else {\n value = $inputEl.val();\n }\n const $itemInputEl = $inputEl.parents('.item-input');\n const $inputWrapEl = $inputEl.parents('.input');\n if (value && typeof value === 'string' && value.trim() !== '' || Array.isArray(value) && value.length > 0) {\n $itemInputEl.addClass('item-input-with-value');\n $inputWrapEl.addClass('input-with-value');\n $inputEl.addClass('input-with-value');\n $inputEl.trigger('input:notempty');\n app.emit('inputNotEmpty', $inputEl[0]);\n } else {\n $itemInputEl.removeClass('item-input-with-value');\n $inputWrapEl.removeClass('input-with-value');\n $inputEl.removeClass('input-with-value');\n $inputEl.trigger('input:empty');\n app.emit('inputEmpty', $inputEl[0]);\n }\n },\n scrollIntoView(inputEl, duration, centered, force) {\n if (duration === void 0) {\n duration = 0;\n }\n const $inputEl = $(inputEl);\n const $scrollableEl = $inputEl.parents('.page-content, .panel, .card-expandable .card-content').eq(0);\n if (!$scrollableEl.length) {\n return false;\n }\n const contentHeight = $scrollableEl[0].offsetHeight;\n const contentScrollTop = $scrollableEl[0].scrollTop;\n const contentPaddingTop = parseInt($scrollableEl.css('padding-top'), 10);\n const contentPaddingBottom = parseInt($scrollableEl.css('padding-bottom'), 10);\n const contentOffsetTop = $scrollableEl.offset().top - contentScrollTop;\n const inputOffsetTop = $inputEl.offset().top - contentOffsetTop;\n const inputHeight = $inputEl[0].offsetHeight;\n const min = inputOffsetTop + contentScrollTop - contentPaddingTop;\n const max = inputOffsetTop + contentScrollTop - contentHeight + contentPaddingBottom + inputHeight;\n const centeredPosition = min + (max - min) / 2;\n if (contentScrollTop > min) {\n $scrollableEl.scrollTop(centered ? centeredPosition : min, duration);\n return true;\n }\n if (contentScrollTop < max) {\n $scrollableEl.scrollTop(centered ? centeredPosition : max, duration);\n return true;\n }\n if (force) {\n $scrollableEl.scrollTop(centered ? centeredPosition : max, duration);\n }\n return false;\n },\n init() {\n const app = this;\n const device = getDevice();\n const window = getWindow();\n const document = getDocument();\n Input.createTextareaResizableShadow();\n function onFocus() {\n const inputEl = this;\n if (app.params.input.scrollIntoViewOnFocus) {\n if (device.android) {\n $(window).once('resize', () => {\n if (document && document.activeElement === inputEl) {\n app.input.scrollIntoView(inputEl, app.params.input.scrollIntoViewDuration, app.params.input.scrollIntoViewCentered, app.params.input.scrollIntoViewAlways);\n }\n });\n } else {\n app.input.scrollIntoView(inputEl, app.params.input.scrollIntoViewDuration, app.params.input.scrollIntoViewCentered, app.params.input.scrollIntoViewAlways);\n }\n }\n app.input.focus(inputEl);\n }\n function onBlur() {\n const $inputEl = $(this);\n const tag = $inputEl[0].nodeName.toLowerCase();\n app.input.blur($inputEl);\n if ($inputEl.dataset().validate || $inputEl.attr('validate') !== null || $inputEl.attr('data-validate-on-blur') !== null) {\n app.input.validate($inputEl);\n }\n // Resize textarea\n if (tag === 'textarea' && $inputEl.hasClass('resizable')) {\n if (Input.textareaResizableShadow) Input.textareaResizableShadow.remove();\n }\n }\n function onChange() {\n const $inputEl = $(this);\n const type = $inputEl.attr('type');\n const tag = $inputEl[0].nodeName.toLowerCase();\n const isContentEditable = $inputEl[0].hasAttribute('contenteditable');\n if (Input.ignoreTypes.indexOf(type) >= 0) return;\n\n // Check Empty State\n app.input.checkEmptyState($inputEl);\n if (isContentEditable) return;\n\n // Check validation\n if ($inputEl.attr('data-validate-on-blur') === null && ($inputEl.dataset().validate || $inputEl.attr('validate') !== null)) {\n app.input.validate($inputEl);\n }\n\n // Resize textarea\n if (tag === 'textarea' && $inputEl.hasClass('resizable')) {\n app.input.resizeTextarea($inputEl);\n }\n }\n function onInvalid(e) {\n const $inputEl = $(this);\n if ($inputEl.attr('data-validate-on-blur') === null && ($inputEl.dataset().validate || $inputEl.attr('validate') !== null)) {\n e.preventDefault();\n app.input.validate($inputEl);\n }\n }\n function clearInput() {\n const $clicked = $(this);\n const $inputEl = $clicked.siblings('input, textarea').eq(0);\n const previousValue = $inputEl.val();\n $inputEl.val('').trigger('input change').focus().trigger('input:clear', previousValue);\n app.emit('inputClear', previousValue);\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n $(document).on('click', '.input-clear-button', clearInput);\n $(document).on('mousedown', '.input-clear-button', preventDefault);\n $(document).on('change input', 'input, textarea, select, .item-input [contenteditable]', onChange, true);\n $(document).on('focus', 'input, textarea, select, .item-input [contenteditable]', onFocus, true);\n $(document).on('blur', 'input, textarea, select, .item-input [contenteditable]', onBlur, true);\n $(document).on('invalid', 'input, textarea, select', onInvalid, true);\n }\n};\nexport default {\n name: 'input',\n params: {\n input: {\n scrollIntoViewOnFocus: undefined,\n scrollIntoViewCentered: false,\n scrollIntoViewDuration: 0,\n scrollIntoViewAlways: false\n }\n },\n create() {\n const app = this;\n if (typeof app.params.input.scrollIntoViewOnFocus === 'undefined') {\n app.params.input.scrollIntoViewOnFocus = getDevice().android;\n }\n bindMethods(app, {\n input: Input\n });\n },\n on: {\n init() {\n const app = this;\n app.input.init();\n },\n tabMounted(tabEl) {\n const app = this;\n const $tabEl = $(tabEl);\n $tabEl.find('.item-input, .input').each(itemInputEl => {\n const $itemInputEl = $(itemInputEl);\n $itemInputEl.find('input, select, textarea, [contenteditable]').each(inputEl => {\n const $inputEl = $(inputEl);\n if (Input.ignoreTypes.indexOf($inputEl.attr('type')) >= 0) return;\n app.input.checkEmptyState($inputEl);\n });\n });\n $tabEl.find('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n },\n pageInit(page) {\n const app = this;\n const $pageEl = page.$el;\n $pageEl.find('.item-input, .input').each(itemInputEl => {\n const $itemInputEl = $(itemInputEl);\n $itemInputEl.find('input, select, textarea, [contenteditable]').each(inputEl => {\n const $inputEl = $(inputEl);\n if (Input.ignoreTypes.indexOf($inputEl.attr('type')) >= 0) return;\n app.input.checkEmptyState($inputEl);\n });\n });\n $pageEl.find('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n },\n 'panelBreakpoint panelCollapsedBreakpoint panelResize panelOpen panelSwipeOpen resize viewMasterDetailBreakpoint': function onPanelOpen(instance) {\n const app = this;\n if (instance && instance.$el) {\n instance.$el.find('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n } else {\n $('textarea.resizable').each(textareaEl => {\n app.input.resizeTextarea(textareaEl);\n });\n }\n }\n }\n};", "export default {\n name: 'checkbox'\n};", "export default {\n name: 'radio'\n};", "import $ from '../../shared/dom7.js';\nimport { extend, now, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nclass Toggle extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const toggle = this;\n const support = getSupport();\n const defaults = {};\n\n // Extend defaults with modules params\n toggle.useModulesParams(defaults);\n toggle.params = extend(defaults, params);\n const el = toggle.params.el;\n if (!el) return toggle;\n const $el = $(el);\n if ($el.length === 0) return toggle;\n if ($el[0].f7Toggle) return $el[0].f7Toggle;\n const $inputEl = $el.children('input[type=\"checkbox\"]');\n extend(toggle, {\n app,\n $el,\n el: $el[0],\n $inputEl,\n inputEl: $inputEl[0],\n disabled: $el.hasClass('disabled') || $inputEl.hasClass('disabled') || $inputEl.attr('disabled') || $inputEl[0].disabled\n });\n Object.defineProperty(toggle, 'checked', {\n enumerable: true,\n configurable: true,\n set(checked) {\n if (!toggle || typeof toggle.$inputEl === 'undefined') return;\n if (toggle.checked === checked) return;\n $inputEl[0].checked = checked;\n toggle.$inputEl.trigger('change');\n },\n get() {\n return $inputEl[0].checked;\n }\n });\n $el[0].f7Toggle = toggle;\n let isTouched;\n const touchesStart = {};\n let isScrolling;\n let touchesDiff;\n let toggleWidth;\n let touchStartTime;\n let touchStartChecked;\n function handleTouchStart(e) {\n if (isTouched || toggle.disabled) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchesDiff = 0;\n isTouched = true;\n isScrolling = undefined;\n touchStartTime = now();\n touchStartChecked = toggle.checked;\n toggleWidth = $el[0].offsetWidth;\n nextTick(() => {\n if (isTouched) {\n $el.addClass('toggle-active-state');\n }\n });\n }\n function handleTouchMove(e) {\n if (!isTouched || toggle.disabled) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n const inverter = app.rtl ? -1 : 1;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n touchesDiff = pageX - touchesStart.x;\n let changed;\n if (touchesDiff * inverter < 0 && Math.abs(touchesDiff) > toggleWidth / 3 && touchStartChecked) {\n changed = true;\n }\n if (touchesDiff * inverter > 0 && Math.abs(touchesDiff) > toggleWidth / 3 && !touchStartChecked) {\n changed = true;\n }\n if (changed) {\n touchesStart.x = pageX;\n toggle.checked = !touchStartChecked;\n touchStartChecked = !touchStartChecked;\n }\n }\n function handleTouchEnd() {\n if (!isTouched || toggle.disabled) {\n if (isScrolling) $el.removeClass('toggle-active-state');\n isTouched = false;\n return;\n }\n const inverter = app.rtl ? -1 : 1;\n isTouched = false;\n $el.removeClass('toggle-active-state');\n let changed;\n if (now() - touchStartTime < 300) {\n if (touchesDiff * inverter < 0 && touchStartChecked) {\n changed = true;\n }\n if (touchesDiff * inverter > 0 && !touchStartChecked) {\n changed = true;\n }\n if (changed) {\n toggle.checked = !touchStartChecked;\n }\n }\n }\n function handleInputChange() {\n toggle.$el.trigger('toggle:change');\n toggle.emit('local::change toggleChange', toggle);\n }\n toggle.attachEvents = function attachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n toggle.$inputEl.on('change', handleInputChange);\n };\n toggle.detachEvents = function detachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n toggle.$inputEl.off('change', handleInputChange);\n };\n\n // Install Modules\n toggle.useModules();\n\n // Init\n toggle.init();\n }\n toggle() {\n const toggle = this;\n toggle.checked = !toggle.checked;\n }\n init() {\n const toggle = this;\n toggle.attachEvents();\n }\n destroy() {\n let toggle = this;\n toggle.$el.trigger('toggle:beforedestroy');\n toggle.emit('local::beforeDestroy toggleBeforeDestroy', toggle);\n delete toggle.$el[0].f7Toggle;\n toggle.detachEvents();\n deleteProps(toggle);\n toggle = null;\n }\n}\nexport default Toggle;", "import $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport Toggle from './toggle-class.js';\nexport default {\n name: 'toggle',\n create() {\n const app = this;\n app.toggle = ConstructorMethods({\n defaultSelector: '.toggle',\n constructor: Toggle,\n app,\n domProp: 'f7Toggle'\n });\n },\n static: {\n Toggle\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.toggle-init').each(toggleEl => app.toggle.create({\n el: toggleEl\n }));\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.toggle-init').each(toggleEl => {\n if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.toggle-init').each(toggleEl => app.toggle.create({\n el: toggleEl\n }));\n },\n pageBeforeRemove(page) {\n page.$el.find('.toggle-init').each(toggleEl => {\n if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();\n });\n }\n },\n vnode: {\n 'toggle-init': {\n insert(vnode) {\n const app = this;\n const toggleEl = vnode.elm;\n app.toggle.create({\n el: toggleEl\n });\n },\n destroy(vnode) {\n const toggleEl = vnode.elm;\n if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nclass Range extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const range = this;\n const support = getSupport();\n const defaults = {\n el: null,\n inputEl: null,\n dual: false,\n step: 1,\n label: false,\n min: 0,\n max: 100,\n value: 0,\n draggableBar: true,\n vertical: false,\n verticalReversed: false,\n formatLabel: null,\n scale: false,\n scaleSteps: 5,\n scaleSubSteps: 0,\n formatScaleLabel: null,\n limitKnobPosition: app.theme === 'ios'\n };\n\n // Extend defaults with modules params\n range.useModulesParams(defaults);\n range.params = extend(defaults, params);\n const el = range.params.el;\n if (!el) return range;\n const $el = $(el);\n if ($el.length === 0) return range;\n if ($el[0].f7Range) return $el[0].f7Range;\n const dataset = $el.dataset();\n 'step min max value scaleSteps scaleSubSteps'.split(' ').forEach(paramName => {\n if (typeof params[paramName] === 'undefined' && typeof dataset[paramName] !== 'undefined') {\n range.params[paramName] = parseFloat(dataset[paramName]);\n }\n });\n 'dual label vertical verticalReversed scale'.split(' ').forEach(paramName => {\n if (typeof params[paramName] === 'undefined' && typeof dataset[paramName] !== 'undefined') {\n range.params[paramName] = dataset[paramName];\n }\n });\n if (!range.params.value) {\n if (typeof dataset.value !== 'undefined') range.params.value = dataset.value;\n if (typeof dataset.valueLeft !== 'undefined' && typeof dataset.valueRight !== 'undefined') {\n range.params.value = [parseFloat(dataset.valueLeft), parseFloat(dataset.valueRight)];\n }\n }\n let $inputEl;\n if (!range.params.dual) {\n if (range.params.inputEl) {\n $inputEl = $(range.params.inputEl);\n } else if ($el.find('input[type=\"range\"]').length) {\n $inputEl = $el.find('input[type=\"range\"]').eq(0);\n }\n }\n const {\n dual,\n step,\n label,\n min,\n max,\n value,\n vertical,\n verticalReversed,\n scale,\n scaleSteps,\n scaleSubSteps,\n limitKnobPosition\n } = range.params;\n extend(range, {\n app,\n $el,\n el: $el[0],\n $inputEl,\n inputEl: $inputEl ? $inputEl[0] : undefined,\n dual,\n step,\n label,\n min,\n max,\n value,\n previousValue: value,\n vertical,\n verticalReversed,\n scale,\n scaleSteps,\n scaleSubSteps,\n limitKnobPosition\n });\n if ($inputEl) {\n 'step min max'.split(' ').forEach(paramName => {\n if (!params[paramName] && $inputEl.attr(paramName)) {\n range.params[paramName] = parseFloat($inputEl.attr(paramName));\n range[paramName] = parseFloat($inputEl.attr(paramName));\n }\n });\n if (typeof $inputEl.val() !== 'undefined') {\n range.params.value = parseFloat($inputEl.val());\n range.value = parseFloat($inputEl.val());\n }\n }\n\n // Dual\n if (range.dual) {\n $el.addClass('range-slider-dual');\n }\n if (range.label) {\n $el.addClass('range-slider-label');\n }\n\n // Vertical\n if (range.vertical) {\n $el.addClass('range-slider-vertical');\n if (range.verticalReversed) {\n $el.addClass('range-slider-vertical-reversed');\n }\n } else {\n $el.addClass('range-slider-horizontal');\n }\n\n // Check for layout\n const $barEl = $('');\n const $barActiveEl = $('');\n $barEl.append($barActiveEl);\n\n // Create Knobs\n // prettier-ignore\n const knobHTML = `\n \n
\n ${range.label ? '
' : ''}\n
\n `;\n const knobs = [$(knobHTML)];\n if (range.dual) {\n knobs.push($(knobHTML));\n }\n $el.append($barEl);\n knobs.forEach($knobEl => {\n $el.append($knobEl);\n });\n\n // Labels\n const labels = [];\n if (range.label) {\n labels.push(knobs[0].find('.range-knob-label'));\n if (range.dual) {\n labels.push(knobs[1].find('.range-knob-label'));\n }\n }\n\n // Scale\n let $scaleEl;\n if (range.scale && range.scaleSteps >= 1) {\n $scaleEl = $(`\n \n ${range.renderScale()}\n
\n `);\n $el.append($scaleEl);\n }\n extend(range, {\n knobs,\n labels,\n $barEl,\n $barActiveEl,\n $scaleEl\n });\n $el[0].f7Range = range;\n\n // Touch Events\n let isTouched;\n const touchesStart = {};\n let isScrolling;\n let rangeOffset;\n let rangeOffsetLeft;\n let rangeOffsetTop;\n let $touchedKnobEl;\n let dualValueIndex;\n let valueChangedByTouch;\n let targetTouchIdentifier;\n function onTouchChange() {\n valueChangedByTouch = true;\n }\n function handleTouchStart(e) {\n if (isTouched) return;\n if (!range.params.draggableBar) {\n if ($(e.target).closest('.range-knob').length === 0) {\n return;\n }\n }\n valueChangedByTouch = false;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n if (e.type === 'touchstart') {\n targetTouchIdentifier = e.targetTouches[0].identifier;\n }\n isTouched = true;\n isScrolling = undefined;\n rangeOffset = $el.offset();\n rangeOffsetLeft = rangeOffset.left;\n rangeOffsetTop = rangeOffset.top;\n let progress;\n if (range.vertical) {\n progress = (touchesStart.y - rangeOffsetTop) / range.rangeHeight;\n if (!range.verticalReversed) progress = 1 - progress;\n } else if (range.app.rtl) {\n progress = (rangeOffsetLeft + range.rangeWidth - touchesStart.x) / range.rangeWidth;\n } else {\n progress = (touchesStart.x - rangeOffsetLeft) / range.rangeWidth;\n }\n let newValue = progress * (range.max - range.min) + range.min;\n if (range.dual) {\n if (Math.abs(range.value[0] - newValue) < Math.abs(range.value[1] - newValue)) {\n dualValueIndex = 0;\n $touchedKnobEl = range.knobs[0];\n newValue = [newValue, range.value[1]];\n } else {\n dualValueIndex = 1;\n $touchedKnobEl = range.knobs[1];\n newValue = [range.value[0], newValue];\n }\n } else {\n $touchedKnobEl = range.knobs[0];\n newValue = progress * (range.max - range.min) + range.min;\n }\n nextTick(() => {\n if (isTouched) $touchedKnobEl.addClass('range-knob-active-state');\n }, 70);\n range.on('change', onTouchChange);\n range.setValue(newValue, true);\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n let pageX;\n let pageY;\n if (e.type === 'touchmove') {\n for (let i = 0; i < e.targetTouches.length; i += 1) {\n if (e.targetTouches[i].identifier === targetTouchIdentifier) {\n pageX = e.targetTouches[i].pageX;\n pageY = e.targetTouches[i].pageY;\n }\n }\n } else {\n pageX = e.pageX;\n pageY = e.pageY;\n }\n if (typeof pageX === 'undefined' && typeof pageY === 'undefined') return;\n if (typeof isScrolling === 'undefined' && !range.vertical) {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n let progress;\n if (range.vertical) {\n progress = (pageY - rangeOffsetTop) / range.rangeHeight;\n if (!range.verticalReversed) progress = 1 - progress;\n } else if (range.app.rtl) {\n progress = (rangeOffsetLeft + range.rangeWidth - pageX) / range.rangeWidth;\n } else {\n progress = (pageX - rangeOffsetLeft) / range.rangeWidth;\n }\n let newValue = progress * (range.max - range.min) + range.min;\n if (range.dual) {\n let leftValue;\n let rightValue;\n if (dualValueIndex === 0) {\n leftValue = newValue;\n rightValue = range.value[1];\n if (leftValue > rightValue) {\n rightValue = leftValue;\n }\n } else {\n leftValue = range.value[0];\n rightValue = newValue;\n if (rightValue < leftValue) {\n leftValue = rightValue;\n }\n }\n newValue = [leftValue, rightValue];\n }\n range.setValue(newValue, true);\n }\n function handleTouchEnd(e) {\n if (e.type === 'touchend') {\n let touchEnded;\n for (let i = 0; i < e.changedTouches.length; i += 1) {\n if (e.changedTouches[i].identifier === targetTouchIdentifier) touchEnded = true;\n }\n if (!touchEnded) return;\n }\n if (!isTouched) {\n if (isScrolling) $touchedKnobEl.removeClass('range-knob-active-state');\n isTouched = false;\n return;\n }\n range.off('change', onTouchChange);\n isTouched = false;\n $touchedKnobEl.removeClass('range-knob-active-state');\n if (valueChangedByTouch && range.$inputEl && !range.dual) {\n range.$inputEl.trigger('change');\n }\n valueChangedByTouch = false;\n if (typeof range.previousValue !== 'undefined') {\n if (range.dual && (range.previousValue[0] !== range.value[0] || range.previousValue[1] !== range.value[1]) || !range.dual && range.previousValue !== range.value) {\n range.$el.trigger('range:changed', range.value);\n range.emit('local::changed rangeChanged', range, range.value);\n }\n }\n }\n function handleResize() {\n range.calcSize();\n range.layout();\n }\n let parentModals;\n let parentPanel;\n let parentPage;\n range.attachEvents = function attachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n range.$el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('tabShow', handleResize);\n app.on('resize', handleResize);\n parentModals = range.$el.parents('.sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast');\n parentModals.on('modal:open', handleResize);\n parentPanel = range.$el.parents('.panel');\n parentPanel.on('panel:open panel:resize', handleResize);\n parentPage = range.$el.parents('.page').eq(0);\n parentPage.on('page:reinit', handleResize);\n };\n range.detachEvents = function detachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n range.$el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('tabShow', handleResize);\n app.off('resize', handleResize);\n if (parentModals) {\n parentModals.off('modal:open', handleResize);\n }\n if (parentPanel) {\n parentPanel.off('panel:open panel:resize', handleResize);\n }\n if (parentPage) {\n parentPage.off('page:reinit', handleResize);\n }\n parentModals = null;\n parentPanel = null;\n parentPage = null;\n };\n\n // Install Modules\n range.useModules();\n\n // Init\n range.init();\n return range;\n }\n calcSize() {\n const range = this;\n if (range.vertical) {\n const height = range.$el.outerHeight();\n if (height === 0) return;\n range.rangeHeight = height;\n range.knobHeight = range.knobs[0].outerHeight();\n } else {\n const width = range.$el.outerWidth();\n if (width === 0) return;\n range.rangeWidth = width;\n range.knobWidth = range.knobs[0].outerWidth();\n }\n }\n layout() {\n const range = this;\n const {\n app,\n knobWidth,\n knobHeight,\n rangeWidth,\n rangeHeight,\n min,\n max,\n knobs,\n $barActiveEl,\n value,\n label,\n labels,\n vertical,\n verticalReversed,\n limitKnobPosition\n } = range;\n const knobSize = vertical ? knobHeight : knobWidth;\n const rangeSize = vertical ? rangeHeight : rangeWidth;\n // eslint-disable-next-line\n const positionProperty = vertical ? verticalReversed ? 'top' : 'bottom' : app.rtl ? 'right' : 'left';\n if (range.dual) {\n const progress = [(value[0] - min) / (max - min), (value[1] - min) / (max - min)];\n $barActiveEl.css({\n [positionProperty]: `${progress[0] * 100}%`,\n [vertical ? 'height' : 'width']: `${(progress[1] - progress[0]) * 100}%`\n });\n knobs.forEach(($knobEl, knobIndex) => {\n let startPos = rangeSize * progress[knobIndex];\n if (limitKnobPosition) {\n const realStartPos = rangeSize * progress[knobIndex] - knobSize / 2;\n if (realStartPos < 0) startPos = knobSize / 2;\n if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;\n }\n $knobEl.css(positionProperty, `${startPos}px`);\n if (label) labels[knobIndex].text(range.formatLabel(value[knobIndex], labels[knobIndex][0]));\n });\n } else {\n const progress = (value - min) / (max - min);\n $barActiveEl.css(vertical ? 'height' : 'width', `${progress * 100}%`);\n let startPos = rangeSize * progress;\n if (limitKnobPosition) {\n const realStartPos = rangeSize * progress - knobSize / 2;\n if (realStartPos < 0) startPos = knobSize / 2;\n if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;\n }\n knobs[0].css(positionProperty, `${startPos}px`);\n if (label) labels[0].text(range.formatLabel(value, labels[0][0]));\n }\n if (range.dual && value.indexOf(min) >= 0 || !range.dual && value === min) {\n range.$el.addClass('range-slider-min');\n } else {\n range.$el.removeClass('range-slider-min');\n }\n if (range.dual && value.indexOf(max) >= 0 || !range.dual && value === max) {\n range.$el.addClass('range-slider-max');\n } else {\n range.$el.removeClass('range-slider-max');\n }\n }\n setValue(newValue, byTouchMove) {\n const range = this;\n const {\n step,\n min,\n max\n } = range;\n let valueChanged;\n let oldValue;\n if (range.dual) {\n oldValue = [range.value[0], range.value[1]];\n let newValues = newValue;\n if (!Array.isArray(newValues)) newValues = [newValue, newValue];\n if (newValue[0] > newValue[1]) {\n newValues = [newValues[0], newValues[0]];\n }\n newValues = newValues.map(value => Math.max(Math.min(Math.round(value / step) * step, max), min));\n if (newValues[0] === range.value[0] && newValues[1] === range.value[1]) {\n return range;\n }\n newValues.forEach((value, valueIndex) => {\n range.value[valueIndex] = value;\n });\n valueChanged = oldValue[0] !== newValues[0] || oldValue[1] !== newValues[1];\n range.layout();\n } else {\n oldValue = range.value;\n const value = Math.max(Math.min(Math.round(newValue / step) * step, max), min);\n range.value = value;\n range.layout();\n valueChanged = oldValue !== value;\n }\n if (valueChanged) {\n range.previousValue = oldValue;\n }\n // Events\n if (!valueChanged) return range;\n range.$el.trigger('range:change', range.value);\n if (range.$inputEl && !range.dual) {\n range.$inputEl.val(range.value);\n if (!byTouchMove) {\n range.$inputEl.trigger('input change');\n } else {\n range.$inputEl.trigger('input');\n }\n }\n if (!byTouchMove) {\n range.$el.trigger('range:changed', range.value);\n range.emit('local::changed rangeChanged', range, range.value);\n }\n range.emit('local::change rangeChange', range, range.value);\n return range;\n }\n getValue() {\n return this.value;\n }\n formatLabel(value, labelEl) {\n const range = this;\n if (range.params.formatLabel) return range.params.formatLabel.call(range, value, labelEl);\n return value;\n }\n formatScaleLabel(value) {\n const range = this;\n if (range.params.formatScaleLabel) return range.params.formatScaleLabel.call(range, value);\n return value;\n }\n renderScale() {\n const range = this;\n const {\n app,\n verticalReversed,\n vertical\n } = range;\n\n // eslint-disable-next-line\n const positionProperty = vertical ? verticalReversed ? 'top' : 'bottom' : app.rtl ? 'right' : 'left';\n let html = '';\n Array.from({\n length: range.scaleSteps + 1\n }).forEach((scaleEl, index) => {\n const scaleStepValue = (range.max - range.min) / range.scaleSteps;\n const scaleValue = range.min + scaleStepValue * index;\n const progress = (scaleValue - range.min) / (range.max - range.min);\n html += `${range.formatScaleLabel(scaleValue)}
`;\n if (range.scaleSubSteps && range.scaleSubSteps > 1 && index < range.scaleSteps) {\n Array.from({\n length: range.scaleSubSteps - 1\n }).forEach((subStepEl, subIndex) => {\n const subStep = scaleStepValue / range.scaleSubSteps;\n const scaleSubValue = scaleValue + subStep * (subIndex + 1);\n const subProgress = (scaleSubValue - range.min) / (range.max - range.min);\n html += ``;\n });\n }\n });\n return html;\n }\n updateScale() {\n const range = this;\n if (!range.scale || range.scaleSteps < 1) {\n if (range.$scaleEl) range.$scaleEl.remove();\n delete range.$scaleEl;\n return;\n }\n if (!range.$scaleEl) {\n range.$scaleEl = $('');\n range.$el.append(range.$scaleEl);\n }\n range.$scaleEl.html(range.renderScale());\n }\n init() {\n const range = this;\n range.calcSize();\n range.layout();\n range.attachEvents();\n return range;\n }\n destroy() {\n let range = this;\n range.$el.trigger('range:beforedestroy');\n range.emit('local::beforeDestroy rangeBeforeDestroy', range);\n delete range.$el[0].f7Range;\n range.detachEvents();\n deleteProps(range);\n range = null;\n }\n}\nexport default Range;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Range from './range-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'range',\n create() {\n const app = this;\n app.range = extend(ConstructorMethods({\n defaultSelector: '.range-slider',\n constructor: Range,\n app,\n domProp: 'f7Range'\n }), {\n getValue(el) {\n if (el === void 0) {\n el = '.range-slider';\n }\n const range = app.range.get(el);\n if (range) return range.getValue();\n return undefined;\n },\n setValue(el, value) {\n if (el === void 0) {\n el = '.range-slider';\n }\n const range = app.range.get(el);\n if (range) return range.setValue(value);\n return undefined;\n }\n });\n },\n static: {\n Range\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.range-slider-init').each(rangeEl => new Range(app, {\n el: rangeEl\n }));\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.range-slider-init').each(rangeEl => {\n if (rangeEl.f7Range) rangeEl.f7Range.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.range-slider-init').each(rangeEl => new Range(app, {\n el: rangeEl\n }));\n },\n pageBeforeRemove(page) {\n page.$el.find('.range-slider-init').each(rangeEl => {\n if (rangeEl.f7Range) rangeEl.f7Range.destroy();\n });\n }\n },\n vnode: {\n 'range-slider-init': {\n insert(vnode) {\n const rangeEl = vnode.elm;\n const app = this;\n app.range.create({\n el: rangeEl\n });\n },\n destroy(vnode) {\n const rangeEl = vnode.elm;\n if (rangeEl.f7Range) rangeEl.f7Range.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nclass Stepper extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const stepper = this;\n const defaults = {\n el: null,\n inputEl: null,\n valueEl: null,\n value: 0,\n formatValue: null,\n step: 1,\n min: 0,\n max: 100,\n watchInput: true,\n autorepeat: false,\n autorepeatDynamic: false,\n wraps: false,\n manualInputMode: false,\n decimalPoint: 4,\n buttonsEndInputMode: true\n };\n\n // Extend defaults with modules params\n stepper.useModulesParams(defaults);\n stepper.params = extend(defaults, params);\n if (stepper.params.value < stepper.params.min) {\n stepper.params.value = stepper.params.min;\n }\n if (stepper.params.value > stepper.params.max) {\n stepper.params.value = stepper.params.max;\n }\n const el = stepper.params.el;\n if (!el) return stepper;\n const $el = $(el);\n if ($el.length === 0) return stepper;\n if ($el[0].f7Stepper) return $el[0].f7Stepper;\n let $inputEl;\n if (stepper.params.inputEl) {\n $inputEl = $(stepper.params.inputEl);\n } else if ($el.find('.stepper-input-wrap').find('input, textarea').length) {\n $inputEl = $el.find('.stepper-input-wrap').find('input, textarea').eq(0);\n }\n if ($inputEl && $inputEl.length) {\n 'step min max'.split(' ').forEach(paramName => {\n if (!params[paramName] && $inputEl.attr(paramName)) {\n stepper.params[paramName] = parseFloat($inputEl.attr(paramName));\n }\n });\n const decimalPoint = parseInt(stepper.params.decimalPoint, 10);\n if (Number.isNaN(decimalPoint)) {\n stepper.params.decimalPoint = 0;\n } else {\n stepper.params.decimalPoint = decimalPoint;\n }\n const inputValue = parseFloat($inputEl.val());\n if (typeof params.value === 'undefined' && !Number.isNaN(inputValue) && (inputValue || inputValue === 0)) {\n stepper.params.value = inputValue;\n }\n }\n let $valueEl;\n if (stepper.params.valueEl) {\n $valueEl = $(stepper.params.valueEl);\n } else if ($el.find('.stepper-value').length) {\n $valueEl = $el.find('.stepper-value').eq(0);\n }\n const $buttonPlusEl = $el.find('.stepper-button-plus');\n const $buttonMinusEl = $el.find('.stepper-button-minus');\n const {\n step,\n min,\n max,\n value,\n decimalPoint\n } = stepper.params;\n extend(stepper, {\n app,\n $el,\n el: $el[0],\n $buttonPlusEl,\n buttonPlusEl: $buttonPlusEl[0],\n $buttonMinusEl,\n buttonMinusEl: $buttonMinusEl[0],\n $inputEl,\n inputEl: $inputEl ? $inputEl[0] : undefined,\n $valueEl,\n valueEl: $valueEl ? $valueEl[0] : undefined,\n step,\n min,\n max,\n value,\n decimalPoint,\n typeModeChanged: false\n });\n $el[0].f7Stepper = stepper;\n\n // Handle Events\n const touchesStart = {};\n let isTouched;\n let isScrolling;\n let preventButtonClick;\n let intervalId;\n let timeoutId;\n let autorepeatAction = null;\n let autorepeatInAction = false;\n let manualInput = false;\n function dynamicRepeat(current, progressions, startsIn, progressionStep, repeatEvery, action) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n if (current === 1) {\n preventButtonClick = true;\n autorepeatInAction = true;\n }\n clearInterval(intervalId);\n action();\n intervalId = setInterval(() => {\n action();\n }, repeatEvery);\n if (current < progressions) {\n dynamicRepeat(current + 1, progressions, startsIn, progressionStep, repeatEvery / 2, action);\n }\n }, current === 1 ? startsIn : progressionStep);\n }\n function onTouchStart(e) {\n if (isTouched) return;\n if (manualInput) {\n return;\n }\n if ($(e.target).closest($buttonPlusEl).length) {\n autorepeatAction = 'increment';\n } else if ($(e.target).closest($buttonMinusEl).length) {\n autorepeatAction = 'decrement';\n }\n if (!autorepeatAction) return;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n isTouched = true;\n isScrolling = undefined;\n const progressions = stepper.params.autorepeatDynamic ? 4 : 1;\n dynamicRepeat(1, progressions, 500, 1000, 300, () => {\n stepper[autorepeatAction]();\n });\n }\n function onTouchMove(e) {\n if (!isTouched) return;\n if (manualInput) {\n return;\n }\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined' && !autorepeatInAction) {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n const distance = ((pageX - touchesStart.x) ** 2 + (pageY - touchesStart.y) ** 2) ** 0.5;\n if (isScrolling || distance > 20) {\n isTouched = false;\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n }\n }\n function onTouchEnd() {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n autorepeatAction = null;\n autorepeatInAction = false;\n isTouched = false;\n }\n function onMinusClick() {\n if (manualInput) {\n if (stepper.params.buttonsEndInputMode) {\n manualInput = false;\n stepper.endTypeMode(true);\n }\n return;\n }\n if (preventButtonClick) {\n preventButtonClick = false;\n return;\n }\n stepper.decrement(true);\n }\n function onPlusClick() {\n if (manualInput) {\n if (stepper.params.buttonsEndInputMode) {\n manualInput = false;\n stepper.endTypeMode(true);\n }\n return;\n }\n if (preventButtonClick) {\n preventButtonClick = false;\n return;\n }\n stepper.increment(true);\n }\n function onInputClick(e) {\n if (!e.target.readOnly && stepper.params.manualInputMode) {\n manualInput = true;\n if (typeof e.target.selectionStart === 'number') {\n e.target.selectionStart = e.target.value.length;\n e.target.selectionEnd = e.target.value.length;\n }\n }\n }\n function onInputKey(e) {\n if (e.keyCode === 13 || e.which === 13) {\n e.preventDefault();\n manualInput = false;\n stepper.endTypeMode();\n }\n }\n function onInputBlur() {\n manualInput = false;\n stepper.endTypeMode(true);\n }\n function onInput(e) {\n if (manualInput) {\n stepper.typeValue(e.target.value);\n return;\n }\n if (e.detail && e.detail.sentByF7Stepper) return;\n stepper.setValue(e.target.value, true);\n }\n stepper.attachEvents = function attachEvents() {\n $buttonMinusEl.on('click', onMinusClick);\n $buttonPlusEl.on('click', onPlusClick);\n if (stepper.params.watchInput && $inputEl && $inputEl.length) {\n $inputEl.on('input', onInput);\n $inputEl.on('click', onInputClick);\n $inputEl.on('blur', onInputBlur);\n $inputEl.on('keyup', onInputKey);\n }\n if (stepper.params.autorepeat) {\n app.on('touchstart:passive', onTouchStart);\n app.on('touchmove:active', onTouchMove);\n app.on('touchend:passive', onTouchEnd);\n }\n };\n stepper.detachEvents = function detachEvents() {\n $buttonMinusEl.off('click', onMinusClick);\n $buttonPlusEl.off('click', onPlusClick);\n if (stepper.params.watchInput && $inputEl && $inputEl.length) {\n $inputEl.off('input', onInput);\n $inputEl.off('click', onInputClick);\n $inputEl.off('blur', onInputBlur);\n $inputEl.off('keyup', onInputKey);\n }\n };\n\n // Install Modules\n stepper.useModules();\n\n // Init\n stepper.init();\n return stepper;\n }\n minus() {\n return this.decrement();\n }\n plus() {\n return this.increment();\n }\n decrement() {\n const stepper = this;\n return stepper.setValue(stepper.value - stepper.step, false, true);\n }\n increment() {\n const stepper = this;\n return stepper.setValue(stepper.value + stepper.step, false, true);\n }\n setValue(newValue, forceUpdate, withWraps) {\n const stepper = this;\n const {\n step,\n min,\n max\n } = stepper;\n const oldValue = stepper.value;\n let value = Math.round(newValue / step) * step;\n if (stepper.params.wraps && withWraps) {\n if (value > max) value = min;\n if (value < min) value = max;\n } else {\n value = Math.max(Math.min(value, max), min);\n }\n if (Number.isNaN(value)) {\n value = oldValue;\n }\n stepper.value = value;\n const valueChanged = oldValue !== value;\n\n // Events\n if (!valueChanged && !forceUpdate) return stepper;\n stepper.$el.trigger('stepper:change', stepper.value);\n const formattedValue = stepper.formatValue(stepper.value);\n if (stepper.$inputEl && stepper.$inputEl.length) {\n stepper.$inputEl.val(formattedValue);\n stepper.$inputEl.trigger('input change', {\n sentByF7Stepper: true\n });\n }\n if (stepper.$valueEl && stepper.$valueEl.length) {\n stepper.$valueEl.html(formattedValue);\n }\n stepper.emit('local::change stepperChange', stepper, stepper.value);\n return stepper;\n }\n endTypeMode(noBlur) {\n const stepper = this;\n const {\n min,\n max\n } = stepper;\n let value = parseFloat(stepper.value);\n if (Number.isNaN(value)) value = 0;\n value = Math.max(Math.min(value, max), min);\n stepper.value = value;\n if (!stepper.typeModeChanged) {\n if (stepper.$inputEl && stepper.$inputEl.length && !noBlur) {\n stepper.$inputEl.blur();\n }\n return stepper;\n }\n stepper.typeModeChanged = false;\n stepper.$el.trigger('stepper:change', stepper.value);\n const formattedValue = stepper.formatValue(stepper.value);\n if (stepper.$inputEl && stepper.$inputEl.length) {\n stepper.$inputEl.val(formattedValue);\n stepper.$inputEl.trigger('input change', {\n sentByF7Stepper: true\n });\n if (!noBlur) stepper.$inputEl.blur();\n }\n if (stepper.$valueEl && stepper.$valueEl.length) {\n stepper.$valueEl.html(formattedValue);\n }\n stepper.emit('local::change stepperChange', stepper, stepper.value);\n return stepper;\n }\n typeValue(value) {\n const stepper = this;\n stepper.typeModeChanged = true;\n let inputTxt = String(value);\n if (inputTxt.length === 1 && inputTxt === '-') return stepper;\n if (inputTxt.lastIndexOf('.') + 1 === inputTxt.length || inputTxt.lastIndexOf(',') + 1 === inputTxt.length) {\n if (inputTxt.lastIndexOf('.') !== inputTxt.indexOf('.') || inputTxt.lastIndexOf(',') !== inputTxt.indexOf(',')) {\n inputTxt = inputTxt.slice(0, -1);\n stepper.value = inputTxt;\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n } else {\n let newValue = parseFloat(inputTxt.replace(',', '.'));\n if (newValue === 0) {\n stepper.value = inputTxt.replace(',', '.');\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n if (Number.isNaN(newValue)) {\n stepper.value = 0;\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n const powVal = 10 ** stepper.params.decimalPoint;\n newValue = Math.round(newValue * powVal).toFixed(stepper.params.decimalPoint + 1) / powVal;\n stepper.value = parseFloat(String(newValue).replace(',', '.'));\n stepper.$inputEl.val(stepper.value);\n return stepper;\n }\n stepper.value = inputTxt;\n stepper.$inputEl.val(inputTxt);\n return stepper;\n }\n getValue() {\n return this.value;\n }\n formatValue(value) {\n const stepper = this;\n if (!stepper.params.formatValue) return value;\n return stepper.params.formatValue.call(stepper, value);\n }\n init() {\n const stepper = this;\n stepper.attachEvents();\n if (stepper.$valueEl && stepper.$valueEl.length) {\n const formattedValue = stepper.formatValue(stepper.value);\n stepper.$valueEl.html(formattedValue);\n }\n return stepper;\n }\n destroy() {\n let stepper = this;\n stepper.$el.trigger('stepper:beforedestroy');\n stepper.emit('local::beforeDestroy stepperBeforeDestroy', stepper);\n delete stepper.$el[0].f7Stepper;\n stepper.detachEvents();\n deleteProps(stepper);\n stepper = null;\n }\n}\nexport default Stepper;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Stepper from './stepper-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'stepper',\n create() {\n const app = this;\n app.stepper = extend(ConstructorMethods({\n defaultSelector: '.stepper',\n constructor: Stepper,\n app,\n domProp: 'f7Stepper'\n }), {\n getValue(el) {\n if (el === void 0) {\n el = '.stepper';\n }\n const stepper = app.stepper.get(el);\n if (stepper) return stepper.getValue();\n return undefined;\n },\n setValue(el, value) {\n if (el === void 0) {\n el = '.stepper';\n }\n const stepper = app.stepper.get(el);\n if (stepper) return stepper.setValue(value);\n return undefined;\n }\n });\n },\n static: {\n Stepper\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.stepper-init').each(stepperEl => {\n const dataset = $(stepperEl).dataset();\n app.stepper.create(extend({\n el: stepperEl\n }, dataset || {}));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.stepper-init').each(stepperEl => {\n if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.stepper-init').each(stepperEl => {\n const dataset = $(stepperEl).dataset();\n app.stepper.create(extend({\n el: stepperEl\n }, dataset || {}));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.stepper-init').each(stepperEl => {\n if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();\n });\n }\n },\n vnode: {\n 'stepper-init': {\n insert(vnode) {\n const app = this;\n const stepperEl = vnode.elm;\n const dataset = $(stepperEl).dataset();\n app.stepper.create(extend({\n el: stepperEl\n }, dataset || {}));\n },\n destroy(vnode) {\n const stepperEl = vnode.elm;\n if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();\n }\n }\n }\n};", "/* eslint no-control-regex: \"off\" */\nconst defaultDiacriticsRemovalap = [{\n base: 'A',\n letters: '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F'\n}, {\n base: 'AA',\n letters: '\\uA732'\n}, {\n base: 'AE',\n letters: '\\u00C6\\u01FC\\u01E2'\n}, {\n base: 'AO',\n letters: '\\uA734'\n}, {\n base: 'AU',\n letters: '\\uA736'\n}, {\n base: 'AV',\n letters: '\\uA738\\uA73A'\n}, {\n base: 'AY',\n letters: '\\uA73C'\n}, {\n base: 'B',\n letters: '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181'\n}, {\n base: 'C',\n letters: '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E'\n}, {\n base: 'D',\n letters: '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779'\n}, {\n base: 'DZ',\n letters: '\\u01F1\\u01C4'\n}, {\n base: 'Dz',\n letters: '\\u01F2\\u01C5'\n}, {\n base: 'E',\n letters: '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E'\n}, {\n base: 'F',\n letters: '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B'\n}, {\n base: 'G',\n letters: '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E'\n}, {\n base: 'H',\n letters: '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D'\n}, {\n base: 'I',\n letters: '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197'\n}, {\n base: 'J',\n letters: '\\u004A\\u24BF\\uFF2A\\u0134\\u0248'\n}, {\n base: 'K',\n letters: '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2'\n}, {\n base: 'L',\n letters: '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780'\n}, {\n base: 'LJ',\n letters: '\\u01C7'\n}, {\n base: 'Lj',\n letters: '\\u01C8'\n}, {\n base: 'M',\n letters: '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C'\n}, {\n base: 'N',\n letters: '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4'\n}, {\n base: 'NJ',\n letters: '\\u01CA'\n}, {\n base: 'Nj',\n letters: '\\u01CB'\n}, {\n base: 'O',\n letters: '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C'\n}, {\n base: 'OI',\n letters: '\\u01A2'\n}, {\n base: 'OO',\n letters: '\\uA74E'\n}, {\n base: 'OU',\n letters: '\\u0222'\n}, {\n base: 'OE',\n letters: '\\u008C\\u0152'\n}, {\n base: 'oe',\n letters: '\\u009C\\u0153'\n}, {\n base: 'P',\n letters: '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754'\n}, {\n base: 'Q',\n letters: '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A'\n}, {\n base: 'R',\n letters: '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782'\n}, {\n base: 'S',\n letters: '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784'\n}, {\n base: 'T',\n letters: '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786'\n}, {\n base: 'TZ',\n letters: '\\uA728'\n}, {\n base: 'U',\n letters: '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244'\n}, {\n base: 'V',\n letters: '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245'\n}, {\n base: 'VY',\n letters: '\\uA760'\n}, {\n base: 'W',\n letters: '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72'\n}, {\n base: 'X',\n letters: '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C'\n}, {\n base: 'Y',\n letters: '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE'\n}, {\n base: 'Z',\n letters: '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762'\n}, {\n base: 'a',\n letters: '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250'\n}, {\n base: 'aa',\n letters: '\\uA733'\n}, {\n base: 'ae',\n letters: '\\u00E6\\u01FD\\u01E3'\n}, {\n base: 'ao',\n letters: '\\uA735'\n}, {\n base: 'au',\n letters: '\\uA737'\n}, {\n base: 'av',\n letters: '\\uA739\\uA73B'\n}, {\n base: 'ay',\n letters: '\\uA73D'\n}, {\n base: 'b',\n letters: '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253'\n}, {\n base: 'c',\n letters: '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184'\n}, {\n base: 'd',\n letters: '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A'\n}, {\n base: 'dz',\n letters: '\\u01F3\\u01C6'\n}, {\n base: 'e',\n letters: '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD'\n}, {\n base: 'f',\n letters: '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C'\n}, {\n base: 'g',\n letters: '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F'\n}, {\n base: 'h',\n letters: '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265'\n}, {\n base: 'hv',\n letters: '\\u0195'\n}, {\n base: 'i',\n letters: '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131'\n}, {\n base: 'j',\n letters: '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249'\n}, {\n base: 'k',\n letters: '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3'\n}, {\n base: 'l',\n letters: '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747'\n}, {\n base: 'lj',\n letters: '\\u01C9'\n}, {\n base: 'm',\n letters: '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F'\n}, {\n base: 'n',\n letters: '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5'\n}, {\n base: 'nj',\n letters: '\\u01CC'\n}, {\n base: 'o',\n letters: '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275'\n}, {\n base: 'oi',\n letters: '\\u01A3'\n}, {\n base: 'ou',\n letters: '\\u0223'\n}, {\n base: 'oo',\n letters: '\\uA74F'\n}, {\n base: 'p',\n letters: '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755'\n}, {\n base: 'q',\n letters: '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759'\n}, {\n base: 'r',\n letters: '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783'\n}, {\n base: 's',\n letters: '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B'\n}, {\n base: 't',\n letters: '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787'\n}, {\n base: 'tz',\n letters: '\\uA729'\n}, {\n base: 'u',\n letters: '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289'\n}, {\n base: 'v',\n letters: '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C'\n}, {\n base: 'vy',\n letters: '\\uA761'\n}, {\n base: 'w',\n letters: '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73'\n}, {\n base: 'x',\n letters: '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D'\n}, {\n base: 'y',\n letters: '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF'\n}, {\n base: 'z',\n letters: '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763'\n}];\nconst diacriticsMap = {};\nfor (let i = 0; i < defaultDiacriticsRemovalap.length; i += 1) {\n const letters = defaultDiacriticsRemovalap[i].letters;\n for (let j = 0; j < letters.length; j += 1) {\n diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;\n }\n}\nfunction removeDiacritics(str) {\n return str.replace(/[^\\u0000-\\u007E]/g, a => diacriticsMap[a] || a);\n}\nexport default removeDiacritics;", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps, id, nextTick } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport removeDiacritics from '../searchbar/remove-diacritics.js';\n\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass SmartSelect extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const ss = this;\n const defaults = extend({\n on: {}\n }, app.params.smartSelect);\n\n // Extend defaults with modules params\n ss.useModulesParams(defaults);\n ss.params = extend({}, defaults, params);\n ss.app = app;\n const $el = $(ss.params.el).eq(0);\n if ($el.length === 0) return ss;\n if ($el[0].f7SmartSelect) return $el[0].f7SmartSelect;\n const $selectEl = $el.find('select').eq(0);\n if ($selectEl.length === 0) return ss;\n let $valueEl;\n if (ss.params.setValueText) {\n $valueEl = $(ss.params.valueEl);\n if ($valueEl.length === 0) {\n $valueEl = $el.find('.item-after');\n }\n if ($valueEl.length === 0) {\n $valueEl = $('');\n $valueEl.insertAfter($el.find('.item-title'));\n }\n }\n\n // Url\n let url = params.url;\n if (!url) {\n if ($el.attr('href') && $el.attr('href') !== '#') url = $el.attr('href');else if ($selectEl.attr('name')) url = `${$selectEl.attr('name').toLowerCase()}-select/`;\n }\n if (!url) url = ss.params.url;\n const multiple = $selectEl[0].multiple;\n const inputType = multiple ? 'checkbox' : 'radio';\n const selectId = id();\n extend(ss, {\n $el,\n el: $el[0],\n $selectEl,\n selectEl: $selectEl[0],\n $valueEl,\n valueEl: $valueEl && $valueEl[0],\n url,\n multiple,\n inputType,\n id: selectId,\n inputName: `${inputType}-${selectId}`,\n selectName: $selectEl.attr('name'),\n maxLength: $selectEl.attr('maxlength') || params.maxLength\n });\n $el[0].f7SmartSelect = ss;\n\n // Events\n function onClick() {\n ss.open();\n }\n function onChange() {\n const value = ss.$selectEl.val();\n ss.$el.trigger('smartselect:change', value);\n ss.emit('local::change smartSelectChange', ss, value);\n if (ss.vl) {\n ss.vl.clearCache();\n }\n ss.setValueText();\n }\n ss.attachEvents = function attachEvents() {\n $el.on('click', onClick);\n $el.on('change', 'select', onChange);\n };\n ss.detachEvents = function detachEvents() {\n $el.off('click', onClick);\n $el.off('change', 'select', onChange);\n };\n function handleInputChange() {\n let optionEl;\n let text;\n const inputEl = this;\n const value = inputEl.value;\n let optionText = [];\n let displayAs;\n if (inputEl.type === 'checkbox') {\n for (let i = 0; i < ss.selectEl.options.length; i += 1) {\n optionEl = ss.selectEl.options[i];\n if (optionEl.value === value) {\n optionEl.selected = inputEl.checked;\n }\n if (optionEl.selected) {\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-value-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText.push(text.trim());\n }\n }\n if (ss.maxLength) {\n ss.checkMaxLength();\n }\n } else {\n optionEl = ss.$selectEl.find(`option[value=\"${value}\"]`)[0];\n if (!optionEl) {\n optionEl = ss.$selectEl.find('option').filter(optEl => optEl.value === value)[0];\n }\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText = [text];\n ss.selectEl.value = value;\n }\n ss.$selectEl.trigger('change');\n if (ss.params.setValueText) {\n ss.formatValueTextContent(optionText);\n }\n if (ss.params.closeOnSelect && ss.inputType === 'radio') {\n ss.close();\n }\n }\n ss.attachInputsEvents = function attachInputsEvents() {\n ss.$containerEl.on('change', 'input[type=\"checkbox\"], input[type=\"radio\"]', handleInputChange);\n };\n ss.detachInputsEvents = function detachInputsEvents() {\n ss.$containerEl.off('change', 'input[type=\"checkbox\"], input[type=\"radio\"]', handleInputChange);\n };\n\n // Install Modules\n ss.useModules();\n\n // Init\n ss.init();\n return ss;\n }\n setValue(value) {\n const ss = this;\n let newValue = value;\n let optionText = [];\n let optionEl;\n let displayAs;\n let text;\n if (ss.multiple) {\n if (!Array.isArray(newValue)) newValue = [newValue];\n for (let i = 0; i < ss.selectEl.options.length; i += 1) {\n optionEl = ss.selectEl.options[i];\n if (newValue.indexOf(optionEl.value) >= 0) {\n optionEl.selected = true;\n } else {\n optionEl.selected = false;\n }\n if (optionEl.selected) {\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-value-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText.push(text.trim());\n }\n }\n } else {\n optionEl = ss.$selectEl.find(`option[value=\"${newValue}\"]`)[0];\n if (optionEl) {\n displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $(optionEl).data('display-as');\n text = displayAs && typeof displayAs !== 'undefined' ? displayAs : optionEl.textContent;\n optionText = [text];\n }\n ss.selectEl.value = newValue;\n }\n if (ss.params.setValueText) {\n ss.formatValueTextContent(optionText);\n }\n ss.$selectEl.trigger('change');\n return ss;\n }\n unsetValue() {\n const ss = this;\n if (ss.params.setValueText) {\n ss.formatValueTextContent([]);\n }\n ss.$selectEl.find('option').each(optionEl => {\n optionEl.selected = false;\n optionEl.checked = false;\n });\n ss.$selectEl[0].value = null;\n if (ss.$containerEl) {\n ss.$containerEl.find(`input[name=\"${ss.inputName}\"][type=\"checkbox\"], input[name=\"${ss.inputName}\"][type=\"radio\"]`).prop('checked', false);\n }\n ss.$selectEl.trigger('change');\n }\n getValue() {\n const ss = this;\n return ss.$selectEl.val();\n }\n get view() {\n const {\n params,\n $el\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n }\n if (!view) {\n view = $el.parents('.view').length && $el.parents('.view')[0].f7View;\n }\n if (!view && params.openIn === 'page') {\n throw Error('Smart Select requires initialized View');\n }\n return view;\n }\n checkMaxLength() {\n const ss = this;\n const $containerEl = ss.$containerEl;\n if (ss.selectEl.selectedOptions.length >= ss.maxLength) {\n $containerEl.find('input[type=\"checkbox\"]').each(inputEl => {\n if (!inputEl.checked) {\n $(inputEl).parents('li').addClass('disabled');\n } else {\n $(inputEl).parents('li').removeClass('disabled');\n }\n });\n } else {\n $containerEl.find('.disabled').removeClass('disabled');\n }\n }\n formatValueTextContent(values) {\n const ss = this;\n const valueFormatted = ss.formatValueText(values);\n if (valueFormatted.includes('<') && valueFormatted.includes('>')) {\n ss.$valueEl.html(valueFormatted);\n } else {\n ss.$valueEl.text(valueFormatted);\n }\n }\n formatValueText(values) {\n const ss = this;\n let textValue;\n if (ss.params.formatValueText) {\n textValue = ss.params.formatValueText.call(ss, values, ss);\n } else {\n textValue = values.join(', ');\n }\n return textValue;\n }\n setValueText(value) {\n const ss = this;\n let valueArray = [];\n if (typeof value !== 'undefined') {\n if (Array.isArray(value)) {\n valueArray = value;\n } else {\n valueArray = [value];\n }\n } else {\n ss.$selectEl.find('option').each(optionEl => {\n const $optionEl = $(optionEl);\n if (optionEl.selected) {\n const displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $optionEl.data('display-value-as');\n if (displayAs && typeof displayAs !== 'undefined') {\n valueArray.push(displayAs);\n } else {\n valueArray.push(optionEl.textContent.trim());\n }\n }\n });\n }\n if (ss.params.setValueText) {\n ss.formatValueTextContent(valueArray);\n }\n }\n getItemsData() {\n const ss = this;\n const theme = ss.app.theme;\n const items = [];\n let previousGroupEl;\n ss.$selectEl.find('option').each(optionEl => {\n const $optionEl = $(optionEl);\n const optionData = $optionEl.dataset();\n const optionImage = optionData.optionImage || ss.params.optionImage;\n const optionIcon = optionData.optionIcon || ss.params.optionIcon;\n const optionIconIos = theme === 'ios' && (optionData.optionIconIos || ss.params.optionIconIos);\n const optionIconMd = theme === 'md' && (optionData.optionIconMd || ss.params.optionIconMd);\n const optionInputIconPosition = optionData.inputIconPosition || ss.params.inputIconPosition || '';\n const optionHasMedia = optionImage || optionIcon || optionIconIos || optionIconMd;\n const optionColor = optionData.optionColor;\n let optionClassName = optionData.optionClass || '';\n if ($optionEl[0].disabled) optionClassName += ' disabled';\n const optionGroupEl = $optionEl.parent('optgroup')[0];\n const optionGroupLabel = optionGroupEl && optionGroupEl.label;\n let optionIsLabel = false;\n if (optionGroupEl && optionGroupEl !== previousGroupEl) {\n optionIsLabel = true;\n previousGroupEl = optionGroupEl;\n items.push({\n groupLabel: optionGroupLabel,\n isLabel: optionIsLabel\n });\n }\n items.push({\n value: $optionEl[0].value,\n text: $optionEl[0].textContent.trim(),\n selected: $optionEl[0].selected,\n groupEl: optionGroupEl,\n groupLabel: optionGroupLabel,\n image: optionImage,\n icon: optionIcon,\n iconIos: optionIconIos,\n iconMd: optionIconMd,\n inputIconPosition: optionInputIconPosition,\n color: optionColor,\n className: optionClassName,\n disabled: $optionEl[0].disabled,\n id: ss.id,\n hasMedia: optionHasMedia,\n checkbox: ss.inputType === 'checkbox',\n radio: ss.inputType === 'radio',\n inputName: ss.inputName,\n inputType: ss.inputType\n });\n });\n ss.items = items;\n return items;\n }\n renderSearchbar() {\n const ss = this;\n if (ss.params.renderSearchbar) return ss.params.renderSearchbar.call(ss);\n return $jsx(\"form\", {\n class: \"searchbar\"\n }, $jsx(\"div\", {\n class: \"searchbar-inner\"\n }, $jsx(\"div\", {\n class: \"searchbar-input-wrap\"\n }, $jsx(\"input\", {\n type: \"search\",\n spellcheck: ss.params.searchbarSpellcheck || 'false',\n placeholder: ss.params.searchbarPlaceholder\n }), $jsx(\"i\", {\n class: \"searchbar-icon\"\n }), $jsx(\"span\", {\n class: \"input-clear-button\"\n })), ss.params.searchbarDisableButton && $jsx(\"span\", {\n class: \"searchbar-disable-button\"\n }, ss.params.searchbarDisableText)));\n }\n renderItem(item, index) {\n const ss = this;\n if (ss.params.renderItem) return ss.params.renderItem.call(ss, item, index);\n function getIconContent(iconValue) {\n if (iconValue === void 0) {\n iconValue = '';\n }\n if (iconValue.indexOf(':') >= 0) {\n return iconValue.split(':')[1];\n }\n return '';\n }\n function getIconClass(iconValue) {\n if (iconValue === void 0) {\n iconValue = '';\n }\n if (iconValue.indexOf(':') >= 0) {\n let className = iconValue.split(':')[0];\n if (className === 'f7') className = 'f7-icons';\n if (className === 'material') className = 'material-icons';\n return className;\n }\n return iconValue;\n }\n let itemHtml;\n if (item.isLabel) {\n itemHtml = `- ${item.groupLabel}
`;\n } else {\n let selected = item.selected;\n let disabled;\n if (ss.params.virtualList) {\n const ssValue = ss.getValue();\n selected = ss.multiple ? ssValue.indexOf(item.value) >= 0 : ssValue === item.value;\n if (ss.multiple) {\n disabled = ss.multiple && !selected && ssValue.length === parseInt(ss.maxLength, 10);\n }\n }\n const {\n icon,\n iconIos,\n iconMd\n } = item;\n const hasIcon = icon || iconIos || iconMd;\n const iconContent = getIconContent(icon || iconIos || iconMd || '');\n const iconClass = getIconClass(icon || iconIos || iconMd || '');\n itemHtml = $jsx(\"li\", {\n class: `${item.className || ''}${disabled ? ' disabled' : ''}`\n }, $jsx(\"label\", {\n class: `item-${item.inputType} ${item.inputIconPosition ? `item-${item.inputType}-icon-${item.inputIconPosition}` : ''} item-content`\n }, $jsx(\"input\", {\n type: item.inputType,\n name: item.inputName,\n value: item.value,\n _checked: selected\n }), $jsx(\"i\", {\n class: `icon icon-${item.inputType}`\n }), item.hasMedia && $jsx(\"div\", {\n class: \"item-media\"\n }, hasIcon && $jsx(\"i\", {\n class: `icon ${iconClass}`\n }, iconContent), item.image && $jsx(\"img\", {\n src: item.image\n })), $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: `item-title${item.color ? ` text-color-${item.color}` : ''}`\n }, item.text))));\n }\n return itemHtml;\n }\n renderItems() {\n const ss = this;\n if (ss.params.renderItems) return ss.params.renderItems.call(ss, ss.items);\n const itemsHtml = `\n ${ss.items.map((item, index) => `${ss.renderItem(item, index)}`).join('')}\n `;\n return itemsHtml;\n }\n renderPage() {\n const ss = this;\n if (ss.params.renderPage) return ss.params.renderPage.call(ss, ss.items);\n let pageTitle = ss.params.pageTitle;\n if (typeof pageTitle === 'undefined') {\n const $itemTitleEl = ss.$el.find('.item-title');\n pageTitle = $itemTitleEl.length ? $itemTitleEl.text().trim() : '';\n }\n const cssClass = ss.params.cssClass;\n return $jsx(\"div\", {\n class: `page smart-select-page ${cssClass}`,\n \"data-name\": \"smart-select-page\",\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: `navbar ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: `navbar-inner sliding ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"left\"\n }, $jsx(\"a\", {\n class: \"link back\"\n }, $jsx(\"i\", {\n class: \"icon icon-back\"\n }), $jsx(\"span\", {\n class: \"if-not-md\"\n }, ss.params.pageBackLinkText))), pageTitle && $jsx(\"div\", {\n class: \"title\"\n }, pageTitle), ss.params.searchbar && $jsx(\"div\", {\n class: \"subnavbar\"\n }, ss.renderSearchbar()))), ss.params.searchbar && $jsx(\"div\", {\n class: \"searchbar-backdrop\"\n }), $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list list-outline-ios list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items)))));\n }\n renderPopup() {\n const ss = this;\n if (ss.params.renderPopup) return ss.params.renderPopup.call(ss, ss.items);\n let pageTitle = ss.params.pageTitle;\n if (typeof pageTitle === 'undefined') {\n const $itemTitleEl = ss.$el.find('.item-title');\n pageTitle = $itemTitleEl.length ? $itemTitleEl.text().trim() : '';\n }\n const cssClass = ss.params.cssClass || '';\n return $jsx(\"div\", {\n class: `popup smart-select-popup ${cssClass} ${ss.params.popupTabletFullscreen ? 'popup-tablet-fullscreen' : ''}`,\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: \"view\"\n }, $jsx(\"div\", {\n class: `page smart-select-page ${ss.params.searchbar ? 'page-with-subnavbar' : ''}`,\n \"data-name\": \"smart-select-page\"\n }, $jsx(\"div\", {\n class: `navbar ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: \"navbar-inner sliding\"\n }, pageTitle && $jsx(\"div\", {\n class: \"title\"\n }, pageTitle), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": `.smart-select-popup[data-select-name='${ss.selectName}']`\n }, ss.params.popupCloseLinkText)), ss.params.searchbar && $jsx(\"div\", {\n class: \"subnavbar\"\n }, ss.renderSearchbar()))), ss.params.searchbar && $jsx(\"div\", {\n class: \"searchbar-backdrop\"\n }), $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list list-outline-ios list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items)))))));\n }\n renderSheet() {\n const ss = this;\n if (ss.params.renderSheet) return ss.params.renderSheet.call(ss, ss.items);\n const cssClass = ss.params.cssClass;\n // prettier-ignore\n return $jsx(\"div\", {\n class: `sheet-modal smart-select-sheet ${cssClass}`,\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: `toolbar toolbar-top ${ss.params.toolbarColorTheme ? `color-${ss.params.toolbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"div\", {\n class: \"left\"\n }), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link sheet-close\"\n }, ss.params.sheetCloseLinkText)))), $jsx(\"div\", {\n class: \"sheet-modal-inner\"\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items))))));\n }\n renderPopover() {\n const ss = this;\n if (ss.params.renderPopover) return ss.params.renderPopover.call(ss, ss.items);\n const cssClass = ss.params.cssClass;\n // prettier-ignore\n return $jsx(\"div\", {\n class: `popover smart-select-popover ${cssClass}`,\n \"data-select-name\": ss.selectName\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `list list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? ' virtual-list' : ''} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null, !ss.params.virtualList && ss.renderItems(ss.items)))));\n }\n scrollToSelectedItem() {\n const ss = this;\n const {\n params,\n $containerEl\n } = ss;\n if (!ss.opened) return ss;\n if (params.virtualList) {\n let selectedIndex;\n ss.vl.items.forEach((item, index) => {\n if (typeof selectedIndex === 'undefined' && item.selected) {\n selectedIndex = index;\n }\n });\n if (typeof selectedIndex !== 'undefined') {\n ss.vl.scrollToItem(selectedIndex);\n }\n } else {\n const $selectedItemEl = $containerEl.find('input:checked').parents('li');\n if (!$selectedItemEl.length) return ss;\n const $scrollableEl = $containerEl.find('.page-content, .popover-inner');\n if (!$scrollableEl.length) return ss;\n $scrollableEl.scrollTop($selectedItemEl.offset().top - $scrollableEl.offset().top - parseInt($scrollableEl.css('padding-top'), 10));\n }\n return ss;\n }\n onOpen(type, containerEl) {\n const ss = this;\n const app = ss.app;\n const $containerEl = $(containerEl);\n ss.$containerEl = $containerEl;\n ss.openedIn = type;\n ss.opened = true;\n\n // Init VL\n if (ss.params.virtualList) {\n ss.vl = app.virtualList.create({\n el: $containerEl.find('.virtual-list'),\n items: ss.items,\n renderItem: ss.renderItem.bind(ss),\n height: ss.params.virtualListHeight,\n searchByItem(query, item) {\n if (item.text && removeDiacritics(item.text).toLowerCase().indexOf(query.trim().toLowerCase()) >= 0) return true;\n return false;\n }\n });\n }\n if (ss.params.scrollToSelectedItem) {\n ss.scrollToSelectedItem();\n }\n\n // Init SB\n if (ss.params.searchbar) {\n let $searchbarEl = $containerEl.find('.searchbar');\n if (type === 'page' && app.theme === 'ios') {\n $searchbarEl = $(app.navbar.getElByPage($containerEl)).find('.searchbar');\n }\n if (ss.params.appendSearchbarNotFound && (type === 'page' || type === 'popup')) {\n let $notFoundEl = null;\n if (typeof ss.params.appendSearchbarNotFound === 'string') {\n $notFoundEl = $(`${ss.params.appendSearchbarNotFound}
`);\n } else if (typeof ss.params.appendSearchbarNotFound === 'boolean') {\n $notFoundEl = $('Nothing found
');\n } else {\n $notFoundEl = ss.params.appendSearchbarNotFound;\n }\n if ($notFoundEl) {\n $containerEl.find('.page-content').append($notFoundEl[0]);\n }\n }\n const searchbarParams = extend({\n el: $searchbarEl,\n backdropEl: $containerEl.find('.searchbar-backdrop'),\n searchContainer: `.smart-select-list-${ss.id}`,\n searchIn: '.item-title'\n }, typeof ss.params.searchbar === 'object' ? ss.params.searchbar : {});\n ss.searchbar = app.searchbar.create(searchbarParams);\n }\n\n // Check for max length\n if (ss.maxLength) {\n ss.checkMaxLength();\n }\n\n // Close on select\n if (ss.params.closeOnSelect) {\n ss.$containerEl.find(`input[type=\"radio\"][name=\"${ss.inputName}\"]:checked`).parents('label').once('click', () => {\n ss.close();\n });\n }\n\n // Attach input events\n ss.attachInputsEvents();\n ss.$el.trigger('smartselect:open');\n ss.emit('local::open smartSelectOpen', ss);\n }\n onOpened() {\n const ss = this;\n ss.$el.trigger('smartselect:opened');\n ss.emit('local::opened smartSelectOpened', ss);\n }\n onClose() {\n const ss = this;\n if (ss.destroyed) return;\n\n // Destroy VL\n if (ss.vl && ss.vl.destroy) {\n ss.vl.destroy();\n ss.vl = null;\n delete ss.vl;\n }\n\n // Destroy SB\n if (ss.searchbar && ss.searchbar.destroy) {\n ss.searchbar.destroy();\n ss.searchbar = null;\n delete ss.searchbar;\n }\n // Detach events\n ss.detachInputsEvents();\n ss.$el.trigger('smartselect:close');\n ss.emit('local::close smartSelectClose', ss);\n }\n onClosed() {\n const ss = this;\n if (ss.destroyed) return;\n ss.opened = false;\n ss.$containerEl = null;\n delete ss.$containerEl;\n ss.$el.trigger('smartselect:closed');\n ss.emit('local::closed smartSelectClosed', ss);\n }\n openPage() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const pageHtml = ss.renderPage(ss.items);\n ss.view.router.navigate({\n url: ss.url,\n route: {\n content: pageHtml,\n path: ss.url,\n on: {\n pageBeforeIn(e, page) {\n ss.onOpen('page', page.el);\n },\n pageAfterIn(e, page) {\n ss.onOpened('page', page.el);\n },\n pageBeforeOut(e, page) {\n ss.onClose('page', page.el);\n },\n pageAfterOut(e, page) {\n ss.onClosed('page', page.el);\n }\n }\n }\n });\n return ss;\n }\n openPopup() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const popupHtml = ss.renderPopup(ss.items);\n const popupParams = {\n content: popupHtml,\n push: ss.params.popupPush,\n swipeToClose: ss.params.popupSwipeToClose,\n closeByBackdropClick: ss.params.closeByBackdropClick,\n on: {\n popupOpen(popup) {\n ss.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n ss.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n ss.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n ss.onClosed('popup', popup.el);\n }\n }\n };\n if (ss.params.routableModals && ss.view) {\n ss.view.router.navigate({\n url: ss.url,\n route: {\n path: ss.url,\n popup: popupParams\n }\n });\n } else {\n ss.modal = ss.app.popup.create(popupParams).open();\n }\n return ss;\n }\n openSheet() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const sheetHtml = ss.renderSheet(ss.items);\n const sheetParams = {\n content: sheetHtml,\n backdrop: ss.params.sheetBackdrop,\n scrollToEl: ss.$el,\n closeByOutsideClick: true,\n push: ss.params.sheetPush,\n swipeToClose: ss.params.sheetSwipeToClose,\n closeByBackdropClick: ss.params.closeByBackdropClick,\n on: {\n sheetOpen(sheet) {\n ss.onOpen('sheet', sheet.el);\n },\n sheetOpened(sheet) {\n ss.onOpened('sheet', sheet.el);\n },\n sheetClose(sheet) {\n ss.onClose('sheet', sheet.el);\n },\n sheetClosed(sheet) {\n ss.onClosed('sheet', sheet.el);\n }\n }\n };\n if (ss.params.routableModals && ss.view) {\n ss.view.router.navigate({\n url: ss.url,\n route: {\n path: ss.url,\n sheet: sheetParams\n }\n });\n } else {\n ss.modal = ss.app.sheet.create(sheetParams).open();\n }\n return ss;\n }\n openPopover() {\n const ss = this;\n if (ss.opened) return ss;\n ss.getItemsData();\n const popoverHtml = ss.renderPopover(ss.items);\n const popoverParams = {\n content: popoverHtml,\n targetEl: ss.$el,\n closeByBackdropClick: ss.params.closeByBackdropClick,\n on: {\n popoverOpen(popover) {\n ss.onOpen('popover', popover.el);\n },\n popoverOpened(popover) {\n ss.onOpened('popover', popover.el);\n },\n popoverClose(popover) {\n ss.onClose('popover', popover.el);\n },\n popoverClosed(popover) {\n ss.onClosed('popover', popover.el);\n }\n }\n };\n if (ss.params.routableModals && ss.view) {\n ss.view.router.navigate({\n url: ss.url,\n route: {\n path: ss.url,\n popover: popoverParams\n }\n });\n } else {\n ss.modal = ss.app.popover.create(popoverParams).open();\n }\n return ss;\n }\n open(type) {\n const ss = this;\n if (ss.opened) return ss;\n let prevented = false;\n function prevent() {\n prevented = true;\n }\n if (ss.$el) {\n ss.$el.trigger('smartselect:beforeopen', {\n prevent\n });\n }\n ss.emit('local::beforeOpen smartSelectBeforeOpen', ss, prevent);\n if (prevented) return ss;\n const openIn = type || ss.params.openIn;\n ss[`open${openIn.split('').map((el, index) => {\n if (index === 0) return el.toUpperCase();\n return el;\n }).join('')}`]();\n return ss;\n }\n close() {\n const ss = this;\n if (!ss.opened) return ss;\n if (ss.params.routableModals && ss.view || ss.openedIn === 'page') {\n ss.view.router.back();\n } else {\n ss.modal.once('modalClosed', () => {\n nextTick(() => {\n if (ss.destroyed) return;\n ss.modal.destroy();\n delete ss.modal;\n });\n });\n ss.modal.close();\n }\n return ss;\n }\n init() {\n const ss = this;\n ss.attachEvents();\n ss.setValueText();\n }\n destroy() {\n const ss = this;\n ss.emit('local::beforeDestroy smartSelectBeforeDestroy', ss);\n ss.$el.trigger('smartselect:beforedestroy');\n ss.detachEvents();\n delete ss.$el[0].f7SmartSelect;\n deleteProps(ss);\n ss.destroyed = true;\n }\n}\nexport default SmartSelect;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport SmartSelect from './smart-select-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'smartSelect',\n params: {\n smartSelect: {\n el: undefined,\n valueEl: undefined,\n setValueText: true,\n formatValueText: null,\n openIn: 'page',\n // or 'popup' or 'sheet' or 'popover'\n popupPush: false,\n popupSwipeToClose: undefined,\n // defaults to app\n sheetPush: false,\n sheetSwipeToClose: undefined,\n // defaults to app\n sheetBackdrop: false,\n pageTitle: undefined,\n pageBackLinkText: 'Back',\n popupCloseLinkText: 'Close',\n popupTabletFullscreen: false,\n closeByBackdropClick: true,\n sheetCloseLinkText: 'Done',\n searchbar: false,\n searchbarPlaceholder: 'Search',\n searchbarDisableText: 'Cancel',\n searchbarDisableButton: true,\n searchbarSpellcheck: false,\n closeOnSelect: false,\n virtualList: false,\n virtualListHeight: undefined,\n scrollToSelectedItem: false,\n formColorTheme: undefined,\n navbarColorTheme: undefined,\n routableModals: false,\n url: 'select/',\n inputIconPosition: 'start',\n cssClass: '',\n /*\n Custom render functions\n */\n renderPage: undefined,\n renderPopup: undefined,\n renderSheet: undefined,\n renderPopover: undefined,\n renderItems: undefined,\n renderItem: undefined,\n renderSearchbar: undefined\n }\n },\n static: {\n SmartSelect\n },\n create() {\n const app = this;\n app.smartSelect = extend(ConstructorMethods({\n defaultSelector: '.smart-select',\n constructor: SmartSelect,\n app,\n domProp: 'f7SmartSelect'\n }), {\n open(smartSelectEl) {\n const ss = app.smartSelect.get(smartSelectEl);\n if (ss && ss.open) return ss.open();\n return undefined;\n },\n close(smartSelectEl) {\n const ss = app.smartSelect.get(smartSelectEl);\n if (ss && ss.close) return ss.close();\n return undefined;\n }\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.smart-select-init').each(smartSelectEl => {\n app.smartSelect.create(extend({\n el: smartSelectEl\n }, $(smartSelectEl).dataset()));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.smart-select-init').each(smartSelectEl => {\n if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {\n smartSelectEl.f7SmartSelect.destroy();\n }\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.smart-select-init').each(smartSelectEl => {\n app.smartSelect.create(extend({\n el: smartSelectEl\n }, $(smartSelectEl).dataset()));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.smart-select-init').each(smartSelectEl => {\n if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {\n smartSelectEl.f7SmartSelect.destroy();\n }\n });\n }\n },\n clicks: {\n '.smart-select': function open($clickedEl, data) {\n const app = this;\n if (!$clickedEl[0].f7SmartSelect) {\n const ss = app.smartSelect.create(extend({\n el: $clickedEl\n }, data));\n ss.open();\n }\n }\n },\n vnode: {\n 'smart-select-init': {\n insert(vnode) {\n const app = this;\n const smartSelectEl = vnode.elm;\n app.smartSelect.create(extend({\n el: smartSelectEl\n }, $(smartSelectEl).dataset()));\n },\n destroy(vnode) {\n const smartSelectEl = vnode.elm;\n if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {\n smartSelectEl.f7SmartSelect.destroy();\n }\n }\n }\n }\n};", "export default {\n name: 'grid'\n};", "import { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport $ from '../../shared/dom7.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport { getSupport } from '../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Calendar extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const calendar = this;\n calendar.params = extend({}, app.params.calendar, params);\n let $containerEl;\n if (calendar.params.containerEl) {\n $containerEl = $(calendar.params.containerEl);\n if ($containerEl.length === 0) return calendar;\n }\n let $inputEl;\n if (calendar.params.inputEl) {\n $inputEl = $(calendar.params.inputEl);\n }\n const isHorizontal = calendar.params.direction === 'horizontal';\n let inverter = 1;\n if (isHorizontal) {\n inverter = app.rtl ? -1 : 1;\n }\n extend(calendar, {\n app,\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n inline: $containerEl && $containerEl.length > 0,\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n initialized: false,\n opened: false,\n url: calendar.params.url,\n isHorizontal,\n inverter,\n animating: false,\n allowTouchMove: true,\n hasTimePicker: calendar.params.timePicker && !calendar.params.rangePicker && !calendar.params.multiple\n });\n calendar.dayFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, {\n day: 'numeric'\n });\n return formatter.format(date).replace(/\u65E5/, '');\n };\n calendar.monthFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, {\n month: 'long'\n });\n return formatter.format(date);\n };\n calendar.yearFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, {\n year: 'numeric'\n });\n return formatter.format(date);\n };\n calendar.timeSelectorFormatter = date => {\n const formatter = new Intl.DateTimeFormat(calendar.params.locale, calendar.params.timePickerFormat);\n return formatter.format(date);\n };\n const timeFormatCheckDate = calendar.timeSelectorFormatter(new Date()).toLowerCase();\n calendar.is12HoursFormat = timeFormatCheckDate.indexOf('pm') >= 0 || timeFormatCheckDate.indexOf('am') >= 0;\n\n // Auto names\n let {\n monthNames,\n monthNamesShort,\n dayNames,\n dayNamesShort\n } = calendar.params;\n const {\n monthNamesIntl,\n monthNamesShortIntl,\n dayNamesIntl,\n dayNamesShortIntl\n } = calendar.getIntlNames();\n if (monthNames === 'auto') monthNames = monthNamesIntl;\n if (monthNamesShort === 'auto') monthNamesShort = monthNamesShortIntl;\n if (dayNames === 'auto') dayNames = dayNamesIntl;\n if (dayNamesShort === 'auto') dayNamesShort = dayNamesShortIntl;\n extend(calendar, {\n monthNames,\n monthNamesShort,\n dayNames,\n dayNamesShort\n });\n function onInputClick() {\n calendar.open();\n }\n function onInputFocus(e) {\n e.preventDefault();\n }\n function onInputClear() {\n calendar.setValue([]);\n if (calendar.opened) {\n calendar.update();\n }\n }\n function onHtmlClick(e) {\n const $targetEl = $(e.target);\n if (calendar.destroyed || !calendar.params) return;\n if (calendar.isPopover()) return;\n if (!calendar.opened || calendar.closing) return;\n if ($targetEl.closest('[class*=\"backdrop\"]').length) return;\n if (calendar.monthPickerPopover || calendar.yearPickerPopover || calendar.timePickerPopover) return;\n if ($inputEl && $inputEl.length > 0) {\n if ($targetEl[0] !== $inputEl[0] && $targetEl.closest('.sheet-modal, .calendar-modal').length === 0) {\n calendar.close();\n }\n } else if ($(e.target).closest('.sheet-modal, .calendar-modal').length === 0) {\n calendar.close();\n }\n }\n\n // Events\n extend(calendar, {\n attachInputEvents() {\n calendar.$inputEl.on('click', onInputClick);\n calendar.$inputEl.on('input:clear', onInputClear);\n if (calendar.params.inputReadOnly) {\n calendar.$inputEl.on('focus mousedown', onInputFocus);\n if (calendar.$inputEl[0]) {\n calendar.$inputEl[0].f7ValidateReadonly = true;\n }\n }\n },\n detachInputEvents() {\n calendar.$inputEl.off('click', onInputClick);\n calendar.$inputEl.off('input:clear', onInputClear);\n if (calendar.params.inputReadOnly) {\n calendar.$inputEl.off('focus mousedown', onInputFocus);\n if (calendar.$inputEl[0]) {\n delete calendar.$inputEl[0].f7ValidateReadonly;\n }\n }\n },\n attachHtmlEvents() {\n app.on('click', onHtmlClick);\n },\n detachHtmlEvents() {\n app.off('click', onHtmlClick);\n }\n });\n calendar.attachCalendarEvents = function attachCalendarEvents() {\n let allowItemClick = true;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let touchStartTime;\n let touchEndTime;\n let currentTranslate;\n let wrapperWidth;\n let wrapperHeight;\n let percentage;\n let touchesDiff;\n let isScrolling;\n const {\n $el,\n $wrapperEl\n } = calendar;\n function handleTouchStart(e) {\n if (isMoved || isTouched || !e.isTrusted) return;\n isTouched = true;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n touchStartTime = new Date().getTime();\n percentage = 0;\n allowItemClick = true;\n isScrolling = undefined;\n currentTranslate = calendar.monthsTranslate;\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n const {\n isHorizontal: isH\n } = calendar;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX));\n }\n if (isH && isScrolling || !calendar.allowTouchMove) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n if (calendar.animating) {\n isTouched = false;\n return;\n }\n allowItemClick = false;\n if (!isMoved) {\n // First move\n isMoved = true;\n wrapperWidth = $wrapperEl[0].offsetWidth;\n wrapperHeight = $wrapperEl[0].offsetHeight;\n $wrapperEl.transition(0);\n }\n touchesDiff = isH ? touchCurrentX - touchStartX : touchCurrentY - touchStartY;\n percentage = touchesDiff / (isH ? wrapperWidth : wrapperHeight);\n currentTranslate = (calendar.monthsTranslate * calendar.inverter + percentage) * 100;\n\n // Transform wrapper\n $wrapperEl.transform(`translate3d(${isH ? currentTranslate : 0}%, ${isH ? 0 : currentTranslate}%, 0)`);\n }\n function handleTouchEnd(e) {\n if (!isTouched || !isMoved || !e.isTrusted) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n touchEndTime = new Date().getTime();\n if (touchEndTime - touchStartTime < 300) {\n if (Math.abs(touchesDiff) < 10) {\n calendar.resetMonth();\n } else if (touchesDiff >= 10) {\n if (app.rtl) calendar.nextMonth();else calendar.prevMonth();\n } else if (app.rtl) calendar.prevMonth();else calendar.nextMonth();\n } else if (percentage <= -0.5) {\n if (app.rtl) calendar.prevMonth();else calendar.nextMonth();\n } else if (percentage >= 0.5) {\n if (app.rtl) calendar.nextMonth();else calendar.prevMonth();\n } else {\n calendar.resetMonth();\n }\n\n // Allow click\n setTimeout(() => {\n allowItemClick = true;\n }, 100);\n }\n function handleDayClick(e) {\n if (!allowItemClick) return;\n let $dayEl = $(e.target).parents('.calendar-day');\n if ($dayEl.length === 0 && $(e.target).hasClass('calendar-day')) {\n $dayEl = $(e.target);\n }\n if ($dayEl.length === 0) return;\n if ($dayEl.hasClass('calendar-day-disabled')) return;\n if (!calendar.params.rangePicker) {\n if ($dayEl.hasClass('calendar-day-next')) calendar.nextMonth();\n if ($dayEl.hasClass('calendar-day-prev')) calendar.prevMonth();\n }\n const dateYear = parseInt($dayEl.attr('data-year'), 10);\n const dateMonth = parseInt($dayEl.attr('data-month'), 10);\n const dateDay = parseInt($dayEl.attr('data-day'), 10);\n calendar.emit('local::dayClick calendarDayClick', calendar, $dayEl[0], dateYear, dateMonth, dateDay);\n if (!$dayEl.hasClass('calendar-day-selected') || calendar.params.multiple || calendar.params.rangePicker) {\n const valueToAdd = new Date(dateYear, dateMonth, dateDay, 0, 0, 0);\n if (calendar.hasTimePicker) {\n if (calendar.value && calendar.value[0]) {\n valueToAdd.setHours(calendar.value[0].getHours(), calendar.value[0].getMinutes());\n } else {\n valueToAdd.setHours(new Date().getHours(), new Date().getMinutes());\n }\n }\n calendar.addValue(valueToAdd);\n }\n if (calendar.params.closeOnSelect) {\n if (calendar.params.rangePicker && calendar.value.length === 2 || !calendar.params.rangePicker) {\n calendar.close();\n }\n }\n }\n function onNextMonthClick() {\n calendar.nextMonth();\n }\n function onPrevMonthClick() {\n calendar.prevMonth();\n }\n function onNextYearClick() {\n calendar.nextYear();\n }\n function onPrevYearClick() {\n calendar.prevYear();\n }\n function onMonthSelectorClick() {\n calendar.openMonthPicker();\n }\n function onYearSelectorClick() {\n calendar.openYearPicker();\n }\n function onTimeSelectorClick() {\n calendar.openTimePicker();\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n // Selectors clicks\n $el.find('.calendar-prev-month-button').on('click', onPrevMonthClick);\n $el.find('.calendar-next-month-button').on('click', onNextMonthClick);\n $el.find('.calendar-prev-year-button').on('click', onPrevYearClick);\n $el.find('.calendar-next-year-button').on('click', onNextYearClick);\n if (calendar.params.monthPicker) {\n $el.find('.current-month-value').on('click', onMonthSelectorClick);\n }\n if (calendar.params.yearPicker) {\n $el.find('.current-year-value').on('click', onYearSelectorClick);\n }\n if (calendar.hasTimePicker) {\n $el.find('.calendar-time-selector a').on('click', onTimeSelectorClick);\n }\n // Day clicks\n $wrapperEl.on('click', handleDayClick);\n // Touch events\n if (calendar.params.touchMove) {\n $wrapperEl.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n }\n calendar.detachCalendarEvents = function detachCalendarEvents() {\n $el.find('.calendar-prev-month-button').off('click', onPrevMonthClick);\n $el.find('.calendar-next-month-button').off('click', onNextMonthClick);\n $el.find('.calendar-prev-year-button').off('click', onPrevYearClick);\n $el.find('.calendar-next-year-button').off('click', onNextYearClick);\n if (calendar.params.monthPicker) {\n $el.find('.current-month-value').off('click', onMonthSelectorClick);\n }\n if (calendar.params.yearPicker) {\n $el.find('.current-year-value').off('click', onYearSelectorClick);\n }\n if (calendar.hasTimePicker) {\n $el.find('.calendar-time-selector a').off('click', onTimeSelectorClick);\n }\n $wrapperEl.off('click', handleDayClick);\n if (calendar.params.touchMove) {\n $wrapperEl.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n }\n };\n };\n calendar.init();\n return calendar;\n }\n get view() {\n const {\n $inputEl,\n app,\n params\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n } else if ($inputEl) {\n view = $inputEl.parents('.view').length && $inputEl.parents('.view')[0].f7View;\n }\n if (!view) view = app.views.main;\n return view;\n }\n getIntlNames() {\n const calendar = this;\n const locale = calendar.params.locale;\n const monthNamesIntl = [];\n const monthNamesShortIntl = [];\n const dayNamesIntl = [];\n const dayNamesShortIntl = [];\n const formatterMonthNames = new Intl.DateTimeFormat(locale, {\n month: 'long'\n });\n const formatterMonthNamesShort = new Intl.DateTimeFormat(locale, {\n month: 'short'\n });\n const formatterDayNames = new Intl.DateTimeFormat(locale, {\n weekday: 'long'\n });\n const formatterDayNamesShort = new Intl.DateTimeFormat(locale, {\n weekday: 'short'\n });\n let year;\n let yearStarted;\n let yearEnded;\n for (let i = 0; i < 24; i += 1) {\n const date = new Date().setMonth(i, 1);\n const currentYear = calendar.yearFormatter(date);\n if (year && currentYear !== year) {\n if (yearStarted) yearEnded = true;\n yearStarted = true;\n year = currentYear;\n }\n if (!year) {\n year = currentYear;\n }\n if (yearStarted && year === currentYear && !yearEnded) {\n monthNamesIntl.push(formatterMonthNames.format(date));\n monthNamesShortIntl.push(formatterMonthNamesShort.format(date));\n }\n }\n const weekDay = new Date().getDay();\n for (let i = 0; i < 7; i += 1) {\n const date = new Date().getTime() + (i - weekDay) * 24 * 60 * 60 * 1000;\n dayNamesIntl.push(formatterDayNames.format(date));\n dayNamesShortIntl.push(formatterDayNamesShort.format(date));\n }\n return {\n monthNamesIntl,\n monthNamesShortIntl,\n dayNamesIntl,\n dayNamesShortIntl\n };\n }\n normalizeDate(date) {\n const calendar = this;\n const d = new Date(date);\n if (calendar.hasTimePicker) {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());\n }\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n normalizeValues(values) {\n const calendar = this;\n let newValues = [];\n if (values && Array.isArray(values)) {\n newValues = values.map(val => calendar.normalizeDate(val));\n }\n return newValues;\n }\n initInput() {\n const calendar = this;\n if (!calendar.$inputEl) return;\n if (calendar.params.inputReadOnly) calendar.$inputEl.prop('readOnly', true);\n }\n isPopover() {\n const calendar = this;\n const {\n app,\n modal,\n params\n } = calendar;\n const device = getDevice();\n if (params.openIn === 'sheet') return false;\n if (modal && modal.type !== 'popover') return false;\n if (!calendar.inline && calendar.inputEl) {\n if (params.openIn === 'popover') return true;\n if (device.ios) {\n return !!device.ipad;\n }\n if (app.width >= 768) {\n return true;\n }\n }\n return false;\n }\n formatDate(d) {\n const calendar = this;\n const date = new Date(d);\n const year = date.getFullYear();\n const month = date.getMonth();\n const month1 = month + 1;\n const day = date.getDate();\n const weekDay = date.getDay();\n const {\n monthNames,\n monthNamesShort,\n dayNames,\n dayNamesShort\n } = calendar;\n const {\n dateFormat,\n locale\n } = calendar.params;\n function twoDigits(number) {\n return number < 10 ? `0${number}` : number;\n }\n if (typeof dateFormat === 'string') {\n const tokens = {\n yyyy: year,\n yy: String(year).substring(2),\n mm: twoDigits(month1),\n m: month1,\n MM: monthNames[month],\n M: monthNamesShort[month],\n dd: twoDigits(day),\n d: day,\n DD: dayNames[weekDay],\n D: dayNamesShort[weekDay]\n };\n if (calendar.params.timePicker) {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n let hours12 = hours;\n if (hours > 12) hours12 = hours - 12;\n if (hours === 0) hours12 = 12;\n const a = hours >= 12 && hours !== 0 ? 'pm' : 'am';\n Object.assign(tokens, {\n HH: twoDigits(hours),\n H: hours,\n hh: twoDigits(hours12),\n h: hours12,\n ss: twoDigits(seconds),\n s: seconds,\n ':mm': twoDigits(minutes),\n ':m': minutes,\n a,\n A: a.toUpperCase()\n });\n }\n const regexp = new RegExp(Object.keys(tokens).map(t => `(${t})`).join('|'), 'g');\n return dateFormat.replace(regexp, token => {\n if (token in tokens) return tokens[token];\n return token;\n });\n }\n if (typeof dateFormat === 'function') {\n return dateFormat(date);\n }\n // Intl Object\n const formatter = new Intl.DateTimeFormat(locale, dateFormat);\n return formatter.format(date);\n }\n formatValue() {\n const calendar = this;\n const {\n value\n } = calendar;\n if (calendar.params.formatValue) {\n return calendar.params.formatValue.call(calendar, value);\n }\n return value.map(v => calendar.formatDate(v)).join(calendar.params.rangePicker ? ' - ' : ', ');\n }\n addValue(newValue) {\n const calendar = this;\n const {\n multiple,\n rangePicker,\n rangePickerMinDays,\n rangePickerMaxDays\n } = calendar.params;\n if (multiple) {\n if (!calendar.value) calendar.value = [];\n let inValuesIndex;\n for (let i = 0; i < calendar.value.length; i += 1) {\n if (new Date(newValue).getTime() === new Date(calendar.value[i]).getTime()) {\n inValuesIndex = i;\n }\n }\n if (typeof inValuesIndex === 'undefined') {\n calendar.value.push(newValue);\n } else {\n calendar.value.splice(inValuesIndex, 1);\n }\n calendar.updateValue();\n } else if (rangePicker) {\n if (!calendar.value) calendar.value = [];\n if (calendar.value.length === 2 || calendar.value.length === 0) {\n calendar.value = [];\n }\n if (calendar.value.length === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) >= (rangePickerMinDays - 1) * 60 * 60 * 24 * 1000 && (rangePickerMaxDays === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) <= (rangePickerMaxDays - 1) * 60 * 60 * 24 * 1000)) calendar.value.push(newValue);else calendar.value = [];\n calendar.value.sort((a, b) => a - b);\n calendar.updateValue();\n } else {\n calendar.value = [newValue];\n calendar.updateValue();\n }\n }\n setValue(values) {\n const calendar = this;\n const currentValue = calendar.value;\n if (Array.isArray(currentValue) && Array.isArray(values) && currentValue.length === values.length) {\n let equal = true;\n currentValue.forEach((v, index) => {\n if (v !== values[index]) equal = false;\n });\n if (equal) return;\n }\n calendar.value = values;\n calendar.updateValue();\n }\n getValue() {\n const calendar = this;\n return calendar.value;\n }\n updateValue(onlyHeader) {\n const calendar = this;\n const {\n $el,\n $wrapperEl,\n $inputEl,\n value,\n params\n } = calendar;\n let i;\n if ($el && $el.length > 0) {\n $wrapperEl.find('.calendar-day-selected').removeClass('calendar-day-selected calendar-day-selected-range calendar-day-selected-left calendar-day-selected-right');\n let valueDate;\n if (params.rangePicker && value.length === 2) {\n const leftDate = new Date(value[0]).getTime();\n const rightDate = new Date(value[1]).getTime();\n for (i = leftDate; i <= rightDate; i += 24 * 60 * 60 * 1000) {\n valueDate = new Date(i);\n let addClass = 'calendar-day-selected';\n if (leftDate !== rightDate) {\n if (i !== leftDate && i !== rightDate) {\n addClass += ' calendar-day-selected-range';\n }\n if (i === leftDate) {\n addClass += ' calendar-day-selected-left';\n }\n if (i === rightDate) {\n addClass += ' calendar-day-selected-right';\n }\n }\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).addClass(addClass);\n }\n valueDate = new Date(leftDate);\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).removeClass('calendar-day-selected-range').addClass('calendar-day-selected calendar-day-selected-left');\n valueDate = new Date(rightDate);\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).removeClass('calendar-day-selected-range').addClass('calendar-day-selected calendar-day-selected-right');\n } else {\n for (i = 0; i < calendar.value.length; i += 1) {\n valueDate = new Date(value[i]);\n $wrapperEl.find(`.calendar-day[data-date=\"${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}\"]`).addClass('calendar-day-selected');\n }\n }\n }\n if (!onlyHeader) {\n calendar.emit('local::change calendarChange', calendar, value);\n }\n if ($el && $el.length > 0 && calendar.hasTimePicker) {\n $el.find('.calendar-time-selector a').text(value && value.length ? calendar.timeSelectorFormatter(value[0]) : calendar.params.timePickerPlaceholder);\n }\n if ($inputEl && $inputEl.length || params.header) {\n const inputValue = calendar.formatValue(value);\n if (params.header && $el && $el.length) {\n $el.find('.calendar-selected-date').text(inputValue);\n }\n if ($inputEl && $inputEl.length && !onlyHeader) {\n $inputEl.val(inputValue);\n $inputEl.trigger('change');\n }\n }\n }\n updateCurrentMonthYear(dir) {\n const calendar = this;\n const {\n $months,\n $el,\n monthNames\n } = calendar;\n let currentLocaleMonth;\n let currentLocaleYear;\n if (typeof dir === 'undefined') {\n calendar.currentMonth = parseInt($months.eq(1).attr('data-month'), 10);\n calendar.currentYear = parseInt($months.eq(1).attr('data-year'), 10);\n currentLocaleMonth = $months.eq(1).attr('data-locale-month');\n currentLocaleYear = $months.eq(1).attr('data-locale-year');\n } else {\n calendar.currentMonth = parseInt($months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-month'), 10);\n calendar.currentYear = parseInt($months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-year'), 10);\n currentLocaleMonth = $months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-locale-month');\n currentLocaleYear = $months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-locale-year');\n }\n $el.find('.current-month-value').text(monthNames[currentLocaleMonth]);\n $el.find('.current-year-value').text(currentLocaleYear);\n }\n update() {\n const calendar = this;\n const {\n currentYear,\n currentMonth,\n $wrapperEl\n } = calendar;\n const currentDate = new Date(currentYear, currentMonth);\n const prevMonthHtml = calendar.renderMonth(currentDate, 'prev');\n const currentMonthHtml = calendar.renderMonth(currentDate);\n const nextMonthHtml = calendar.renderMonth(currentDate, 'next');\n $wrapperEl.transition(0).html(`${prevMonthHtml}${currentMonthHtml}${nextMonthHtml}`).transform('translate3d(0,0,0)');\n calendar.$months = $wrapperEl.find('.calendar-month');\n calendar.monthsTranslate = 0;\n calendar.setMonthsTranslate();\n calendar.$months.each(monthEl => {\n calendar.emit('local::monthAdd calendarMonthAdd', monthEl);\n });\n }\n onMonthChangeStart(dir) {\n const calendar = this;\n const {\n $months,\n currentYear,\n currentMonth\n } = calendar;\n calendar.updateCurrentMonthYear(dir);\n $months.removeClass('calendar-month-current calendar-month-prev calendar-month-next');\n const currentIndex = dir === 'next' ? $months.length - 1 : 0;\n $months.eq(currentIndex).addClass('calendar-month-current');\n $months.eq(dir === 'next' ? currentIndex - 1 : currentIndex + 1).addClass(dir === 'next' ? 'calendar-month-prev' : 'calendar-month-next');\n calendar.emit('local::monthYearChangeStart calendarMonthYearChangeStart', calendar, currentYear, currentMonth);\n }\n onMonthChangeEnd(dir, rebuildBoth) {\n const calendar = this;\n const {\n currentYear,\n currentMonth,\n $wrapperEl,\n monthsTranslate\n } = calendar;\n calendar.animating = false;\n let nextMonthHtml;\n let prevMonthHtml;\n let currentMonthHtml;\n $wrapperEl.find('.calendar-month:not(.calendar-month-prev):not(.calendar-month-current):not(.calendar-month-next)').remove();\n if (typeof dir === 'undefined') {\n dir = 'next'; // eslint-disable-line\n rebuildBoth = true; // eslint-disable-line\n }\n\n if (!rebuildBoth) {\n currentMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), dir);\n } else {\n $wrapperEl.find('.calendar-month-next, .calendar-month-prev').remove();\n prevMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), 'prev');\n nextMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), 'next');\n }\n if (dir === 'next' || rebuildBoth) {\n $wrapperEl.append(currentMonthHtml || nextMonthHtml);\n }\n if (dir === 'prev' || rebuildBoth) {\n $wrapperEl.prepend(currentMonthHtml || prevMonthHtml);\n }\n const $months = $wrapperEl.find('.calendar-month');\n calendar.$months = $months;\n calendar.setMonthsTranslate(monthsTranslate);\n calendar.emit('local::monthAdd calendarMonthAdd', calendar, dir === 'next' ? $months.eq($months.length - 1)[0] : $months.eq(0)[0]);\n calendar.emit('local::monthYearChangeEnd calendarMonthYearChangeEnd', calendar, currentYear, currentMonth);\n }\n setMonthsTranslate(translate) {\n const calendar = this;\n const {\n $months,\n isHorizontal: isH,\n inverter\n } = calendar;\n // eslint-disable-next-line\n translate = translate || calendar.monthsTranslate || 0;\n if (typeof calendar.monthsTranslate === 'undefined') {\n calendar.monthsTranslate = translate;\n }\n $months.removeClass('calendar-month-current calendar-month-prev calendar-month-next');\n const prevMonthTranslate = -(translate + 1) * 100 * inverter;\n const currentMonthTranslate = -translate * 100 * inverter;\n const nextMonthTranslate = -(translate - 1) * 100 * inverter;\n $months.eq(0).transform(`translate3d(${isH ? prevMonthTranslate : 0}%, ${isH ? 0 : prevMonthTranslate}%, 0)`).addClass('calendar-month-prev');\n $months.eq(1).transform(`translate3d(${isH ? currentMonthTranslate : 0}%, ${isH ? 0 : currentMonthTranslate}%, 0)`).addClass('calendar-month-current');\n $months.eq(2).transform(`translate3d(${isH ? nextMonthTranslate : 0}%, ${isH ? 0 : nextMonthTranslate}%, 0)`).addClass('calendar-month-next');\n }\n nextMonth(transition) {\n const calendar = this;\n const {\n params,\n $wrapperEl,\n inverter,\n isHorizontal: isH\n } = calendar;\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n transition = ''; // eslint-disable-line\n if (!params.animate) transition = 0; // eslint-disable-line\n }\n\n const nextMonth = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr('data-month'), 10);\n const nextYear = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr('data-year'), 10);\n const nextDate = new Date(nextYear, nextMonth);\n const nextDateTime = nextDate.getTime();\n const transitionEndCallback = !calendar.animating;\n if (params.maxDate) {\n if (nextDateTime > new Date(params.maxDate).getTime()) {\n calendar.resetMonth();\n return;\n }\n }\n calendar.monthsTranslate -= 1;\n if (nextMonth === calendar.currentMonth) {\n const nextMonthTranslate = -calendar.monthsTranslate * 100 * inverter;\n const nextMonthHtml = $(calendar.renderMonth(nextDateTime, 'next')).transform(`translate3d(${isH ? nextMonthTranslate : 0}%, ${isH ? 0 : nextMonthTranslate}%, 0)`).addClass('calendar-month-next');\n $wrapperEl.append(nextMonthHtml[0]);\n calendar.$months = $wrapperEl.find('.calendar-month');\n calendar.emit('local::monthAdd calendarMonthAdd', calendar.$months.eq(calendar.$months.length - 1)[0]);\n }\n calendar.animating = true;\n calendar.onMonthChangeStart('next');\n const translate = calendar.monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? translate : 0}%, ${isH ? 0 : translate}%, 0)`);\n if (transitionEndCallback) {\n $wrapperEl.transitionEnd(() => {\n calendar.onMonthChangeEnd('next');\n });\n }\n if (!params.animate) {\n calendar.onMonthChangeEnd('next');\n }\n }\n prevMonth(transition) {\n const calendar = this;\n const {\n params,\n $wrapperEl,\n inverter,\n isHorizontal: isH\n } = calendar;\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n transition = ''; // eslint-disable-line\n if (!params.animate) transition = 0; // eslint-disable-line\n }\n\n const prevMonth = parseInt(calendar.$months.eq(0).attr('data-month'), 10);\n const prevYear = parseInt(calendar.$months.eq(0).attr('data-year'), 10);\n const prevDate = new Date(prevYear, prevMonth + 1, -1);\n const prevDateTime = prevDate.getTime();\n const transitionEndCallback = !calendar.animating;\n if (params.minDate) {\n let minDate = new Date(params.minDate);\n minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);\n if (prevDateTime < minDate.getTime()) {\n calendar.resetMonth();\n return;\n }\n }\n calendar.monthsTranslate += 1;\n if (prevMonth === calendar.currentMonth) {\n const prevMonthTranslate = -calendar.monthsTranslate * 100 * inverter;\n const prevMonthHtml = $(calendar.renderMonth(prevDateTime, 'prev')).transform(`translate3d(${isH ? prevMonthTranslate : 0}%, ${isH ? 0 : prevMonthTranslate}%, 0)`).addClass('calendar-month-prev');\n $wrapperEl.prepend(prevMonthHtml[0]);\n calendar.$months = $wrapperEl.find('.calendar-month');\n calendar.emit('local::monthAdd calendarMonthAdd', calendar.$months.eq(0)[0]);\n }\n calendar.animating = true;\n calendar.onMonthChangeStart('prev');\n const translate = calendar.monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? translate : 0}%, ${isH ? 0 : translate}%, 0)`);\n if (transitionEndCallback) {\n $wrapperEl.transitionEnd(() => {\n calendar.onMonthChangeEnd('prev');\n });\n }\n if (!params.animate) {\n calendar.onMonthChangeEnd('prev');\n }\n }\n resetMonth(transition) {\n if (transition === void 0) {\n transition = '';\n }\n const calendar = this;\n const {\n $wrapperEl,\n inverter,\n isHorizontal: isH,\n monthsTranslate\n } = calendar;\n const translate = monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? translate : 0}%, ${isH ? 0 : translate}%, 0)`);\n }\n // eslint-disable-next-line\n setYearMonth(year, month, transition) {\n const calendar = this;\n const {\n params,\n isHorizontal: isH,\n $wrapperEl,\n inverter\n } = calendar;\n // eslint-disable-next-line\n if (typeof year === 'undefined') year = calendar.currentYear;\n // eslint-disable-next-line\n if (typeof month === 'undefined') month = calendar.currentMonth;\n if (typeof transition === 'undefined' || typeof transition === 'object') {\n // eslint-disable-next-line\n transition = '';\n // eslint-disable-next-line\n if (!params.animate) transition = 0;\n }\n let targetDate;\n if (year < calendar.currentYear) {\n targetDate = new Date(year, month + 1, -1).getTime();\n } else {\n targetDate = new Date(year, month).getTime();\n }\n if (params.maxDate && targetDate > new Date(params.maxDate).getTime()) {\n return false;\n }\n if (params.minDate) {\n let minDate = new Date(params.minDate);\n minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);\n if (targetDate < minDate.getTime()) {\n return false;\n }\n }\n const currentDate = new Date(calendar.currentYear, calendar.currentMonth).getTime();\n const dir = targetDate > currentDate ? 'next' : 'prev';\n const newMonthHTML = calendar.renderMonth(new Date(year, month));\n calendar.monthsTranslate = calendar.monthsTranslate || 0;\n const prevTranslate = calendar.monthsTranslate;\n let monthTranslate;\n const transitionEndCallback = !calendar.animating && transition !== 0;\n if (targetDate > currentDate) {\n // To next\n calendar.monthsTranslate -= 1;\n if (!calendar.animating) calendar.$months.eq(calendar.$months.length - 1).remove();\n $wrapperEl.append(newMonthHTML);\n calendar.$months = $wrapperEl.find('.calendar-month');\n monthTranslate = -(prevTranslate - 1) * 100 * inverter;\n calendar.$months.eq(calendar.$months.length - 1).transform(`translate3d(${isH ? monthTranslate : 0}%, ${isH ? 0 : monthTranslate}%, 0)`).addClass('calendar-month-next');\n } else {\n // To prev\n calendar.monthsTranslate += 1;\n if (!calendar.animating) calendar.$months.eq(0).remove();\n $wrapperEl.prepend(newMonthHTML);\n calendar.$months = $wrapperEl.find('.calendar-month');\n monthTranslate = -(prevTranslate + 1) * 100 * inverter;\n calendar.$months.eq(0).transform(`translate3d(${isH ? monthTranslate : 0}%, ${isH ? 0 : monthTranslate}%, 0)`).addClass('calendar-month-prev');\n }\n calendar.emit('local::monthAdd calendarMonthAdd', dir === 'next' ? calendar.$months.eq(calendar.$months.length - 1)[0] : calendar.$months.eq(0)[0]);\n calendar.animating = true;\n calendar.onMonthChangeStart(dir);\n const wrapperTranslate = calendar.monthsTranslate * 100 * inverter;\n $wrapperEl.transition(transition).transform(`translate3d(${isH ? wrapperTranslate : 0}%, ${isH ? 0 : wrapperTranslate}%, 0)`);\n if (transitionEndCallback) {\n $wrapperEl.transitionEnd(() => {\n calendar.onMonthChangeEnd(dir, true);\n });\n }\n if (!params.animate || transition === 0) {\n calendar.onMonthChangeEnd(dir, true);\n }\n }\n nextYear() {\n const calendar = this;\n calendar.setYearMonth(calendar.currentYear + 1);\n }\n prevYear() {\n const calendar = this;\n calendar.setYearMonth(calendar.currentYear - 1);\n }\n // eslint-disable-next-line\n dateInRange(dayDate, range) {\n let match = false;\n let i;\n if (!range) return false;\n if (Array.isArray(range)) {\n for (i = 0; i < range.length; i += 1) {\n if (range[i].from || range[i].to) {\n if (range[i].from && range[i].to) {\n if (dayDate <= new Date(range[i].to).getTime() && dayDate >= new Date(range[i].from).getTime()) {\n match = true;\n }\n } else if (range[i].from) {\n if (dayDate >= new Date(range[i].from).getTime()) {\n match = true;\n }\n } else if (range[i].to) {\n if (dayDate <= new Date(range[i].to).getTime()) {\n match = true;\n }\n }\n } else if (range[i].date) {\n if (dayDate === new Date(range[i].date).getTime()) {\n match = true;\n }\n } else if (dayDate === new Date(range[i]).getTime()) {\n match = true;\n }\n }\n } else if (range.from || range.to) {\n if (range.from && range.to) {\n if (dayDate <= new Date(range.to).getTime() && dayDate >= new Date(range.from).getTime()) {\n match = true;\n }\n } else if (range.from) {\n if (dayDate >= new Date(range.from).getTime()) {\n match = true;\n }\n } else if (range.to) {\n if (dayDate <= new Date(range.to).getTime()) {\n match = true;\n }\n }\n } else if (range.date) {\n match = dayDate === new Date(range.date).getTime();\n } else if (typeof range === 'function') {\n match = range(new Date(dayDate));\n }\n return match;\n }\n // eslint-disable-next-line\n daysInMonth(date) {\n const d = new Date(date);\n return new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\n }\n renderMonths(date) {\n const calendar = this;\n if (calendar.params.renderMonths) {\n return calendar.params.renderMonths.call(calendar, date);\n }\n return $jsx(\"div\", {\n class: \"calendar-months-wrapper\"\n }, calendar.renderMonth(date, 'prev'), calendar.renderMonth(date), calendar.renderMonth(date, 'next'));\n }\n renderMonth(d, offset) {\n const calendar = this;\n const {\n params,\n value\n } = calendar;\n if (params.renderMonth) {\n return params.renderMonth.call(calendar, d, offset);\n }\n let date = new Date(d);\n let year = date.getFullYear();\n let month = date.getMonth();\n let localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter(date));\n if (localeMonth < 0) localeMonth = month;\n let localeYear = calendar.yearFormatter(date);\n if (offset === 'next') {\n if (month === 11) date = new Date(year + 1, 0);else date = new Date(year, month + 1, 1);\n }\n if (offset === 'prev') {\n if (month === 0) date = new Date(year - 1, 11);else date = new Date(year, month - 1, 1);\n }\n if (offset === 'next' || offset === 'prev') {\n month = date.getMonth();\n year = date.getFullYear();\n localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter(date));\n if (localeMonth < 0) localeMonth = month;\n localeYear = calendar.yearFormatter(date);\n }\n const currentValues = [];\n const today = new Date().setHours(0, 0, 0, 0);\n const minDate = params.minDate ? new Date(params.minDate).getTime() : null;\n const maxDate = params.maxDate ? new Date(params.maxDate).getTime() : null;\n const rows = 6;\n const cols = 7;\n const daysInPrevMonth = calendar.daysInMonth(new Date(date.getFullYear(), date.getMonth()).getTime() - 10 * 24 * 60 * 60 * 1000);\n const daysInMonth = calendar.daysInMonth(date);\n const minDayNumber = params.firstDay === 6 ? 0 : 1;\n let monthHtml = '';\n let dayIndex = 0 + (params.firstDay - 1);\n let disabled;\n let hasEvents;\n let firstDayOfMonthIndex = new Date(date.getFullYear(), date.getMonth()).getDay();\n if (firstDayOfMonthIndex === 0) firstDayOfMonthIndex = 7;\n if (value && value.length) {\n for (let i = 0; i < value.length; i += 1) {\n currentValues.push(new Date(value[i]).setHours(0, 0, 0, 0));\n }\n }\n for (let row = 1; row <= rows; row += 1) {\n let rowHtml = '';\n for (let col = 1; col <= cols; col += 1) {\n dayIndex += 1;\n let dayDate;\n let dayNumber = dayIndex - firstDayOfMonthIndex;\n let addClass = '';\n if (row === 1 && col === 1 && dayNumber > minDayNumber && params.firstDay !== 1) {\n dayIndex -= 7;\n dayNumber = dayIndex - firstDayOfMonthIndex;\n }\n const weekDayIndex = col - 1 + params.firstDay > 6 ? col - 1 - 7 + params.firstDay : col - 1 + params.firstDay;\n if (dayNumber < 0) {\n dayNumber = daysInPrevMonth + dayNumber + 1;\n addClass += ' calendar-day-prev';\n dayDate = new Date(month - 1 < 0 ? year - 1 : year, month - 1 < 0 ? 11 : month - 1, dayNumber).getTime();\n } else {\n dayNumber += 1;\n if (dayNumber > daysInMonth) {\n dayNumber -= daysInMonth;\n addClass += ' calendar-day-next';\n dayDate = new Date(month + 1 > 11 ? year + 1 : year, month + 1 > 11 ? 0 : month + 1, dayNumber).getTime();\n } else {\n dayDate = new Date(year, month, dayNumber).getTime();\n }\n }\n // Today\n if (dayDate === today) addClass += ' calendar-day-today';\n\n // Selected\n if (params.rangePicker && currentValues.length === 2) {\n if (dayDate >= currentValues[0] && dayDate <= currentValues[1]) {\n addClass += ' calendar-day-selected';\n }\n if (currentValues[0] !== currentValues[1]) {\n if (dayDate > currentValues[0] && dayDate < currentValues[1]) {\n addClass += ' calendar-day-selected-range';\n }\n if (dayDate === currentValues[0]) {\n addClass += ' calendar-day-selected-left';\n }\n if (dayDate === currentValues[1]) {\n addClass += ' calendar-day-selected-right';\n }\n }\n } else if (currentValues.indexOf(dayDate) >= 0) addClass += ' calendar-day-selected';\n // Weekend\n if (params.weekendDays.indexOf(weekDayIndex) >= 0) {\n addClass += ' calendar-day-weekend';\n }\n // Events\n let eventsHtml = '';\n hasEvents = false;\n if (params.events) {\n if (calendar.dateInRange(dayDate, params.events)) {\n hasEvents = true;\n }\n }\n if (hasEvents) {\n addClass += ' calendar-day-has-events';\n // prettier-ignore\n eventsHtml = `\n \n \n \n `;\n if (Array.isArray(params.events)) {\n const eventDots = [];\n params.events.forEach(ev => {\n const color = ev.color || '';\n if (eventDots.indexOf(color) < 0 && calendar.dateInRange(dayDate, ev)) {\n eventDots.push(color);\n }\n });\n // prettier-ignore\n eventsHtml = `\n \n ${eventDots.map(color => `\n \n `.trim()).join('')}\n \n `;\n }\n }\n // Custom Ranges\n if (params.rangesClasses) {\n for (let k = 0; k < params.rangesClasses.length; k += 1) {\n if (calendar.dateInRange(dayDate, params.rangesClasses[k].range)) {\n addClass += ` ${params.rangesClasses[k].cssClass}`;\n }\n }\n }\n // Disabled\n disabled = false;\n if (minDate && dayDate < minDate || maxDate && dayDate > maxDate) {\n disabled = true;\n }\n if (params.disabled) {\n if (calendar.dateInRange(dayDate, params.disabled)) {\n disabled = true;\n }\n }\n if (disabled) {\n addClass += ' calendar-day-disabled';\n }\n dayDate = new Date(dayDate);\n const dayYear = dayDate.getFullYear();\n const dayMonth = dayDate.getMonth();\n const dayNumberDisplay = calendar.dayFormatter(dayDate);\n // prettier-ignore\n rowHtml += `\n \n ${dayNumberDisplay}${eventsHtml}\n
`.trim();\n }\n monthHtml += `${rowHtml}
`;\n }\n monthHtml = `${monthHtml}
`;\n return monthHtml;\n }\n renderWeekHeader() {\n const calendar = this;\n if (calendar.params.renderWeekHeader) {\n return calendar.params.renderWeekHeader.call(calendar);\n }\n const {\n params\n } = calendar;\n let weekDaysHtml = '';\n for (let i = 0; i < 7; i += 1) {\n const dayIndex = i + params.firstDay > 6 ? i - 7 + params.firstDay : i + params.firstDay;\n const dayName = calendar.dayNamesShort[dayIndex];\n weekDaysHtml += `${dayName}
`;\n }\n return $jsx(\"div\", {\n class: \"calendar-week-header\"\n }, weekDaysHtml);\n }\n renderMonthSelector() {\n const calendar = this;\n if (calendar.params.renderMonthSelector) {\n return calendar.params.renderMonthSelector.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-month-selector\"\n }, $jsx(\"a\", {\n class: \"link icon-only calendar-prev-month-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-prev\"\n })), calendar.params.monthPicker ? $jsx(\"a\", {\n class: \"current-month-value link\"\n }) : $jsx(\"span\", {\n class: \"current-month-value\"\n }), $jsx(\"a\", {\n class: \"link icon-only calendar-next-month-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-next\"\n })));\n }\n renderYearSelector() {\n const calendar = this;\n if (calendar.params.renderYearSelector) {\n return calendar.params.renderYearSelector.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-year-selector\"\n }, $jsx(\"a\", {\n class: \"link icon-only calendar-prev-year-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-prev\"\n })), calendar.params.yearPicker ? $jsx(\"a\", {\n class: \"current-year-value link\"\n }) : $jsx(\"span\", {\n class: \"current-year-value\"\n }), $jsx(\"a\", {\n class: \"link icon-only calendar-next-year-button\"\n }, $jsx(\"i\", {\n class: \"icon icon-next\"\n })));\n }\n\n // eslint-disable-next-line\n renderTimeSelector() {\n const calendar = this;\n const value = calendar.value && calendar.value[0];\n let timeString;\n if (value) timeString = calendar.timeSelectorFormatter(value);\n return $jsx(\"div\", {\n class: \"calendar-time-selector\"\n }, $jsx(\"span\", null, calendar.params.timePickerLabel), $jsx(\"a\", {\n class: \"link\"\n }, timeString || calendar.params.timePickerPlaceholder));\n }\n renderHeader() {\n const calendar = this;\n if (calendar.params.renderHeader) {\n return calendar.params.renderHeader.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-header\"\n }, $jsx(\"div\", {\n class: \"calendar-selected-date\"\n }, calendar.params.headerPlaceholder));\n }\n renderFooter() {\n const calendar = this;\n const app = calendar.app;\n if (calendar.params.renderFooter) {\n return calendar.params.renderFooter.call(calendar);\n }\n return $jsx(\"div\", {\n class: \"calendar-footer\"\n }, $jsx(\"a\", {\n class: `${app.theme === 'md' ? 'button button-round' : 'link'} calendar-close sheet-close popover-close`\n }, calendar.params.toolbarCloseText));\n }\n renderToolbar() {\n const calendar = this;\n if (calendar.params.renderToolbar) {\n return calendar.params.renderToolbar.call(calendar, calendar);\n }\n // prettier-ignore\n return $jsx(\"div\", {\n class: \"toolbar toolbar-top\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, calendar.params.monthSelector ? calendar.renderMonthSelector() : '', calendar.params.yearSelector ? calendar.renderYearSelector() : ''));\n }\n // eslint-disable-next-line\n renderInline() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: `calendar calendar-inline ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());\n }\n renderCustomModal() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: `calendar calendar-modal ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());\n }\n renderSheet() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: `sheet-modal calendar calendar-sheet ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"sheet-modal-inner calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());\n }\n renderPopover() {\n const calendar = this;\n const {\n cssClass,\n toolbar,\n header,\n footer,\n rangePicker,\n weekHeader\n } = calendar.params;\n const {\n value,\n hasTimePicker\n } = calendar;\n const date = value && value.length ? value[0] : new Date().setHours(0, 0, 0);\n return $jsx(\"div\", {\n class: \"popover calendar-popover\"\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `calendar ${rangePicker ? 'calendar-range' : ''} ${cssClass || ''}`\n }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), $jsx(\"div\", {\n class: \"calendar-months\"\n }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter())));\n }\n render() {\n const calendar = this;\n const {\n params\n } = calendar;\n if (params.render) return params.render.call(calendar);\n if (!calendar.inline) {\n let modalType = params.openIn;\n if (modalType === 'auto') modalType = calendar.isPopover() ? 'popover' : 'sheet';\n if (modalType === 'popover') return calendar.renderPopover();\n if (modalType === 'sheet') return calendar.renderSheet();\n return calendar.renderCustomModal();\n }\n return calendar.renderInline();\n }\n openMonthPicker() {\n const calendar = this;\n const {\n $el,\n app\n } = calendar;\n if (!$el || !$el.length) return;\n $el.append('');\n calendar.monthPickerPopover = app.popover.create({\n el: $el.find('.calendar-month-picker-popover'),\n targetEl: $el.find('.calendar-month-selector'),\n backdrop: true,\n backdropUnique: true,\n on: {\n close() {\n calendar.closeMonthPicker();\n },\n closed() {\n if (calendar.monthPickerPopover.$el) calendar.monthPickerPopover.$el.remove();\n calendar.monthPickerPopover.destroy();\n if (calendar.monthPickerInstance) {\n calendar.monthPickerInstance.close();\n calendar.monthPickerInstance.destroy();\n }\n delete calendar.monthPickerInstance;\n delete calendar.monthPickerPopover;\n }\n }\n });\n calendar.monthPickerPopover.open();\n const localeMonth = parseInt(calendar.$el.find('.calendar-month-current').attr('data-locale-month'), 10);\n const values = [];\n const displayValues = [];\n calendar.monthNames.forEach((m, index) => {\n values.push(index);\n displayValues.push(m);\n });\n calendar.monthPickerInstance = app.picker.create({\n containerEl: calendar.monthPickerPopover.$el.find('.calendar-month-picker'),\n value: [localeMonth],\n toolbar: calendar.params.monthPickerToolbar,\n rotateEffect: false,\n toolbarCloseText: calendar.params.monthPickerCloseText,\n cols: [{\n values,\n displayValues\n }]\n });\n }\n closeMonthPicker() {\n const calendar = this;\n if (calendar.monthPickerPopover && calendar.monthPickerPopover.opened) calendar.monthPickerPopover.close();\n const index = calendar.monthPickerInstance.value[0];\n const localeMonthIndex = parseInt(calendar.$el.find('.calendar-month-current').attr('data-locale-month'), 10);\n const monthIndex = calendar.currentMonth;\n const diff = localeMonthIndex - monthIndex;\n const diffIndex = index - diff;\n calendar.setYearMonth(calendar.currentYear, diffIndex, 0);\n }\n openYearPicker() {\n const calendar = this;\n const {\n $el,\n app\n } = calendar;\n if (!$el || !$el.length) return;\n $el.append('');\n calendar.yearPickerPopover = app.popover.create({\n el: $el.find('.calendar-year-picker-popover'),\n targetEl: $el.find('.calendar-year-selector'),\n backdrop: true,\n backdropUnique: true,\n on: {\n close() {\n calendar.closeYearPicker();\n },\n closed() {\n if (calendar.yearPickerPopover.$el) calendar.yearPickerPopover.$el.remove();\n calendar.yearPickerPopover.destroy();\n if (calendar.yearPickerInstance) {\n calendar.yearPickerInstance.close();\n calendar.yearPickerInstance.destroy();\n }\n delete calendar.yearPickerInstance;\n delete calendar.yearPickerPopover;\n }\n }\n });\n calendar.yearPickerPopover.open();\n const currentYear = calendar.currentYear;\n let yearMin = calendar.params.yearPickerMin || new Date().getFullYear() - 100;\n if (calendar.params.minDate) {\n yearMin = Math.max(yearMin, new Date(calendar.params.minDate).getFullYear());\n }\n let yearMax = calendar.params.yearPickerMax || new Date().getFullYear() + 100;\n if (calendar.params.maxDate) {\n yearMax = Math.min(yearMax, new Date(calendar.params.maxDate).getFullYear());\n }\n const years = [];\n for (let i = yearMin; i <= yearMax; i += 1) {\n years.push(i);\n }\n calendar.yearPickerInstance = app.picker.create({\n containerEl: calendar.yearPickerPopover.$el.find('.calendar-year-picker'),\n value: [currentYear],\n toolbar: calendar.params.yearPickerToolbar,\n rotateEffect: false,\n toolbarCloseText: calendar.params.yearPickerCloseText,\n cols: [{\n values: years\n }]\n });\n }\n closeYearPicker() {\n const calendar = this;\n if (calendar.yearPickerPopover && calendar.yearPickerPopover.opened) calendar.yearPickerPopover.close();\n calendar.setYearMonth(calendar.yearPickerInstance.value[0], undefined, 0);\n }\n openTimePicker() {\n const calendar = this;\n const {\n $el,\n app,\n is12HoursFormat\n } = calendar;\n if (!$el || !$el.length) return;\n $el.append('');\n const hoursArr = [];\n const minutesArr = [];\n const hoursMin = is12HoursFormat ? 1 : 0;\n const hoursMax = is12HoursFormat ? 12 : 23;\n for (let i = hoursMin; i <= hoursMax; i += 1) {\n hoursArr.push(i);\n }\n for (let i = 0; i <= 59; i += 1) {\n minutesArr.push(i);\n }\n let value;\n if (calendar.value && calendar.value.length) {\n value = [calendar.value[0].getHours(), calendar.value[0].getMinutes()];\n } else {\n value = [new Date().getHours(), new Date().getMinutes()];\n }\n if (is12HoursFormat) {\n value.push(value[0] < 12 ? 'AM' : 'PM');\n if (value[0] > 12) value[0] -= 12;\n if (value[0] === 0) value[0] = 12;\n }\n calendar.timePickerPopover = app.popover.create({\n el: $el.find('.calendar-time-picker-popover'),\n targetEl: $el.find('.calendar-time-selector .link'),\n backdrop: true,\n backdropUnique: true,\n on: {\n close() {\n calendar.closeTimePicker();\n },\n closed() {\n if (calendar.timePickerPopover.$el) calendar.timePickerPopover.$el.remove();\n calendar.timePickerPopover.destroy();\n if (calendar.timePickerInstance) {\n calendar.timePickerInstance.close();\n calendar.timePickerInstance.destroy();\n }\n delete calendar.timePickerInstance;\n delete calendar.timePickerPopover;\n }\n }\n });\n calendar.timePickerPopover.open();\n calendar.timePickerInstance = app.picker.create({\n containerEl: calendar.timePickerPopover.$el.find('.calendar-time-picker'),\n value,\n toolbar: calendar.params.timePickerToolbar,\n rotateEffect: false,\n toolbarCloseText: calendar.params.timePickerCloseText,\n cols: [{\n values: hoursArr\n }, {\n divider: true,\n content: ':'\n }, {\n values: minutesArr,\n displayValues: minutesArr.map(m => m < 10 ? `0${m}` : m)\n }, ...(is12HoursFormat ? [{\n values: ['AM', 'PM']\n }] : [])]\n });\n }\n closeTimePicker() {\n const calendar = this;\n const {\n is12HoursFormat\n } = calendar;\n if (calendar.timePickerInstance) {\n const timePickerValue = calendar.timePickerInstance.value;\n let hours = parseInt(timePickerValue[0], 10);\n const minutes = parseInt(timePickerValue[1], 10);\n const period = calendar.timePickerInstance.value[2];\n if (is12HoursFormat) {\n if (period === 'AM' && hours === 12) {\n hours = 0;\n } else if (period === 'PM' && hours !== 12) {\n hours += 12;\n }\n }\n let value = calendar.value && calendar.value.length && calendar.value[0];\n if (!value) {\n value = new Date();\n value.setHours(hours, minutes, 0, 0);\n } else {\n value = new Date(value);\n value.setHours(hours, minutes);\n }\n calendar.setValue([value]);\n if (calendar.timePickerPopover && calendar.timePickerPopover.opened) calendar.timePickerPopover.close();\n }\n }\n onOpen() {\n const calendar = this;\n const {\n initialized,\n $el,\n app,\n $inputEl,\n inline,\n value,\n params\n } = calendar;\n calendar.closing = false;\n calendar.opened = true;\n calendar.opening = true;\n\n // Init main events\n calendar.attachCalendarEvents();\n const updateValue = !value && params.value;\n\n // Set value\n if (!initialized) {\n if (value) calendar.setValue(value, 0);else if (params.value) {\n calendar.setValue(calendar.normalizeValues(params.value), 0);\n }\n } else if (value) {\n calendar.setValue(value, 0);\n }\n\n // Update current month and year\n calendar.updateCurrentMonthYear();\n\n // Set initial translate\n calendar.monthsTranslate = 0;\n calendar.setMonthsTranslate();\n\n // Update input value\n if (updateValue) calendar.updateValue();else if (params.header && value) {\n calendar.updateValue(true);\n }\n\n // Extra focus\n if (!inline && $inputEl && $inputEl.length && app.theme === 'md') {\n $inputEl.trigger('focus');\n }\n calendar.initialized = true;\n calendar.$months.each(monthEl => {\n calendar.emit('local::monthAdd calendarMonthAdd', monthEl);\n });\n\n // Trigger events\n if ($el) {\n $el.trigger('calendar:open');\n }\n if ($inputEl) {\n $inputEl.trigger('calendar:open');\n }\n calendar.emit('local::open calendarOpen', calendar);\n }\n onOpened() {\n const calendar = this;\n calendar.opening = false;\n if (calendar.$el) {\n calendar.$el.trigger('calendar:opened');\n }\n if (calendar.$inputEl) {\n calendar.$inputEl.trigger('calendar:opened');\n }\n calendar.emit('local::opened calendarOpened', calendar);\n }\n onClose() {\n const calendar = this;\n const app = calendar.app;\n calendar.opening = false;\n calendar.closing = true;\n if (calendar.$inputEl) {\n if (app.theme === 'md') {\n calendar.$inputEl.trigger('blur');\n } else {\n const validate = calendar.$inputEl.attr('validate');\n const required = calendar.$inputEl.attr('required');\n if (validate && required) {\n app.input.validate(calendar.$inputEl);\n }\n }\n }\n if (calendar.detachCalendarEvents) {\n calendar.detachCalendarEvents();\n }\n if (calendar.$el) {\n calendar.$el.trigger('calendar:close');\n }\n if (calendar.$inputEl) {\n calendar.$inputEl.trigger('calendar:close');\n }\n calendar.emit('local::close calendarClose', calendar);\n }\n onClosed() {\n const calendar = this;\n calendar.opened = false;\n calendar.closing = false;\n if (!calendar.inline) {\n nextTick(() => {\n if (calendar.modal && calendar.modal.el && calendar.modal.destroy) {\n if (!calendar.params.routableModals) {\n calendar.modal.destroy();\n }\n }\n delete calendar.modal;\n });\n }\n if (calendar.timePickerInstance) {\n if (calendar.timePickerInstance.destroy) calendar.timePickerInstance.destroy();\n delete calendar.timePickerInstance;\n }\n if (calendar.$el) {\n calendar.$el.trigger('calendar:closed');\n }\n if (calendar.$inputEl) {\n calendar.$inputEl.trigger('calendar:closed');\n }\n calendar.emit('local::closed calendarClosed', calendar);\n }\n open() {\n const calendar = this;\n const {\n app,\n opened,\n inline,\n $inputEl,\n params\n } = calendar;\n if (opened) return;\n if (inline) {\n calendar.$el = $(calendar.render());\n calendar.$el[0].f7Calendar = calendar;\n calendar.$wrapperEl = calendar.$el.find('.calendar-months-wrapper');\n calendar.$months = calendar.$wrapperEl.find('.calendar-month');\n calendar.$containerEl.append(calendar.$el);\n calendar.onOpen();\n calendar.onOpened();\n return;\n }\n let modalType = params.openIn;\n if (modalType === 'auto') {\n modalType = calendar.isPopover() ? 'popover' : 'sheet';\n }\n const modalContent = calendar.render();\n const modalParams = {\n targetEl: $inputEl,\n scrollToEl: params.scrollToInput ? $inputEl : undefined,\n content: modalContent,\n backdrop: params.backdrop === true || (modalType === 'popover' || modalType === 'customModal') && app.params.popover.backdrop !== false && params.backdrop !== false,\n closeByBackdropClick: params.closeByBackdropClick,\n on: {\n open() {\n const modal = this;\n calendar.modal = modal;\n calendar.$el = modalType === 'popover' ? modal.$el.find('.calendar') : modal.$el;\n calendar.$wrapperEl = calendar.$el.find('.calendar-months-wrapper');\n calendar.$months = calendar.$wrapperEl.find('.calendar-month');\n calendar.$el[0].f7Calendar = calendar;\n if (modalType === 'customModal') {\n $(calendar.$el).find('.calendar-close').once('click', () => {\n calendar.close();\n });\n }\n calendar.onOpen();\n },\n opened() {\n calendar.onOpened();\n },\n close() {\n calendar.onClose();\n },\n closed() {\n calendar.onClosed();\n }\n }\n };\n if (modalType === 'sheet') {\n modalParams.push = params.sheetPush;\n modalParams.swipeToClose = params.sheetSwipeToClose;\n }\n if (params.routableModals && calendar.view) {\n calendar.view.router.navigate({\n url: calendar.url,\n route: {\n path: calendar.url,\n [modalType]: modalParams\n }\n });\n } else {\n calendar.modal = app[modalType].create(modalParams);\n calendar.modal.open();\n }\n }\n close() {\n const calendar = this;\n const {\n opened,\n inline\n } = calendar;\n if (!opened) return;\n if (inline) {\n calendar.onClose();\n calendar.onClosed();\n return;\n }\n if (calendar.params.routableModals && calendar.view) {\n calendar.view.router.back();\n } else {\n calendar.modal.close();\n }\n }\n init() {\n const calendar = this;\n calendar.initInput();\n if (calendar.inline) {\n calendar.open();\n calendar.emit('local::init calendarInit', calendar);\n return;\n }\n if (!calendar.initialized && calendar.params.value) {\n calendar.setValue(calendar.normalizeValues(calendar.params.value));\n }\n\n // Attach input Events\n if (calendar.$inputEl) {\n calendar.attachInputEvents();\n }\n if (calendar.params.closeByOutsideClick) {\n calendar.attachHtmlEvents();\n }\n calendar.emit('local::init calendarInit', calendar);\n }\n destroy() {\n const calendar = this;\n if (calendar.destroyed) return;\n const {\n $el\n } = calendar;\n calendar.emit('local::beforeDestroy calendarBeforeDestroy', calendar);\n if ($el) $el.trigger('calendar:beforedestroy');\n calendar.close();\n\n // Detach Events\n if (calendar.$inputEl) {\n calendar.detachInputEvents();\n }\n if (calendar.params.closeByOutsideClick) {\n calendar.detachHtmlEvents();\n }\n if (calendar.timePickerInstance) {\n if (calendar.timePickerInstance.destroy) calendar.timePickerInstance.destroy();\n delete calendar.timePickerInstance;\n }\n if ($el && $el.length) delete calendar.$el[0].f7Calendar;\n deleteProps(calendar);\n calendar.destroyed = true;\n }\n}\nexport default Calendar;", "import ConstructorMethods from '../../shared/constructor-methods.js';\nimport Calendar from './calendar-class.js';\nimport $ from '../../shared/dom7.js';\nexport default {\n name: 'calendar',\n static: {\n Calendar\n },\n create() {\n const app = this;\n app.calendar = ConstructorMethods({\n defaultSelector: '.calendar',\n constructor: Calendar,\n app,\n domProp: 'f7Calendar'\n });\n app.calendar.close = function close(el) {\n if (el === void 0) {\n el = '.calendar';\n }\n const $el = $(el);\n if ($el.length === 0) return;\n const calendar = $el[0].f7Calendar;\n if (!calendar || calendar && !calendar.opened) return;\n calendar.close();\n };\n },\n params: {\n calendar: {\n // Calendar settings\n dateFormat: undefined,\n monthNames: 'auto',\n monthNamesShort: 'auto',\n dayNames: 'auto',\n dayNamesShort: 'auto',\n locale: undefined,\n firstDay: 1,\n // First day of the week, Monday\n weekendDays: [0, 6],\n // Sunday and Saturday\n multiple: false,\n rangePicker: false,\n rangePickerMinDays: 1,\n // when calendar is used as rangePicker\n rangePickerMaxDays: 0,\n // when calendar is used as rangePicker, 0 means unlimited\n direction: 'horizontal',\n // or 'vertical'\n minDate: null,\n maxDate: null,\n disabled: null,\n // dates range of disabled days\n events: null,\n // dates range of days with events\n rangesClasses: null,\n // array with custom classes date ranges\n touchMove: true,\n animate: true,\n closeOnSelect: false,\n monthSelector: true,\n monthPicker: true,\n monthPickerToolbar: true,\n monthPickerCloseText: 'Done',\n yearSelector: true,\n yearPicker: true,\n yearPickerToolbar: true,\n yearPickerMin: undefined,\n yearPickerMax: undefined,\n yearPickerCloseText: 'Done',\n timePicker: false,\n timePickerToolbar: true,\n timePickerLabel: 'Time',\n timePickerFormat: {\n hour: 'numeric',\n minute: 'numeric'\n },\n timePickerPlaceholder: 'Select time',\n timePickerCloseText: 'Done',\n weekHeader: true,\n value: null,\n // Common opener settings\n containerEl: null,\n openIn: 'auto',\n // or 'popover' or 'sheet' or 'customModal'\n sheetPush: false,\n sheetSwipeToClose: undefined,\n formatValue: null,\n inputEl: null,\n inputReadOnly: true,\n closeByOutsideClick: true,\n scrollToInput: true,\n header: false,\n headerPlaceholder: 'Select date',\n toolbar: true,\n toolbarCloseText: 'Done',\n footer: false,\n cssClass: null,\n routableModals: false,\n view: null,\n url: 'date/',\n backdrop: null,\n closeByBackdropClick: true,\n // Render functions\n renderWeekHeader: null,\n renderMonths: null,\n renderMonth: null,\n renderMonthSelector: null,\n renderYearSelector: null,\n renderHeader: null,\n renderFooter: null,\n renderToolbar: null,\n renderInline: null,\n renderPopover: null,\n renderSheet: null,\n render: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nexport default function pickerColumn(colEl, updateItems) {\n const picker = this;\n // const app = picker.app;\n const $colEl = $(colEl);\n const colIndex = $colEl.index();\n const col = picker.cols[colIndex];\n if (col.divider) return;\n col.$el = $colEl;\n col.el = $colEl[0];\n col.$itemsEl = col.$el.find('.picker-items');\n col.items = col.$itemsEl.find('.picker-item');\n let itemHeight;\n let colHeight;\n col.replaceValues = function replaceColValues(values, displayValues) {\n col.detachEvents();\n col.values = values;\n col.displayValues = displayValues;\n col.$itemsEl.html(picker.renderColumn(col, true));\n col.items = col.$itemsEl.find('.picker-item');\n col.calcSize();\n col.setValue(col.values[0], true);\n col.attachEvents();\n };\n col.calcSize = function calcColSize() {\n colHeight = col.$el[0].offsetHeight;\n itemHeight = col.items[0].offsetHeight;\n const hadPadding = col.el.style.getPropertyValue('--f7-picker-scroll-padding');\n col.el.style.setProperty('--f7-picker-scroll-padding', `${(colHeight - itemHeight) / 2}px`);\n if (!hadPadding) {\n col.$itemsEl[0].scrollTop = 0;\n }\n };\n col.setValue = function setColValue(newValue, valueCallbacks) {\n const newActiveIndex = col.$itemsEl.find(`.picker-item[data-picker-value=\"${newValue}\"]`).index();\n if (typeof newActiveIndex === 'undefined' || newActiveIndex === -1) {\n return;\n }\n const newScrollTop = newActiveIndex * itemHeight;\n col.$itemsEl[0].scrollTop = newScrollTop;\n\n // Update items\n col.updateItems(newActiveIndex, newScrollTop, valueCallbacks);\n };\n col.updateItems = function updateColItems(activeIndex, scrollTop, valueCallbacks) {\n if (typeof scrollTop === 'undefined') {\n // eslint-disable-next-line\n scrollTop = col.$itemsEl[0].scrollTop;\n }\n\n /* eslint-disable no-param-reassign */\n if (typeof activeIndex === 'undefined') {\n activeIndex = Math.round(scrollTop / itemHeight);\n }\n if (activeIndex < 0) activeIndex = 0;\n if (activeIndex >= col.items.length) activeIndex = col.items.length - 1;\n /* eslint-enable no-param-reassign */\n const previousActiveIndex = col.activeIndex;\n col.activeIndex = activeIndex;\n col.$itemsEl.find('.picker-item-selected').removeClass('picker-item-selected');\n const selectedItem = col.items.eq(activeIndex);\n selectedItem.addClass('picker-item-selected').children().transform('');\n // Set 3D rotate effect\n if (picker.params.rotateEffect) {\n col.items.each(itemEl => {\n const $itemEl = $(itemEl);\n const itemOffset = itemEl.offsetTop - (colHeight - itemHeight) / 2 - scrollTop;\n const percentage = itemOffset / itemHeight;\n const itemsFit = Math.ceil(col.height / itemHeight / 2) + 1;\n let angle = -24 * percentage;\n if (angle > 180) angle = 180;\n if (angle < -180) angle = -180;\n if (Math.abs(percentage) > itemsFit) {\n $itemEl.addClass('picker-item-far');\n } else {\n $itemEl.removeClass('picker-item-far');\n }\n $itemEl.children('span').transform(`translate3d(0, ${-percentage * itemHeight}px, -100px) rotateX(${angle}deg)`);\n });\n }\n if (valueCallbacks || typeof valueCallbacks === 'undefined') {\n // Update values\n col.value = selectedItem.attr('data-picker-value');\n col.displayValue = col.displayValues ? col.displayValues[activeIndex] : col.value;\n // On change callback\n if (previousActiveIndex !== activeIndex) {\n if (col.onChange) {\n col.onChange(picker, col.value, col.displayValue);\n }\n picker.updateValue();\n }\n }\n };\n function handleScroll() {\n col.updateItems();\n }\n function handleClick() {\n const value = $(this).attr('data-picker-value');\n col.setValue(value);\n }\n col.attachEvents = function attachColEvents() {\n col.$itemsEl.on('scroll', handleScroll);\n col.items.on('click', handleClick);\n };\n col.detachEvents = function detachColEvents() {\n col.items.off('click', handleClick);\n };\n col.init = function initCol() {\n col.calcSize();\n if (colIndex === 0) col.$el.addClass('picker-column-first');\n if (colIndex === picker.cols.length - 1) col.$el.addClass('picker-column-last');\n if (picker.params.freeMode) col.$el.addClass('picker-column-free-mode');\n // Update items on init\n if (updateItems) col.updateItems(0);\n col.attachEvents();\n };\n col.destroy = function destroyCol() {\n col.detachEvents();\n };\n col.init();\n}", "import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport pickerColumn from './picker-column.js';\n\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Picker extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const picker = this;\n const device = getDevice();\n const window = getWindow();\n picker.params = extend({}, app.params.picker, params);\n let $containerEl;\n if (picker.params.containerEl) {\n $containerEl = $(picker.params.containerEl);\n if ($containerEl.length === 0) return picker;\n }\n let $inputEl;\n if (picker.params.inputEl) {\n $inputEl = $(picker.params.inputEl);\n }\n let $scrollToEl = picker.params.scrollToInput ? $inputEl : undefined;\n if (picker.params.scrollToEl) {\n const scrollToEl = $(picker.params.scrollToEl);\n if (scrollToEl.length > 0) {\n $scrollToEl = scrollToEl;\n }\n }\n extend(picker, {\n app,\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n inline: $containerEl && $containerEl.length > 0,\n needsOriginFix: device.ios || window.navigator.userAgent.toLowerCase().indexOf('safari') >= 0 && window.navigator.userAgent.toLowerCase().indexOf('chrome') < 0 && !device.android,\n cols: [],\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n $scrollToEl,\n initialized: false,\n opened: false,\n url: picker.params.url\n });\n function onResize() {\n picker.resizeCols();\n }\n function onInputClick() {\n picker.open();\n }\n function onInputFocus(e) {\n e.preventDefault();\n }\n let htmlTouchStartTarget = null;\n function onHtmlTouchStart(e) {\n htmlTouchStartTarget = e.target;\n }\n function onHtmlClick(e) {\n if (picker.destroyed || !picker.params) return;\n const $targetEl = $(e.target);\n if (picker.isPopover()) return;\n if (!picker.opened || picker.closing) return;\n if ($targetEl.closest('[class*=\"backdrop\"]').length) return;\n if ($inputEl && $inputEl.length > 0) {\n if (htmlTouchStartTarget === e.target && $targetEl[0] !== $inputEl[0] && $targetEl.closest('.sheet-modal').length === 0) {\n picker.close();\n }\n } else if ($(e.target).closest('.sheet-modal').length === 0) {\n picker.close();\n }\n }\n\n // Events\n extend(picker, {\n attachResizeEvent() {\n app.on('resize', onResize);\n },\n detachResizeEvent() {\n app.off('resize', onResize);\n },\n attachInputEvents() {\n picker.$inputEl.on('click', onInputClick);\n if (picker.params.inputReadOnly) {\n picker.$inputEl.on('focus mousedown', onInputFocus);\n if (picker.$inputEl[0]) {\n picker.$inputEl[0].f7ValidateReadonly = true;\n }\n }\n },\n detachInputEvents() {\n picker.$inputEl.off('click', onInputClick);\n if (picker.params.inputReadOnly) {\n picker.$inputEl.off('focus mousedown', onInputFocus);\n if (picker.$inputEl[0]) {\n delete picker.$inputEl[0].f7ValidateReadonly;\n }\n }\n },\n attachHtmlEvents() {\n app.on('click', onHtmlClick);\n app.on('touchstart', onHtmlTouchStart);\n },\n detachHtmlEvents() {\n app.off('click', onHtmlClick);\n app.off('touchstart', onHtmlTouchStart);\n }\n });\n picker.init();\n return picker;\n }\n get view() {\n const {\n app,\n params,\n $inputEl\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n } else if ($inputEl) {\n view = $inputEl.parents('.view').length && $inputEl.parents('.view')[0].f7View;\n }\n if (!view) view = app.views.main;\n return view;\n }\n initInput() {\n const picker = this;\n if (!picker.$inputEl) return;\n if (picker.params.inputReadOnly) picker.$inputEl.prop('readOnly', true);\n }\n resizeCols() {\n const picker = this;\n if (!picker.opened) return;\n for (let i = 0; i < picker.cols.length; i += 1) {\n if (!picker.cols[i].divider) {\n picker.cols[i].calcSize();\n picker.cols[i].setValue(picker.cols[i].value, false);\n }\n }\n }\n isPopover() {\n const picker = this;\n const {\n app,\n modal,\n params\n } = picker;\n const device = getDevice();\n if (params.openIn === 'sheet') return false;\n if (modal && modal.type !== 'popover') return false;\n if (!picker.inline && picker.inputEl) {\n if (params.openIn === 'popover') return true;\n if (device.ios) {\n return !!device.ipad;\n }\n if (app.width >= 768) {\n return true;\n }\n }\n return false;\n }\n formatValue() {\n const picker = this;\n const {\n value,\n displayValue\n } = picker;\n if (picker.params.formatValue) {\n return picker.params.formatValue.call(picker, value, displayValue);\n }\n return value.join(' ');\n }\n setValue(values) {\n const picker = this;\n let valueIndex = 0;\n if (picker.cols.length === 0) {\n picker.value = values;\n picker.updateValue(values);\n return;\n }\n for (let i = 0; i < picker.cols.length; i += 1) {\n if (picker.cols[i] && !picker.cols[i].divider) {\n picker.cols[i].setValue(values[valueIndex]);\n valueIndex += 1;\n }\n }\n }\n getValue() {\n const picker = this;\n return picker.value;\n }\n updateValue(forceValues) {\n const picker = this;\n const newValue = forceValues || [];\n const newDisplayValue = [];\n let column;\n if (picker.cols.length === 0) {\n const noDividerColumns = picker.params.cols.filter(c => !c.divider);\n for (let i = 0; i < noDividerColumns.length; i += 1) {\n column = noDividerColumns[i];\n if (column.displayValues !== undefined && column.values !== undefined && column.values.indexOf(newValue[i]) !== -1) {\n newDisplayValue.push(column.displayValues[column.values.indexOf(newValue[i])]);\n } else {\n newDisplayValue.push(newValue[i]);\n }\n }\n } else {\n for (let i = 0; i < picker.cols.length; i += 1) {\n if (!picker.cols[i].divider) {\n newValue.push(picker.cols[i].value);\n newDisplayValue.push(picker.cols[i].displayValue);\n }\n }\n }\n if (newValue.indexOf(undefined) >= 0) {\n return;\n }\n picker.value = newValue;\n picker.displayValue = newDisplayValue;\n picker.emit('local::change pickerChange', picker, picker.value, picker.displayValue);\n if (picker.inputEl) {\n picker.$inputEl.val(picker.formatValue());\n picker.$inputEl.trigger('change');\n }\n }\n initColumn(colEl, updateItems) {\n const picker = this;\n pickerColumn.call(picker, colEl, updateItems);\n }\n // eslint-disable-next-line\n destroyColumn(colEl) {\n const picker = this;\n const $colEl = $(colEl);\n const index = $colEl.index();\n if (picker.cols[index] && picker.cols[index].destroy) {\n picker.cols[index].destroy();\n }\n }\n renderToolbar() {\n const picker = this;\n if (picker.params.renderToolbar) return picker.params.renderToolbar.call(picker, picker);\n return $jsx(\"div\", {\n class: \"toolbar toolbar-top\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"div\", {\n class: \"left\"\n }), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link sheet-close popover-close\"\n }, picker.params.toolbarCloseText))));\n }\n // eslint-disable-next-line\n renderColumn(col, onlyItems) {\n const colClasses = `picker-column ${col.textAlign ? `picker-column-${col.textAlign}` : ''} ${col.cssClass || ''}`;\n let columnHtml;\n let columnItemsHtml;\n if (col.divider) {\n // prettier-ignore\n columnHtml = `\n ${col.content}
\n `;\n } else {\n // prettier-ignore\n columnItemsHtml = col.values.map((value, index) => `\n \n ${col.displayValues ? col.displayValues[index] : value}\n
\n `).join('');\n // prettier-ignore\n columnHtml = `\n \n `;\n }\n return onlyItems ? columnItemsHtml.trim() : columnHtml.trim();\n }\n renderInline() {\n const picker = this;\n const {\n rotateEffect,\n cssClass,\n toolbar\n } = picker.params;\n const inlineHtml = $jsx(\"div\", {\n class: `picker picker-inline ${rotateEffect ? 'picker-3d' : ''} ${cssClass || ''}`\n }, toolbar && picker.renderToolbar(), $jsx(\"div\", {\n class: \"picker-columns\"\n }, picker.cols.map(col => picker.renderColumn(col)), $jsx(\"div\", {\n class: \"picker-center-highlight\"\n })));\n return inlineHtml;\n }\n renderSheet() {\n const picker = this;\n const {\n rotateEffect,\n cssClass,\n toolbar\n } = picker.params;\n const sheetHtml = $jsx(\"div\", {\n class: `sheet-modal picker picker-sheet ${rotateEffect ? 'picker-3d' : ''} ${cssClass || ''}`\n }, toolbar && picker.renderToolbar(), $jsx(\"div\", {\n class: \"sheet-modal-inner picker-columns\"\n }, picker.cols.map(col => picker.renderColumn(col)), $jsx(\"div\", {\n class: \"picker-center-highlight\"\n })));\n return sheetHtml;\n }\n renderPopover() {\n const picker = this;\n const {\n rotateEffect,\n cssClass,\n toolbar\n } = picker.params;\n const popoverHtml = $jsx(\"div\", {\n class: \"popover picker-popover\"\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `picker ${rotateEffect ? 'picker-3d' : ''} ${cssClass || ''}`\n }, toolbar && picker.renderToolbar(), $jsx(\"div\", {\n class: \"picker-columns\"\n }, picker.cols.map(col => picker.renderColumn(col)), $jsx(\"div\", {\n class: \"picker-center-highlight\"\n })))));\n return popoverHtml;\n }\n render() {\n const picker = this;\n if (picker.params.render) return picker.params.render.call(picker);\n if (!picker.inline) {\n if (picker.isPopover()) return picker.renderPopover();\n return picker.renderSheet();\n }\n return picker.renderInline();\n }\n onOpen() {\n const picker = this;\n const {\n initialized,\n $el,\n app,\n $inputEl,\n inline,\n value,\n params\n } = picker;\n picker.opened = true;\n picker.closing = false;\n picker.opening = true;\n\n // Init main events\n picker.attachResizeEvent();\n\n // Init cols\n $el.find('.picker-column').each(colEl => {\n let updateItems = true;\n if (!initialized && params.value || initialized && value) {\n updateItems = false;\n }\n picker.initColumn(colEl, updateItems);\n });\n\n // Set value\n if (!initialized) {\n if (value) picker.setValue(value);else if (params.value) {\n picker.setValue(params.value);\n }\n } else if (value) {\n picker.setValue(value);\n }\n\n // Extra focus\n if (!inline && $inputEl && $inputEl.length && app.theme === 'md') {\n $inputEl.trigger('focus');\n }\n picker.initialized = true;\n\n // Trigger events\n if ($el) {\n $el.trigger('picker:open');\n }\n if ($inputEl) {\n $inputEl.trigger('picker:open');\n }\n picker.emit('local::open pickerOpen', picker);\n }\n onOpened() {\n const picker = this;\n picker.opening = false;\n if (picker.$el) {\n picker.$el.trigger('picker:opened');\n }\n if (picker.$inputEl) {\n picker.$inputEl.trigger('picker:opened');\n }\n picker.emit('local::opened pickerOpened', picker);\n }\n onClose() {\n const picker = this;\n const app = picker.app;\n picker.opening = false;\n picker.closing = true;\n\n // Detach events\n picker.detachResizeEvent();\n picker.cols.forEach(col => {\n if (col.destroy) col.destroy();\n });\n if (picker.$inputEl) {\n if (app.theme === 'md') {\n picker.$inputEl.trigger('blur');\n } else {\n const validate = picker.$inputEl.attr('validate');\n const required = picker.$inputEl.attr('required');\n if (validate && required) {\n app.input.validate(picker.$inputEl);\n }\n }\n }\n if (picker.$el) {\n picker.$el.trigger('picker:close');\n }\n if (picker.$inputEl) {\n picker.$inputEl.trigger('picker:close');\n }\n picker.emit('local::close pickerClose', picker);\n }\n onClosed() {\n const picker = this;\n picker.opened = false;\n picker.closing = false;\n if (!picker.inline) {\n nextTick(() => {\n if (picker.modal && picker.modal.el && picker.modal.destroy) {\n if (!picker.params.routableModals) {\n picker.modal.destroy();\n }\n }\n delete picker.modal;\n });\n }\n if (picker.$el) {\n picker.$el.trigger('picker:closed');\n }\n if (picker.$inputEl) {\n picker.$inputEl.trigger('picker:closed');\n }\n picker.emit('local::closed pickerClosed', picker);\n }\n open() {\n const picker = this;\n const {\n app,\n opened,\n inline,\n $inputEl,\n $scrollToEl,\n params\n } = picker;\n if (opened) return;\n if (picker.cols.length === 0 && params.cols.length) {\n params.cols.forEach(col => {\n picker.cols.push(col);\n });\n }\n if (inline) {\n picker.$el = $(picker.render());\n picker.$el[0].f7Picker = picker;\n picker.$containerEl.append(picker.$el);\n picker.onOpen();\n picker.onOpened();\n return;\n }\n const isPopover = picker.isPopover();\n const modalType = isPopover ? 'popover' : 'sheet';\n const modalParams = {\n targetEl: $inputEl,\n scrollToEl: $scrollToEl,\n content: picker.render(),\n backdrop: typeof params.backdrop !== 'undefined' ? params.backdrop : isPopover,\n on: {\n open() {\n const modal = this;\n picker.modal = modal;\n picker.$el = isPopover ? modal.$el.find('.picker') : modal.$el;\n picker.$el[0].f7Picker = picker;\n picker.onOpen();\n },\n opened() {\n picker.onOpened();\n },\n close() {\n picker.onClose();\n },\n closed() {\n picker.onClosed();\n }\n }\n };\n if (modalType === 'sheet') {\n modalParams.push = params.sheetPush;\n modalParams.swipeToClose = params.sheetSwipeToClose;\n }\n if (params.routableModals && picker.view) {\n picker.view.router.navigate({\n url: picker.url,\n route: {\n path: picker.url,\n [modalType]: modalParams\n }\n });\n } else {\n picker.modal = app[modalType].create(modalParams);\n picker.modal.open();\n }\n }\n close() {\n const picker = this;\n const {\n opened,\n inline\n } = picker;\n if (!opened) return;\n if (inline) {\n picker.onClose();\n picker.onClosed();\n return;\n }\n if (picker.params.routableModals && picker.view) {\n picker.view.router.back();\n } else {\n picker.modal.close();\n }\n }\n init() {\n const picker = this;\n picker.initInput();\n if (picker.inline) {\n picker.open();\n picker.emit('local::init pickerInit', picker);\n return;\n }\n if (!picker.initialized && picker.params.value) {\n picker.setValue(picker.params.value);\n }\n\n // Attach input Events\n if (picker.$inputEl) {\n picker.attachInputEvents();\n }\n if (picker.params.closeByOutsideClick) {\n picker.attachHtmlEvents();\n }\n picker.emit('local::init pickerInit', picker);\n }\n destroy() {\n const picker = this;\n if (picker.destroyed) return;\n const {\n $el\n } = picker;\n picker.emit('local::beforeDestroy pickerBeforeDestroy', picker);\n if ($el) $el.trigger('picker:beforedestroy');\n picker.close();\n\n // Detach Events\n if (picker.$inputEl) {\n picker.detachInputEvents();\n }\n if (picker.params.closeByOutsideClick) {\n picker.detachHtmlEvents();\n }\n if ($el && $el.length) delete picker.$el[0].f7Picker;\n deleteProps(picker);\n picker.destroyed = true;\n }\n}\nexport default Picker;", "import $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport Picker from './picker-class.js';\nexport default {\n name: 'picker',\n static: {\n Picker\n },\n create() {\n const app = this;\n app.picker = ConstructorMethods({\n defaultSelector: '.picker',\n constructor: Picker,\n app,\n domProp: 'f7Picker'\n });\n app.picker.close = function close(el) {\n if (el === void 0) {\n el = '.picker';\n }\n const $el = $(el);\n if ($el.length === 0) return;\n const picker = $el[0].f7Picker;\n if (!picker || picker && !picker.opened) return;\n picker.close();\n };\n },\n params: {\n picker: {\n // Picker settings\n rotateEffect: false,\n freeMode: false,\n cols: [],\n // Common opener settings\n containerEl: null,\n openIn: 'auto',\n // or 'popover' or 'sheet'\n sheetPush: false,\n sheetSwipeToClose: undefined,\n backdrop: undefined,\n // uses Popover or Sheet defaults\n formatValue: null,\n inputEl: null,\n inputReadOnly: true,\n closeByOutsideClick: true,\n scrollToInput: true,\n scrollToEl: undefined,\n toolbar: true,\n toolbarCloseText: 'Done',\n cssClass: null,\n routableModals: false,\n view: null,\n url: 'select/',\n // Render functions\n renderToolbar: null,\n render: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods } from '../../shared/utils.js';\nconst InfiniteScroll = {\n handle(el, e) {\n const app = this;\n const $el = $(el);\n const scrollTop = $el[0].scrollTop;\n const scrollHeight = $el[0].scrollHeight;\n const height = $el[0].offsetHeight;\n let distance = $el[0].getAttribute('data-infinite-distance');\n const virtualListContainer = $el.find('.virtual-list');\n let virtualList;\n const onTop = $el.hasClass('infinite-scroll-top');\n if (!distance) distance = 50;\n if (typeof distance === 'string' && distance.indexOf('%') >= 0) {\n distance = parseInt(distance, 10) / 100 * height;\n }\n if (distance > height) distance = height;\n if (onTop) {\n if (scrollTop < distance) {\n $el.trigger('infinite', e);\n app.emit('infinite', $el[0], e);\n }\n } else if (scrollTop + height >= scrollHeight - distance) {\n if (virtualListContainer.length > 0) {\n virtualList = virtualListContainer.eq(-1)[0].f7VirtualList;\n if (virtualList && !virtualList.reachEnd && !virtualList.params.updatableScroll) {\n return;\n }\n }\n $el.trigger('infinite', e);\n app.emit('infinite', $el[0], e);\n }\n },\n create(el) {\n const $el = $(el);\n const app = this;\n function scrollHandler(e) {\n app.infiniteScroll.handle(this, e);\n }\n $el.each(element => {\n element.f7InfiniteScrollHandler = scrollHandler;\n element.addEventListener('scroll', element.f7InfiniteScrollHandler);\n });\n },\n destroy(el) {\n const $el = $(el);\n $el.each(element => {\n element.removeEventListener('scroll', element.f7InfiniteScrollHandler);\n delete element.f7InfiniteScrollHandler;\n });\n }\n};\nexport default {\n name: 'infiniteScroll',\n create() {\n const app = this;\n bindMethods(app, {\n infiniteScroll: InfiniteScroll\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n const $tabEl = $(tabEl);\n const $isEls = $tabEl.find('.infinite-scroll-content');\n if ($tabEl.is('.infinite-scroll-content')) $isEls.add($tabEl);\n $isEls.each(el => {\n app.infiniteScroll.create(el);\n });\n },\n tabBeforeRemove(tabEl) {\n const $tabEl = $(tabEl);\n const app = this;\n const $isEls = $tabEl.find('.infinite-scroll-content');\n if ($tabEl.is('.infinite-scroll-content')) $isEls.add($tabEl);\n $isEls.each(el => {\n app.infiniteScroll.destroy(el);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.infinite-scroll-content').each(el => {\n app.infiniteScroll.create(el);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.infinite-scroll-content').each(el => {\n app.infiniteScroll.destroy(el);\n });\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport { getDevice } from '../../shared/get-device.js';\nclass PullToRefresh extends Framework7Class {\n constructor(app, el) {\n super({}, [app]);\n const ptr = this;\n const device = getDevice();\n const support = getSupport();\n const $el = $(el);\n const $preloaderEl = $el.find('.ptr-preloader');\n ptr.$el = $el;\n ptr.el = $el[0];\n ptr.app = app;\n ptr.bottom = ptr.$el.hasClass('ptr-bottom');\n\n // Extend defaults with modules params\n ptr.useModulesParams({});\n const isMaterial = app.theme === 'md';\n const isIos = app.theme === 'ios';\n\n // Done\n ptr.done = function done() {\n const $transitionTarget = isMaterial ? $preloaderEl : $el;\n const onTranstionEnd = e => {\n if ($(e.target).closest($preloaderEl).length) return;\n $el.removeClass('ptr-transitioning ptr-pull-up ptr-pull-down ptr-closing');\n $el.trigger('ptr:done');\n ptr.emit('local::done ptrDone', $el[0]);\n $transitionTarget.off('transitionend', onTranstionEnd);\n };\n $transitionTarget.on('transitionend', onTranstionEnd);\n $el.removeClass('ptr-refreshing').addClass('ptr-transitioning ptr-closing');\n return ptr;\n };\n ptr.refresh = function refresh() {\n if ($el.hasClass('ptr-refreshing')) return ptr;\n $el.addClass('ptr-transitioning ptr-refreshing');\n $el.trigger('ptr:refresh', ptr.done);\n ptr.emit('local::refresh ptrRefresh', $el[0], ptr.done);\n return ptr;\n };\n\n // Mousewheel\n ptr.mousewheel = $el.attr('data-ptr-mousewheel') === 'true';\n\n // Events handling\n let touchId;\n let isTouched;\n let isMoved;\n const touchesStart = {};\n let isScrolling;\n let touchesDiff;\n let refresh = false;\n let useTranslate = false;\n let forceUseTranslate = false;\n let startTranslate = 0;\n let translate;\n let scrollTop;\n let wasScrolled;\n let triggerDistance;\n let dynamicTriggerDistance;\n let pullStarted;\n let hasNavbar = false;\n let scrollHeight;\n let offsetHeight;\n let maxScrollTop;\n const $pageEl = $el.parents('.page');\n if ($pageEl.find('.navbar').length > 0 || $pageEl.parents('.view').children('.navbars').length > 0) hasNavbar = true;\n if ($pageEl.hasClass('no-navbar')) hasNavbar = false;\n if (!ptr.bottom) {\n const pageNavbarEl = app.navbar.getElByPage($pageEl[0]);\n if (pageNavbarEl) {\n const $pageNavbarEl = $(pageNavbarEl);\n const isLargeTransparent = $pageNavbarEl.hasClass('navbar-large-transparent') || $pageNavbarEl.hasClass('navbar-large') && $pageNavbarEl.hasClass('navbar-transparent');\n const isTransparent = $pageNavbarEl.hasClass('navbar-transparent') && !$pageNavbarEl.hasClass('navbar-large');\n if (isLargeTransparent) {\n $el.addClass('ptr-with-navbar-large-transparent');\n } else if (isTransparent) {\n $el.addClass('ptr-with-navbar-transparent');\n }\n }\n }\n if (!hasNavbar && !ptr.bottom) $el.addClass('ptr-no-navbar');\n\n // Define trigger distance\n if ($el.attr('data-ptr-distance')) {\n dynamicTriggerDistance = true;\n } else if (isMaterial) {\n triggerDistance = 66;\n } else if (isIos) {\n triggerDistance = 44;\n }\n function setPreloaderProgress(progress) {\n if (progress === void 0) {\n progress = 0;\n }\n const $bars = $preloaderEl.find('.preloader-inner-line');\n const perBarProgress = 1 / $bars.length;\n $bars.forEach((barEl, barIndex) => {\n const barProgress = (progress - barIndex * perBarProgress) / perBarProgress;\n barEl.style.opacity = Math.max(Math.min(barProgress, 1), 0) * 0.27;\n });\n }\n function unsetPreloaderProgress() {\n $preloaderEl.find('.preloader-inner-line').css('opacity', '');\n }\n function handleTouchStart(e) {\n if (!e.isTrusted) return;\n if (isTouched) {\n if (device.os === 'android') {\n if ('targetTouches' in e && e.targetTouches.length > 1) return;\n } else return;\n }\n if ($el.hasClass('ptr-refreshing')) {\n return;\n }\n if ($(e.target).closest('.sortable-handler, .ptr-ignore, .card-expandable.card-opened').length) return;\n isMoved = false;\n pullStarted = false;\n isTouched = true;\n isScrolling = undefined;\n wasScrolled = undefined;\n if (e.type === 'touchstart') touchId = e.targetTouches[0].identifier;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n function handleTouchMove(e) {\n if (!isTouched || !e.isTrusted) return;\n let pageX;\n let pageY;\n let touch;\n if (e.type === 'touchmove') {\n if (touchId && e.touches) {\n for (let i = 0; i < e.touches.length; i += 1) {\n if (e.touches[i].identifier === touchId) {\n touch = e.touches[i];\n }\n }\n }\n if (!touch) touch = e.targetTouches[0];\n pageX = touch.pageX;\n pageY = touch.pageY;\n } else {\n pageX = e.pageX;\n pageY = e.pageY;\n }\n if (!pageX || !pageY) return;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));\n }\n if (!isScrolling) {\n isTouched = false;\n return;\n }\n scrollTop = $el[0].scrollTop;\n if (!isMoved) {\n $el.removeClass('ptr-transitioning');\n if (isIos) {\n setPreloaderProgress(0);\n }\n let targetIsScrollable;\n scrollHeight = $el[0].scrollHeight;\n offsetHeight = $el[0].offsetHeight;\n if (ptr.bottom) {\n maxScrollTop = scrollHeight - offsetHeight;\n }\n if (scrollTop > scrollHeight) {\n isTouched = false;\n return;\n }\n const $ptrWatchScrollable = $(e.target).closest('.ptr-watch-scroll');\n if ($ptrWatchScrollable.length) {\n $ptrWatchScrollable.each(ptrScrollableEl => {\n if (ptrScrollableEl === el) return;\n if (ptrScrollableEl.scrollHeight > ptrScrollableEl.offsetHeight && $(ptrScrollableEl).css('overflow') === 'auto' && (!ptr.bottom && ptrScrollableEl.scrollTop > 0 || ptr.bottom && ptrScrollableEl.scrollTop < ptrScrollableEl.scrollHeight - ptrScrollableEl.offsetHeight)) {\n targetIsScrollable = true;\n }\n });\n }\n if (targetIsScrollable) {\n isTouched = false;\n return;\n }\n if (dynamicTriggerDistance) {\n triggerDistance = $el.attr('data-ptr-distance');\n if (triggerDistance.indexOf('%') >= 0) triggerDistance = scrollHeight * parseInt(triggerDistance, 10) / 100;\n }\n startTranslate = $el.hasClass('ptr-refreshing') ? triggerDistance : 0;\n if (scrollHeight === offsetHeight || device.os !== 'ios' || isMaterial) {\n useTranslate = true;\n } else {\n useTranslate = false;\n }\n forceUseTranslate = false;\n }\n isMoved = true;\n touchesDiff = pageY - touchesStart.y;\n if (typeof wasScrolled === 'undefined' && (ptr.bottom ? scrollTop !== maxScrollTop : scrollTop !== 0)) wasScrolled = true;\n const ptrStarted = ptr.bottom ? touchesDiff < 0 && scrollTop >= maxScrollTop || scrollTop > maxScrollTop : touchesDiff > 0 && scrollTop <= 0 || scrollTop < 0;\n if (ptrStarted) {\n // iOS 8 fix\n if (device.os === 'ios' && parseInt(device.osVersion.split('.')[0], 10) > 7) {\n if (!ptr.bottom && scrollTop === 0 && !wasScrolled) useTranslate = true;\n if (ptr.bottom && scrollTop === maxScrollTop && !wasScrolled) useTranslate = true;\n }\n if (!useTranslate && ptr.bottom && !isMaterial) {\n $el.css('-webkit-overflow-scrolling', 'auto');\n $el.scrollTop(maxScrollTop);\n forceUseTranslate = true;\n }\n if (useTranslate || forceUseTranslate) {\n if (e.cancelable) {\n e.preventDefault();\n }\n translate = (ptr.bottom ? -1 * Math.abs(touchesDiff) ** 0.85 : touchesDiff ** 0.85) + startTranslate;\n if (isMaterial) {\n $preloaderEl.transform(`translate3d(0,${translate}px,0)`).find('.ptr-arrow').transform(`rotate(${180 * (Math.abs(touchesDiff) / 66) + 100}deg)`);\n } else {\n // eslint-disable-next-line\n if (ptr.bottom || isIos) {\n $el.children().transform(`translate3d(0,${translate}px,0)`);\n } else {\n // eslint-disable-next-line\n $el.transform(`translate3d(0,${translate}px,0)`);\n }\n if (isIos) {\n $preloaderEl.transform(`translate3d(0,0px,0)`);\n }\n }\n } else if (isIos && !ptr.bottom) {\n $preloaderEl.transform(`translate3d(0,${scrollTop}px,0)`);\n }\n let progress;\n if (isIos && !refresh) {\n progress = useTranslate || forceUseTranslate ? Math.abs(touchesDiff) ** 0.85 / triggerDistance : Math.abs(touchesDiff) / (triggerDistance * 2);\n setPreloaderProgress(progress);\n }\n if ((useTranslate || forceUseTranslate) && Math.abs(touchesDiff) ** 0.85 > triggerDistance || !useTranslate && Math.abs(touchesDiff) >= triggerDistance * 2) {\n refresh = true;\n $el.addClass('ptr-pull-up').removeClass('ptr-pull-down');\n unsetPreloaderProgress();\n } else {\n refresh = false;\n $el.removeClass('ptr-pull-up').addClass('ptr-pull-down');\n }\n if (!pullStarted) {\n $el.trigger('ptr:pullstart');\n ptr.emit('local::pullStart ptrPullStart', $el[0]);\n pullStarted = true;\n }\n $el.trigger('ptr:pullmove', {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n ptr.emit('local::pullMove ptrPullMove', $el[0], {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n } else {\n pullStarted = false;\n $el.removeClass('ptr-pull-up ptr-pull-down');\n refresh = false;\n }\n }\n function handleTouchEnd(e) {\n if (!e.isTrusted) return;\n if (e.type === 'touchend' && e.changedTouches && e.changedTouches.length > 0 && touchId) {\n if (e.changedTouches[0].identifier !== touchId) {\n isTouched = false;\n isScrolling = false;\n isMoved = false;\n touchId = null;\n return;\n }\n }\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n if (translate) {\n $el.addClass('ptr-transitioning');\n translate = 0;\n }\n if (isMaterial) {\n $preloaderEl.transform('').find('.ptr-arrow').transform('');\n } else {\n $preloaderEl.transform('');\n if (ptr.bottom || isIos) {\n $el.children().transform('');\n } else {\n $el.transform('');\n }\n }\n if (!useTranslate && ptr.bottom && !isMaterial) {\n $el.css('-webkit-overflow-scrolling', '');\n }\n if (refresh) {\n $el.addClass('ptr-refreshing');\n $el.trigger('ptr:refresh', ptr.done);\n ptr.emit('local::refresh ptrRefresh', $el[0], ptr.done);\n } else {\n $el.removeClass('ptr-pull-down');\n }\n isTouched = false;\n isMoved = false;\n if (pullStarted) {\n $el.trigger('ptr:pullend');\n ptr.emit('local::pullEnd ptrPullEnd', $el[0]);\n }\n }\n let mousewheelTimeout;\n let mousewheelMoved;\n let mousewheelAllow = true;\n let mousewheelTranslate = 0;\n function handleMouseWheelRelease() {\n mousewheelAllow = true;\n mousewheelMoved = false;\n mousewheelTranslate = 0;\n if (translate) {\n $el.addClass('ptr-transitioning');\n translate = 0;\n }\n if (isMaterial) {\n $preloaderEl.transform('').find('.ptr-arrow').transform('');\n } else {\n $preloaderEl.transform('');\n if (ptr.bottom) {\n $el.children().transform('');\n } else {\n $el.transform('');\n }\n }\n if (refresh) {\n $el.addClass('ptr-refreshing');\n $el.trigger('ptr:refresh', ptr.done);\n ptr.emit('local::refresh ptrRefresh', $el[0], ptr.done);\n } else {\n $el.removeClass('ptr-pull-down');\n }\n if (pullStarted) {\n $el.trigger('ptr:pullend');\n ptr.emit('local::pullEnd ptrPullEnd', $el[0]);\n }\n }\n function handleMouseWheel(e) {\n if (!mousewheelAllow) return;\n const {\n deltaX,\n deltaY\n } = e;\n if (Math.abs(deltaX) > Math.abs(deltaY)) return;\n if ($el.hasClass('ptr-refreshing')) {\n return;\n }\n if ($(e.target).closest('.sortable-handler, .ptr-ignore, .card-expandable.card-opened').length) return;\n clearTimeout(mousewheelTimeout);\n scrollTop = $el[0].scrollTop;\n if (!mousewheelMoved) {\n $el.removeClass('ptr-transitioning');\n if (isIos) {\n setPreloaderProgress(0);\n }\n let targetIsScrollable;\n scrollHeight = $el[0].scrollHeight;\n offsetHeight = $el[0].offsetHeight;\n if (ptr.bottom) {\n maxScrollTop = scrollHeight - offsetHeight;\n }\n if (scrollTop > scrollHeight) {\n mousewheelAllow = false;\n return;\n }\n const $ptrWatchScrollable = $(e.target).closest('.ptr-watch-scroll');\n if ($ptrWatchScrollable.length) {\n $ptrWatchScrollable.each(ptrScrollableEl => {\n if (ptrScrollableEl === el) return;\n if (ptrScrollableEl.scrollHeight > ptrScrollableEl.offsetHeight && $(ptrScrollableEl).css('overflow') === 'auto' && (!ptr.bottom && ptrScrollableEl.scrollTop > 0 || ptr.bottom && ptrScrollableEl.scrollTop < ptrScrollableEl.scrollHeight - ptrScrollableEl.offsetHeight)) {\n targetIsScrollable = true;\n }\n });\n }\n if (targetIsScrollable) {\n mousewheelAllow = false;\n return;\n }\n if (dynamicTriggerDistance) {\n triggerDistance = $el.attr('data-ptr-distance');\n if (triggerDistance.indexOf('%') >= 0) triggerDistance = scrollHeight * parseInt(triggerDistance, 10) / 100;\n }\n }\n isMoved = true;\n mousewheelTranslate -= deltaY;\n touchesDiff = mousewheelTranslate; // pageY - touchesStart.y;\n\n if (typeof wasScrolled === 'undefined' && (ptr.bottom ? scrollTop !== maxScrollTop : scrollTop !== 0)) wasScrolled = true;\n const ptrStarted = ptr.bottom ? touchesDiff < 0 && scrollTop >= maxScrollTop || scrollTop > maxScrollTop : touchesDiff > 0 && scrollTop <= 0 || scrollTop < 0;\n if (ptrStarted) {\n if (e.cancelable) {\n e.preventDefault();\n }\n translate = touchesDiff;\n if (Math.abs(translate) > triggerDistance) {\n translate = triggerDistance + (Math.abs(translate) - triggerDistance) ** 0.7;\n if (ptr.bottom) translate = -translate;\n }\n if (isMaterial) {\n $preloaderEl.transform(`translate3d(0,${translate}px,0)`).find('.ptr-arrow').transform(`rotate(${180 * (Math.abs(touchesDiff) / 66) + 100}deg)`);\n } else {\n // eslint-disable-next-line\n if (ptr.bottom) {\n $el.children().transform(`translate3d(0,${translate}px,0)`);\n } else {\n $el.transform(`translate3d(0,${translate}px,0)`);\n if (isIos) {\n $preloaderEl.transform(`translate3d(0,${-translate}px,0)`);\n }\n }\n }\n let progress;\n if (isIos && !refresh) {\n progress = Math.abs(translate) / triggerDistance;\n setPreloaderProgress(progress);\n }\n if (Math.abs(translate) > triggerDistance) {\n refresh = true;\n $el.addClass('ptr-pull-up').removeClass('ptr-pull-down');\n unsetPreloaderProgress();\n } else {\n refresh = false;\n $el.removeClass('ptr-pull-up').addClass('ptr-pull-down');\n }\n if (!pullStarted) {\n $el.trigger('ptr:pullstart');\n ptr.emit('local::pullStart ptrPullStart', $el[0]);\n pullStarted = true;\n }\n $el.trigger('ptr:pullmove', {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n ptr.emit('local::pullMove ptrPullMove', $el[0], {\n event: e,\n scrollTop,\n translate,\n touchesDiff\n });\n } else {\n pullStarted = false;\n $el.removeClass('ptr-pull-up ptr-pull-down');\n refresh = false;\n }\n mousewheelTimeout = setTimeout(handleMouseWheelRelease, 300);\n }\n if (!$pageEl.length || !$el.length) return ptr;\n $el[0].f7PullToRefresh = ptr;\n\n // Events\n ptr.attachEvents = function attachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.on(app.touchEvents.start, handleTouchStart, passive);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n if (ptr.mousewheel && !ptr.bottom) {\n $el.on('wheel', handleMouseWheel);\n }\n };\n ptr.detachEvents = function detachEvents() {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n $el.off(app.touchEvents.start, handleTouchStart, passive);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n if (ptr.mousewheel && !ptr.bottom) {\n $el.off('wheel', handleMouseWheel);\n }\n };\n\n // Install Modules\n ptr.useModules();\n\n // Init\n ptr.init();\n return ptr;\n }\n init() {\n const ptr = this;\n ptr.attachEvents();\n }\n destroy() {\n let ptr = this;\n ptr.emit('local::beforeDestroy ptrBeforeDestroy', ptr);\n ptr.$el.trigger('ptr:beforedestroy');\n delete ptr.el.f7PullToRefresh;\n ptr.detachEvents();\n deleteProps(ptr);\n ptr = null;\n }\n}\nexport default PullToRefresh;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport PullToRefresh from './pull-to-refresh-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'pullToRefresh',\n create() {\n const app = this;\n app.ptr = extend(ConstructorMethods({\n defaultSelector: '.ptr-content',\n constructor: PullToRefresh,\n app,\n domProp: 'f7PullToRefresh'\n }), {\n done(el) {\n const ptr = app.ptr.get(el);\n if (ptr) return ptr.done();\n return undefined;\n },\n refresh(el) {\n const ptr = app.ptr.get(el);\n if (ptr) return ptr.refresh();\n return undefined;\n }\n });\n },\n static: {\n PullToRefresh\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n const $tabEl = $(tabEl);\n const $ptrEls = $tabEl.find('.ptr-content');\n if ($tabEl.is('.ptr-content')) $ptrEls.add($tabEl);\n $ptrEls.each(el => {\n app.ptr.create(el);\n });\n },\n tabBeforeRemove(tabEl) {\n const $tabEl = $(tabEl);\n const app = this;\n const $ptrEls = $tabEl.find('.ptr-content');\n if ($tabEl.is('.ptr-content')) $ptrEls.add($tabEl);\n $ptrEls.each(el => {\n app.ptr.destroy(el);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.ptr-content').each(el => {\n app.ptr.create(el);\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.ptr-content').each(el => {\n app.ptr.destroy(el);\n });\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nclass DataTable extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const table = this;\n const defaults = {};\n\n // Extend defaults with modules params\n table.useModulesParams(defaults);\n table.params = extend(defaults, params);\n\n // El\n const $el = $(table.params.el);\n if ($el.length === 0) return undefined;\n table.$el = $el;\n table.el = $el[0];\n if (table.$el[0].f7DataTable) {\n const instance = table.$el[0].f7DataTable;\n table.destroy();\n return instance;\n }\n table.$el[0].f7DataTable = table;\n extend(table, {\n collapsible: $el.hasClass('data-table-collapsible'),\n // Headers\n $headerEl: $el.find('.data-table-header'),\n $headerSelectedEl: $el.find('.data-table-header-selected')\n });\n\n // Events\n function handleChange(e) {\n if (e.detail && e.detail.sentByF7DataTable) {\n // Scripted event, don't do anything\n return;\n }\n const $inputEl = $(this);\n const checked = $inputEl[0].checked;\n const columnIndex = $inputEl.parents('td,th').index();\n if ($inputEl.parents('thead').length > 0) {\n if (columnIndex === 0) {\n $el.find('tbody tr')[checked ? 'addClass' : 'removeClass']('data-table-row-selected');\n }\n $el.find(`tbody tr td:nth-child(${columnIndex + 1}) input`).prop('checked', checked).trigger('change', {\n sentByF7DataTable: true\n });\n $inputEl.prop('indeterminate', false);\n } else {\n if (columnIndex === 0) {\n $inputEl.parents('tr')[checked ? 'addClass' : 'removeClass']('data-table-row-selected');\n }\n const checkedRows = $el.find(`tbody .checkbox-cell:nth-child(${columnIndex + 1}) input[type=\"checkbox\"]:checked`).length;\n const totalRows = $el.find('tbody tr').length;\n const $headCheckboxEl = $el.find(`thead .checkbox-cell:nth-child(${columnIndex + 1}) input[type=\"checkbox\"]`);\n if (!checked) {\n $headCheckboxEl.prop('checked', false);\n } else if (checkedRows === totalRows) {\n $headCheckboxEl.prop('checked', true).trigger('change', {\n sentByF7DataTable: true\n });\n }\n $headCheckboxEl.prop('indeterminate', checkedRows > 0 && checkedRows < totalRows);\n }\n table.checkSelectedHeader();\n }\n function handleSortableClick() {\n const $cellEl = $(this);\n const isActive = $cellEl.hasClass('sortable-cell-active');\n const currentSort = $cellEl.hasClass('sortable-desc') ? 'desc' : 'asc';\n let newSort;\n if (isActive) {\n newSort = currentSort === 'desc' ? 'asc' : 'desc';\n $cellEl.removeClass('sortable-desc sortable-asc').addClass(`sortable-${newSort}`);\n } else {\n $el.find('thead .sortable-cell-active').removeClass('sortable-cell-active');\n $cellEl.addClass('sortable-cell-active');\n newSort = currentSort;\n }\n $cellEl.trigger('datatable:sort', newSort);\n table.emit('local::sort dataTableSort', table, newSort);\n }\n table.attachEvents = function attachEvents() {\n table.$el.on('change', '.checkbox-cell input[type=\"checkbox\"]', handleChange);\n table.$el.find('thead .sortable-cell').on('click', handleSortableClick);\n };\n table.detachEvents = function detachEvents() {\n table.$el.off('change', '.checkbox-cell input[type=\"checkbox\"]', handleChange);\n table.$el.find('thead .sortable-cell').off('click', handleSortableClick);\n };\n\n // Install Modules\n table.useModules();\n\n // Init\n table.init();\n return table;\n }\n setCollapsibleLabels() {\n const table = this;\n if (!table.collapsible) return;\n table.$el.find('tbody td:not(.checkbox-cell)').each(el => {\n const $el = $(el);\n const elIndex = $el.index();\n const collapsibleTitle = $el.attr('data-collapsible-title');\n if (!collapsibleTitle && collapsibleTitle !== '') {\n $el.attr('data-collapsible-title', table.$el.find('thead th').eq(elIndex).text());\n }\n });\n }\n checkSelectedHeader() {\n const table = this;\n if (table.$headerEl.length > 0 && table.$headerSelectedEl.length > 0) {\n const checkedItems = table.$el.find('tbody .checkbox-cell input:checked').length;\n table.$el[checkedItems > 0 ? 'addClass' : 'removeClass']('data-table-has-checked');\n table.$headerSelectedEl.find('.data-table-selected-count').text(checkedItems);\n }\n }\n init() {\n const table = this;\n table.attachEvents();\n table.setCollapsibleLabels();\n table.checkSelectedHeader();\n }\n destroy() {\n let table = this;\n table.$el.trigger('datatable:beforedestroy');\n table.emit('local::beforeDestroy dataTableBeforeDestroy', table);\n table.detachEvents();\n if (table.$el[0]) {\n table.$el[0].f7DataTable = null;\n delete table.$el[0].f7DataTable;\n }\n deleteProps(table);\n table = null;\n }\n}\nexport default DataTable;", "import $ from '../../shared/dom7.js';\nimport DataTable from './data-table-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'dataTable',\n static: {\n DataTable\n },\n create() {\n const app = this;\n app.dataTable = ConstructorMethods({\n defaultSelector: '.data-table',\n constructor: DataTable,\n app,\n domProp: 'f7DataTable'\n });\n },\n on: {\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.data-table-init').each(tableEl => {\n app.dataTable.destroy(tableEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.data-table-init').each(tableEl => {\n app.dataTable.create({\n el: tableEl\n });\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.data-table-init').each(tableEl => {\n app.dataTable.destroy(tableEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.data-table-init').each(tableEl => {\n app.dataTable.create({\n el: tableEl\n });\n });\n }\n },\n vnode: {\n 'data-table-init': {\n insert(vnode) {\n const app = this;\n const tableEl = vnode.elm;\n app.dataTable.create({\n el: tableEl\n });\n },\n destroy(vnode) {\n const app = this;\n const tableEl = vnode.elm;\n app.dataTable.destroy(tableEl);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods, getTranslate, nextFrame } from '../../shared/utils.js';\nconst Fab = {\n morphOpen(fabEl, targetEl) {\n const app = this;\n const $fabEl = $(fabEl);\n const $targetEl = $(targetEl);\n if ($targetEl.length === 0) return;\n $targetEl.transition(0).addClass('fab-morph-target-visible');\n const target = {\n width: $targetEl[0].offsetWidth,\n height: $targetEl[0].offsetHeight,\n offset: $targetEl.offset(),\n borderRadius: $targetEl.css('border-radius'),\n zIndex: $targetEl.css('z-index')\n };\n const fab = {\n width: $fabEl[0].offsetWidth,\n height: $fabEl[0].offsetHeight,\n offset: $fabEl.offset(),\n translateX: getTranslate($fabEl[0], 'x'),\n translateY: getTranslate($fabEl[0], 'y')\n };\n $fabEl[0].f7FabMorphData = {\n $targetEl,\n target,\n fab\n };\n const diffX = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;\n const diffY = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;\n const scaleX = target.width / fab.width;\n const scaleY = target.height / fab.height;\n let borderRadius = Math.ceil(parseInt(target.borderRadius, 10) / Math.max(scaleX, scaleY));\n if (borderRadius > 0) borderRadius += 2;\n $fabEl[0].f7FabMorphResizeHandler = function resizeHandler() {\n $fabEl.transition(0).transform('');\n $targetEl.transition(0);\n target.width = $targetEl[0].offsetWidth;\n target.height = $targetEl[0].offsetHeight;\n target.offset = $targetEl.offset();\n fab.offset = $fabEl.offset();\n const diffXNew = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;\n const diffYNew = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;\n const scaleXNew = target.width / fab.width;\n const scaleYNew = target.height / fab.height;\n $fabEl.transform(`translate3d(${-diffXNew}px, ${-diffYNew}px, 0) scale(${scaleXNew}, ${scaleYNew})`);\n };\n $targetEl.css('opacity', 0).transform(`scale(${1 / scaleX}, ${1 / scaleY})`);\n $fabEl.addClass('fab-opened').css('z-index', target.zIndex - 1).transform(`translate3d(${-diffX}px, ${-diffY}px, 0)`);\n $fabEl.transitionEnd(() => {\n $targetEl.transition('');\n nextFrame(() => {\n $targetEl.css('opacity', 1).transform('scale(1,1)');\n $fabEl.transform(`translate3d(${-diffX}px, ${-diffY}px, 0) scale(${scaleX}, ${scaleY})`).css('border-radius', `${borderRadius}px`).css('box-shadow', 'none').css('opacity', '0');\n });\n app.on('resize', $fabEl[0].f7FabMorphResizeHandler);\n if ($targetEl.parents('.page-content').length > 0) {\n $targetEl.parents('.page-content').on('scroll', $fabEl[0].f7FabMorphResizeHandler);\n }\n });\n },\n morphClose(fabEl) {\n const app = this;\n const $fabEl = $(fabEl);\n const morphData = $fabEl[0].f7FabMorphData;\n if (!morphData) return;\n const {\n $targetEl,\n target,\n fab\n } = morphData;\n if ($targetEl.length === 0) return;\n const diffX = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;\n const diffY = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;\n const scaleX = target.width / fab.width;\n const scaleY = target.height / fab.height;\n app.off('resize', $fabEl[0].f7FabMorphResizeHandler);\n if ($targetEl.parents('.page-content').length > 0) {\n $targetEl.parents('.page-content').off('scroll', $fabEl[0].f7FabMorphResizeHandler);\n }\n $targetEl.css('opacity', 0).transform(`scale(${1 / scaleX}, ${1 / scaleY})`);\n $fabEl.transition('').css('box-shadow', '').css('border-radius', '').css('opacity', '1').transform(`translate3d(${-diffX}px, ${-diffY}px, 0)`);\n $fabEl.transitionEnd(() => {\n $fabEl.css('z-index', '').removeClass('fab-opened').transform('');\n nextFrame(() => {\n $fabEl.transitionEnd(() => {\n $targetEl.removeClass('fab-morph-target-visible').css('opacity', '').transform('').transition('');\n });\n });\n });\n },\n open(fabEl, targetEl) {\n const app = this;\n const $fabEl = $(fabEl).eq(0);\n const $buttonsEl = $fabEl.find('.fab-buttons');\n if (!$fabEl.length) return;\n if ($fabEl.hasClass('fab-opened')) return;\n if (!$buttonsEl.length && !$fabEl.hasClass('fab-morph')) return;\n if (app.fab.openedEl) {\n if (app.fab.openedEl === $fabEl[0]) return;\n app.fab.close(app.fab.openedEl);\n }\n app.fab.openedEl = $fabEl[0];\n if ($fabEl.hasClass('fab-morph')) {\n app.fab.morphOpen($fabEl, targetEl || $fabEl.attr('data-morph-to'));\n } else {\n $fabEl.addClass('fab-opened');\n }\n $fabEl.siblings('.fab-backdrop').addClass('backdrop-in');\n $fabEl.trigger('fab:open');\n },\n close(fabEl) {\n if (fabEl === void 0) {\n fabEl = '.fab-opened';\n }\n const app = this;\n const $fabEl = $(fabEl).eq(0);\n const $buttonsEl = $fabEl.find('.fab-buttons');\n if (!$fabEl.length) return;\n if (!$fabEl.hasClass('fab-opened')) return;\n if (!$buttonsEl.length && !$fabEl.hasClass('fab-morph')) return;\n app.fab.openedEl = null;\n if ($fabEl.hasClass('fab-morph')) {\n app.fab.morphClose($fabEl);\n } else {\n $fabEl.removeClass('fab-opened');\n }\n $fabEl.siblings('.fab-backdrop').removeClass('backdrop-in');\n $fabEl.trigger('fab:close');\n },\n toggle(fabEl) {\n const app = this;\n const $fabEl = $(fabEl);\n if (!$fabEl.hasClass('fab-opened')) app.fab.open(fabEl);else app.fab.close(fabEl);\n }\n};\nexport default {\n name: 'fab',\n create() {\n const app = this;\n bindMethods(app, {\n fab: {\n openedEl: null,\n ...Fab\n }\n });\n },\n clicks: {\n '.fab > a': function open($clickedEl) {\n const app = this;\n app.fab.toggle($clickedEl.parents('.fab'));\n },\n '.fab-open': function open($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.fab.open(data.fab);\n },\n '.fab-close': function close($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n app.fab.close(data.fab);\n },\n '.fab-backdrop': function close() {\n const app = this;\n app.fab.close();\n }\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, nextTick, deleteProps } from '../../shared/utils.js';\nimport FrameworkClass from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport removeDiacritics from './remove-diacritics.js';\nclass Searchbar extends FrameworkClass {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const sb = this;\n const defaults = {\n el: undefined,\n inputEl: undefined,\n inputEvents: 'change input compositionend',\n disableButton: true,\n disableButtonEl: undefined,\n backdropEl: undefined,\n searchContainer: undefined,\n // container to search, HTMLElement or CSS selector\n searchItem: 'li',\n // single item selector, CSS selector\n searchIn: undefined,\n // where to search in item, CSS selector\n searchGroup: '.list-group',\n searchGroupTitle: '.list-group-title',\n ignore: '.searchbar-ignore',\n foundEl: '.searchbar-found',\n notFoundEl: '.searchbar-not-found',\n hideOnEnableEl: '.searchbar-hide-on-enable',\n hideOnSearchEl: '.searchbar-hide-on-search',\n backdrop: true,\n removeDiacritics: true,\n customSearch: false,\n hideGroupTitles: true,\n hideGroups: true,\n disableOnBackdropClick: true,\n expandable: false,\n inline: false\n };\n\n // Extend defaults with modules params\n sb.useModulesParams(defaults);\n sb.params = extend(defaults, params);\n const $el = $(sb.params.el);\n if ($el.length === 0) return sb;\n if ($el[0].f7Searchbar) return $el[0].f7Searchbar;\n $el[0].f7Searchbar = sb;\n let $pageEl;\n const $navbarEl = $el.parents('.navbar');\n if ($el.parents('.page').length > 0) {\n $pageEl = $el.parents('.page');\n } else if ($navbarEl.length > 0) {\n $pageEl = $(app.navbar.getPageByEl($navbarEl[0]));\n if (!$pageEl.length) {\n const $currentPageEl = $el.parents('.view').find('.page-current');\n if ($currentPageEl[0] && $currentPageEl[0].f7Page && $currentPageEl[0].f7Page.navbarEl === $navbarEl[0]) {\n $pageEl = $currentPageEl;\n }\n }\n }\n let $foundEl;\n if (params.foundEl) {\n $foundEl = $(params.foundEl);\n } else if (typeof sb.params.foundEl === 'string' && $pageEl) {\n $foundEl = $pageEl.find(sb.params.foundEl);\n }\n let $notFoundEl;\n if (params.notFoundEl) {\n $notFoundEl = $(params.notFoundEl);\n } else if (typeof sb.params.notFoundEl === 'string' && $pageEl) {\n $notFoundEl = $pageEl.find(sb.params.notFoundEl);\n }\n let $hideOnEnableEl;\n if (params.hideOnEnableEl) {\n $hideOnEnableEl = $(params.hideOnEnableEl);\n } else if (typeof sb.params.hideOnEnableEl === 'string' && $pageEl) {\n $hideOnEnableEl = $pageEl.find(sb.params.hideOnEnableEl);\n }\n let $hideOnSearchEl;\n if (params.hideOnSearchEl) {\n $hideOnSearchEl = $(params.hideOnSearchEl);\n } else if (typeof sb.params.hideOnSearchEl === 'string' && $pageEl) {\n $hideOnSearchEl = $pageEl.find(sb.params.hideOnSearchEl);\n }\n const expandable = sb.params.expandable || $el.hasClass('searchbar-expandable');\n const inline = sb.params.inline || $el.hasClass('searchbar-inline');\n if (typeof sb.params.backdrop === 'undefined') {\n sb.params.backdrop = !inline;\n }\n let $backdropEl;\n if (sb.params.backdrop) {\n if (sb.params.backdropEl) {\n $backdropEl = $(sb.params.backdropEl);\n } else if ($pageEl && $pageEl.length > 0) {\n $backdropEl = $pageEl.find('.searchbar-backdrop');\n } else {\n $backdropEl = $el.siblings('.searchbar-backdrop');\n }\n if ($backdropEl.length === 0) {\n $backdropEl = $('');\n if ($pageEl && $pageEl.length) {\n if ($el.parents($pageEl).length > 0 && $navbarEl && $el.parents($navbarEl).length === 0) {\n $backdropEl.insertBefore($el);\n } else {\n $backdropEl.insertBefore($pageEl.find('.page-content').eq(0));\n }\n } else {\n $backdropEl.insertBefore($el);\n }\n }\n }\n let $searchContainer;\n if (sb.params.searchContainer) {\n $searchContainer = $(sb.params.searchContainer);\n }\n let $inputEl;\n if (sb.params.inputEl) {\n $inputEl = $(sb.params.inputEl);\n } else {\n $inputEl = $el.find('input[type=\"search\"]').eq(0);\n }\n let $disableButtonEl;\n if (sb.params.disableButton) {\n if (sb.params.disableButtonEl) {\n $disableButtonEl = $(sb.params.disableButtonEl);\n } else {\n $disableButtonEl = $el.find('.searchbar-disable-button');\n }\n }\n extend(sb, {\n app,\n view: app.views.get($el.parents('.view')),\n $el,\n el: $el[0],\n $backdropEl,\n backdropEl: $backdropEl && $backdropEl[0],\n $searchContainer,\n searchContainer: $searchContainer && $searchContainer[0],\n $inputEl,\n inputEl: $inputEl[0],\n $disableButtonEl,\n disableButtonEl: $disableButtonEl && $disableButtonEl[0],\n disableButtonHasMargin: false,\n $pageEl,\n pageEl: $pageEl && $pageEl[0],\n $navbarEl,\n navbarEl: $navbarEl && $navbarEl[0],\n $foundEl,\n foundEl: $foundEl && $foundEl[0],\n $notFoundEl,\n notFoundEl: $notFoundEl && $notFoundEl[0],\n $hideOnEnableEl,\n hideOnEnableEl: $hideOnEnableEl && $hideOnEnableEl[0],\n $hideOnSearchEl,\n hideOnSearchEl: $hideOnSearchEl && $hideOnSearchEl[0],\n previousQuery: '',\n query: '',\n isVirtualList: $searchContainer && $searchContainer.hasClass('virtual-list'),\n virtualList: undefined,\n enabled: false,\n expandable,\n inline\n });\n\n // Events\n function preventSubmit(e) {\n e.preventDefault();\n }\n function onInputFocus(e) {\n sb.enable(e);\n sb.$el.addClass('searchbar-focused');\n }\n function onInputBlur() {\n sb.$el.removeClass('searchbar-focused');\n }\n function onInputChange() {\n const value = sb.$inputEl.val().trim();\n if (sb.$searchContainer && sb.$searchContainer.length > 0 && (sb.params.searchIn || sb.isVirtualList || sb.params.searchIn === sb.params.searchItem) || sb.params.customSearch) {\n sb.search(value, true);\n }\n }\n function onInputClear(e, previousValue) {\n sb.$el.trigger('searchbar:clear', previousValue);\n sb.emit('local::clear searchbarClear', sb, previousValue);\n }\n function disableOnClick(e) {\n sb.disable(e);\n }\n function onPageBeforeOut() {\n if (!sb || sb && !sb.$el) return;\n if (sb.enabled) {\n sb.$el.removeClass('searchbar-enabled');\n if (sb.expandable) {\n sb.$el.parents('.navbar').removeClass('with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition');\n }\n }\n }\n function onPageBeforeIn() {\n if (!sb || sb && !sb.$el) return;\n if (sb.enabled) {\n sb.$el.addClass('searchbar-enabled');\n if (sb.expandable) {\n sb.$el.parents('.navbar').addClass('with-searchbar-expandable-enabled-no-transition');\n }\n }\n }\n sb.attachEvents = function attachEvents() {\n $el.on('submit', preventSubmit);\n if (sb.params.disableButton) {\n sb.$disableButtonEl.on('click', disableOnClick);\n }\n if (sb.params.disableOnBackdropClick && sb.$backdropEl) {\n sb.$backdropEl.on('click', disableOnClick);\n }\n if (sb.expandable && app.theme === 'ios' && sb.view && $navbarEl.length && sb.$pageEl) {\n sb.$pageEl.on('page:beforeout', onPageBeforeOut);\n sb.$pageEl.on('page:beforein', onPageBeforeIn);\n }\n sb.$inputEl.on('focus', onInputFocus);\n sb.$inputEl.on('blur', onInputBlur);\n sb.$inputEl.on(sb.params.inputEvents, onInputChange);\n sb.$inputEl.on('input:clear', onInputClear);\n };\n sb.detachEvents = function detachEvents() {\n $el.off('submit', preventSubmit);\n if (sb.params.disableButton) {\n sb.$disableButtonEl.off('click', disableOnClick);\n }\n if (sb.params.disableOnBackdropClick && sb.$backdropEl) {\n sb.$backdropEl.off('click', disableOnClick);\n }\n if (sb.expandable && app.theme === 'ios' && sb.view && $navbarEl.length && sb.$pageEl) {\n sb.$pageEl.off('page:beforeout', onPageBeforeOut);\n sb.$pageEl.off('page:beforein', onPageBeforeIn);\n }\n sb.$inputEl.off('focus', onInputFocus);\n sb.$inputEl.off('blur', onInputBlur);\n sb.$inputEl.off(sb.params.inputEvents, onInputChange);\n sb.$inputEl.off('input:clear', onInputClear);\n };\n\n // Install Modules\n sb.useModules();\n\n // Init\n sb.init();\n return sb;\n }\n clear(e) {\n const sb = this;\n if (!sb.query && e && $(e.target).hasClass('searchbar-clear')) {\n sb.disable();\n return sb;\n }\n const previousQuery = sb.value;\n sb.$inputEl.val('').trigger('change').focus();\n sb.$el.trigger('searchbar:clear', previousQuery);\n sb.emit('local::clear searchbarClear', sb, previousQuery);\n return sb;\n }\n setDisableButtonMargin() {\n const sb = this;\n if (sb.expandable) return;\n const app = sb.app;\n sb.$disableButtonEl.transition(0).show();\n sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, `${-sb.disableButtonEl.offsetWidth}px`);\n /* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_clientLeft\"] }] */\n sb._clientLeft = sb.$disableButtonEl[0].clientLeft;\n sb.$disableButtonEl.transition('');\n sb.disableButtonHasMargin = true;\n }\n enable(setFocus) {\n const sb = this;\n if (sb.enabled) return sb;\n const app = sb.app;\n const document = getDocument();\n const device = getDevice();\n sb.enabled = true;\n function enable() {\n if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch) && !sb.$el.hasClass('searchbar-enabled') && !sb.query) {\n sb.backdropShow();\n }\n sb.$el.addClass('searchbar-enabled');\n if (!sb.$disableButtonEl || sb.$disableButtonEl && sb.$disableButtonEl.length === 0) {\n sb.$el.addClass('searchbar-enabled-no-disable-button');\n }\n if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== 'md') {\n if (!sb.disableButtonHasMargin) {\n sb.setDisableButtonMargin();\n }\n sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, '0px');\n }\n if (sb.expandable) {\n const $navbarEl = sb.$el.parents('.navbar');\n if ($navbarEl.hasClass('navbar-large') && sb.$pageEl) {\n const $pageContentEl = sb.$pageEl.find('.page-content');\n const $titleLargeEl = $navbarEl.find('.title-large');\n $pageContentEl.addClass('with-searchbar-expandable-enabled');\n if ($navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-large-collapsed') && $titleLargeEl.length && $pageContentEl.length) {\n $pageContentEl.transition(0);\n $pageContentEl[0].scrollTop -= $titleLargeEl[0].offsetHeight;\n setTimeout(() => {\n $pageContentEl.transition('');\n }, 200);\n }\n }\n if (app.theme === 'md' && $navbarEl.length) {\n $navbarEl.addClass('with-searchbar-expandable-enabled');\n } else {\n $navbarEl.addClass('with-searchbar-expandable-enabled');\n if ($navbarEl.hasClass('navbar-large')) {\n $navbarEl.addClass('navbar-large-collapsed');\n }\n }\n }\n if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.addClass('hidden-by-searchbar');\n sb.$el.trigger('searchbar:enable');\n sb.emit('local::enable searchbarEnable', sb);\n }\n let needsFocus = false;\n if (setFocus === true) {\n if (document.activeElement !== sb.inputEl) {\n needsFocus = true;\n }\n }\n const isIos = device.ios && app.theme === 'ios';\n if (isIos) {\n if (sb.expandable) {\n if (needsFocus) sb.$inputEl.focus();\n enable();\n } else {\n if (needsFocus) sb.$inputEl.focus();\n if (setFocus && (setFocus.type === 'focus' || setFocus === true)) {\n nextTick(() => {\n enable();\n }, 400);\n } else {\n enable();\n }\n }\n } else {\n if (needsFocus) sb.$inputEl.focus();\n if (app.theme === 'md' && sb.expandable) {\n sb.$el.parents('.page, .view, .navbar-inner, .navbar').scrollLeft(app.rtl ? 100 : 0);\n }\n enable();\n }\n return sb;\n }\n disable() {\n const sb = this;\n if (!sb.enabled) return sb;\n const app = sb.app;\n sb.$inputEl.val('').trigger('change');\n sb.$el.removeClass('searchbar-enabled searchbar-focused searchbar-enabled-no-disable-button');\n if (sb.expandable) {\n const $navbarEl = sb.$el.parents('.navbar');\n const $pageContentEl = sb.$pageEl && sb.$pageEl.find('.page-content');\n if ($navbarEl.hasClass('navbar-large') && $pageContentEl.length) {\n const $titleLargeEl = $navbarEl.find('.title-large');\n sb.$el.transitionEnd(() => {\n $pageContentEl.removeClass('with-searchbar-expandable-closing');\n });\n if ($navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-large-collapsed') && $titleLargeEl.length) {\n const scrollTop = $pageContentEl[0].scrollTop;\n const titleLargeHeight = $titleLargeEl[0].offsetHeight;\n if (scrollTop > titleLargeHeight) {\n $pageContentEl.transition(0);\n $pageContentEl[0].scrollTop = scrollTop + titleLargeHeight;\n setTimeout(() => {\n $pageContentEl.transition('');\n }, 200);\n }\n }\n $pageContentEl.removeClass('with-searchbar-expandable-enabled').addClass('with-searchbar-expandable-closing');\n }\n if (app.theme === 'md' && $navbarEl.length) {\n $navbarEl.removeClass('with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition').addClass('with-searchbar-expandable-closing');\n sb.$el.transitionEnd(() => {\n $navbarEl.removeClass('with-searchbar-expandable-closing');\n });\n } else {\n $navbarEl.removeClass('with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition').addClass('with-searchbar-expandable-closing');\n sb.$el.transitionEnd(() => {\n $navbarEl.removeClass('with-searchbar-expandable-closing');\n });\n if (sb.$pageEl) {\n sb.$pageEl.find('.page-content').trigger('scroll');\n }\n }\n }\n if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== 'md') {\n sb.$disableButtonEl.css(`margin-${app.rtl ? 'left' : 'right'}`, `${-sb.disableButtonEl.offsetWidth}px`);\n }\n if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch)) {\n sb.backdropHide();\n }\n sb.enabled = false;\n sb.$inputEl.blur();\n if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.removeClass('hidden-by-searchbar');\n sb.$el.trigger('searchbar:disable');\n sb.emit('local::disable searchbarDisable', sb);\n return sb;\n }\n toggle() {\n const sb = this;\n if (sb.enabled) sb.disable();else sb.enable(true);\n return sb;\n }\n backdropShow() {\n const sb = this;\n if (sb.$backdropEl) {\n sb.$backdropEl.addClass('searchbar-backdrop-in');\n }\n return sb;\n }\n backdropHide() {\n const sb = this;\n if (sb.$backdropEl) {\n sb.$backdropEl.removeClass('searchbar-backdrop-in');\n }\n return sb;\n }\n search(query, internal) {\n const sb = this;\n sb.previousQuery = sb.query || '';\n if (query === sb.previousQuery) return sb;\n if (!internal) {\n if (!sb.enabled) {\n sb.enable();\n }\n sb.$inputEl.val(query);\n sb.$inputEl.trigger('input');\n }\n sb.query = query;\n sb.value = query;\n const {\n $searchContainer,\n $el,\n $foundEl,\n $notFoundEl,\n $hideOnSearchEl,\n isVirtualList\n } = sb;\n\n // Hide on search element\n if (query.length > 0 && $hideOnSearchEl) {\n $hideOnSearchEl.addClass('hidden-by-searchbar');\n } else if ($hideOnSearchEl) {\n $hideOnSearchEl.removeClass('hidden-by-searchbar');\n }\n // Add active/inactive classes on overlay\n if ($searchContainer && $searchContainer.length && $el.hasClass('searchbar-enabled') || sb.params.customSearch && $el.hasClass('searchbar-enabled')) {\n if (query.length === 0) {\n sb.backdropShow();\n } else {\n sb.backdropHide();\n }\n }\n if (sb.params.customSearch) {\n $el.trigger('searchbar:search', {\n query,\n previousQuery: sb.previousQuery\n });\n sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery);\n return sb;\n }\n let foundItems = [];\n let vlQuery;\n if (isVirtualList) {\n sb.virtualList = $searchContainer[0].f7VirtualList;\n if (query.trim() === '') {\n sb.virtualList.resetFilter();\n if ($notFoundEl) $notFoundEl.hide();\n if ($foundEl) $foundEl.show();\n $el.trigger('searchbar:search', {\n query,\n previousQuery: sb.previousQuery\n });\n sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery);\n return sb;\n }\n vlQuery = sb.params.removeDiacritics ? removeDiacritics(query) : query;\n if (sb.virtualList.params.searchAll) {\n foundItems = sb.virtualList.params.searchAll(vlQuery, sb.virtualList.items) || [];\n } else if (sb.virtualList.params.searchByItem) {\n for (let i = 0; i < sb.virtualList.items.length; i += 1) {\n if (sb.virtualList.params.searchByItem(vlQuery, sb.virtualList.items[i], i)) {\n foundItems.push(i);\n }\n }\n }\n } else {\n let values;\n if (sb.params.removeDiacritics) values = removeDiacritics(query.trim().toLowerCase()).split(' ');else {\n values = query.trim().toLowerCase().split(' ');\n }\n $searchContainer.find(sb.params.searchItem).removeClass('hidden-by-searchbar').each(itemEl => {\n const $itemEl = $(itemEl);\n let compareWithText = [];\n let $searchIn = sb.params.searchIn ? $itemEl.find(sb.params.searchIn) : $itemEl;\n if (sb.params.searchIn === sb.params.searchItem) {\n $searchIn = $itemEl;\n }\n $searchIn.each(searchInEl => {\n let itemText = $(searchInEl).text().trim().toLowerCase();\n if (sb.params.removeDiacritics) itemText = removeDiacritics(itemText);\n compareWithText.push(itemText);\n });\n compareWithText = compareWithText.join(' ');\n let wordsMatch = 0;\n for (let i = 0; i < values.length; i += 1) {\n if (compareWithText.indexOf(values[i]) >= 0) wordsMatch += 1;\n }\n if (wordsMatch !== values.length && !(sb.params.ignore && $itemEl.is(sb.params.ignore))) {\n $itemEl.addClass('hidden-by-searchbar');\n } else {\n foundItems.push($itemEl[0]);\n }\n });\n if (sb.params.hideGroupTitles) {\n $searchContainer.find(sb.params.searchGroupTitle).each(titleEl => {\n const $titleEl = $(titleEl);\n const $nextElements = $titleEl.nextAll(sb.params.searchItem);\n let hide = true;\n for (let i = 0; i < $nextElements.length; i += 1) {\n const $nextEl = $nextElements.eq(i);\n if ($nextEl.is(sb.params.searchGroupTitle)) break;\n if (!$nextEl.hasClass('hidden-by-searchbar')) {\n hide = false;\n }\n }\n const ignore = sb.params.ignore && $titleEl.is(sb.params.ignore);\n if (hide && !ignore) $titleEl.addClass('hidden-by-searchbar');else $titleEl.removeClass('hidden-by-searchbar');\n });\n }\n if (sb.params.hideGroups) {\n $searchContainer.find(sb.params.searchGroup).each(groupEl => {\n const $groupEl = $(groupEl);\n const ignore = sb.params.ignore && $groupEl.is(sb.params.ignore);\n // eslint-disable-next-line\n const notHidden = $groupEl.find(sb.params.searchItem).filter(el => {\n return !$(el).hasClass('hidden-by-searchbar');\n });\n if (notHidden.length === 0 && !ignore) {\n $groupEl.addClass('hidden-by-searchbar');\n } else {\n $groupEl.removeClass('hidden-by-searchbar');\n }\n });\n }\n }\n if (foundItems.length === 0) {\n if ($notFoundEl) $notFoundEl.show();\n if ($foundEl) $foundEl.hide();\n } else {\n if ($notFoundEl) $notFoundEl.hide();\n if ($foundEl) $foundEl.show();\n }\n if (isVirtualList && sb.virtualList) {\n sb.virtualList.filterItems(foundItems);\n }\n $el.trigger('searchbar:search', {\n query,\n previousQuery: sb.previousQuery,\n foundItems\n });\n sb.emit('local::search searchbarSearch', sb, query, sb.previousQuery, foundItems);\n return sb;\n }\n init() {\n const sb = this;\n if (sb.expandable && sb.$el) sb.$el.addClass('searchbar-expandable');\n if (sb.inline && sb.$el) sb.$el.addClass('searchbar-inline');\n sb.attachEvents();\n }\n destroy() {\n const sb = this;\n sb.emit('local::beforeDestroy searchbarBeforeDestroy', sb);\n sb.$el.trigger('searchbar:beforedestroy');\n sb.detachEvents();\n if (sb.$el[0]) {\n sb.$el[0].f7Searchbar = null;\n delete sb.$el[0].f7Searchbar;\n }\n deleteProps(sb);\n }\n}\nexport default Searchbar;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Searchbar from './searchbar-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'searchbar',\n static: {\n Searchbar\n },\n create() {\n const app = this;\n app.searchbar = ConstructorMethods({\n defaultSelector: '.searchbar',\n constructor: Searchbar,\n app,\n domProp: 'f7Searchbar',\n addMethods: 'clear enable disable toggle search'.split(' ')\n });\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.searchbar-init').each(searchbarEl => {\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.searchbar-init').each(searchbarEl => {\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.searchbar-init').each(searchbarEl => {\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.searchbar-init').each(searchbarEl => {\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n });\n }\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.searchbar-init').each(searchbarEl => {\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.searchbar-init').each(searchbarEl => {\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n });\n }\n }\n },\n clicks: {\n '.searchbar-clear': function clear($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.clear();\n },\n '.searchbar-enable': function enable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.enable(true);\n },\n '.searchbar-disable': function disable($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.disable();\n },\n '.searchbar-toggle': function toggle($clickedEl, data) {\n if (data === void 0) {\n data = {};\n }\n const app = this;\n const sb = app.searchbar.get(data.searchbar);\n if (sb) sb.toggle();\n }\n },\n vnode: {\n 'searchbar-init': {\n insert(vnode) {\n const app = this;\n const searchbarEl = vnode.elm;\n const $searchbarEl = $(searchbarEl);\n app.searchbar.create(extend($searchbarEl.dataset(), {\n el: searchbarEl\n }));\n },\n destroy(vnode) {\n const searchbarEl = vnode.elm;\n if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {\n searchbarEl.f7Searchbar.destroy();\n }\n }\n }\n }\n};", "function _extends() { _extends = Object.assign ? Object.assign.bind() : 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; }; return _extends.apply(this, arguments); }\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Messages extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const m = this;\n const defaults = {\n autoLayout: true,\n messages: [],\n newMessagesFirst: false,\n scrollMessages: true,\n scrollMessagesOnEdge: true,\n firstMessageRule: undefined,\n lastMessageRule: undefined,\n tailMessageRule: undefined,\n sameNameMessageRule: undefined,\n sameHeaderMessageRule: undefined,\n sameFooterMessageRule: undefined,\n sameAvatarMessageRule: undefined,\n customClassMessageRule: undefined,\n renderMessage: undefined\n };\n\n // Extend defaults with modules params\n m.useModulesParams(defaults);\n m.params = extend(defaults, params);\n const $el = $(params.el).eq(0);\n if ($el.length === 0) return m;\n if ($el[0].f7Messages) return $el[0].f7Messages;\n $el[0].f7Messages = m;\n const $pageContentEl = $el.closest('.page-content').eq(0);\n extend(m, {\n messages: m.params.messages,\n $el,\n el: $el[0],\n $pageContentEl,\n pageContentEl: $pageContentEl[0]\n });\n // Install Modules\n m.useModules();\n\n // Init\n m.init();\n return m;\n }\n // eslint-disable-next-line\n getMessageData(messageEl) {\n const $messageEl = $(messageEl);\n const data = {\n name: $messageEl.find('.message-name').html(),\n header: $messageEl.find('.message-header').html(),\n textHeader: $messageEl.find('.message-text-header').html(),\n textFooter: $messageEl.find('.message-text-footer').html(),\n footer: $messageEl.find('.message-footer').html(),\n isTitle: $messageEl.hasClass('messages-title'),\n type: $messageEl.hasClass('message-sent') ? 'sent' : 'received',\n text: $messageEl.find('.message-text').html(),\n image: $messageEl.find('.message-image').html(),\n imageSrc: $messageEl.find('.message-image img').attr('src'),\n typing: $messageEl.hasClass('message-typing')\n };\n if (data.isTitle) {\n data.text = $messageEl.html();\n }\n if (data.text && data.textHeader) {\n data.text = data.text.replace(``, '');\n }\n if (data.text && data.textFooter) {\n data.text = data.text.replace(``, '');\n }\n let avatar = $messageEl.find('.message-avatar').css('background-image');\n if (avatar === 'none' || avatar === '') avatar = undefined;\n if (avatar && typeof avatar === 'string') {\n avatar = avatar.replace('url(', '').replace(')', '').replace(/\"/g, '').replace(/'/g, '');\n } else {\n avatar = undefined;\n }\n data.avatar = avatar;\n return data;\n }\n getMessagesData() {\n const m = this;\n const data = [];\n m.$el.find('.message, .messages-title').each(messageEl => {\n data.push(m.getMessageData(messageEl));\n });\n return data;\n }\n renderMessage(messageToRender) {\n const m = this;\n const message = extend({\n type: 'sent',\n attrs: {}\n }, messageToRender);\n if (m.params.renderMessage) {\n return m.params.renderMessage.call(m, message);\n }\n if (message.isTitle) {\n return `${message.text}
`;\n }\n return $jsx(\"div\", _extends({\n class: `message message-${message.type} ${message.isTyping ? 'message-typing' : ''} ${message.cssClass || ''}`\n }, message.attrs), message.avatar && $jsx(\"div\", {\n class: \"message-avatar\",\n style: `background-image:url(${message.avatar})`\n }), $jsx(\"div\", {\n class: \"message-content\"\n }, message.name && $jsx(\"div\", {\n class: \"message-name\"\n }, message.name), message.header && $jsx(\"div\", {\n class: \"message-header\"\n }, message.header), $jsx(\"div\", {\n class: \"message-bubble\"\n }, message.textHeader && $jsx(\"div\", {\n class: \"message-text-header\"\n }, message.textHeader), message.image && $jsx(\"div\", {\n class: \"message-image\"\n }, message.image), message.imageSrc && !message.image && $jsx(\"div\", {\n class: \"message-image\"\n }, $jsx(\"img\", {\n src: message.imageSrc\n })), (message.text || message.isTyping) && $jsx(\"div\", {\n class: \"message-text\"\n }, message.text || '', message.isTyping && $jsx(\"div\", {\n class: \"message-typing-indicator\"\n }, $jsx(\"div\", null), $jsx(\"div\", null), $jsx(\"div\", null))), message.textFooter && $jsx(\"div\", {\n class: \"message-text-footer\"\n }, message.textFooter)), message.footer && $jsx(\"div\", {\n class: \"message-footer\"\n }, message.footer)));\n }\n renderMessages(messagesToRender, method) {\n if (messagesToRender === void 0) {\n messagesToRender = this.messages;\n }\n if (method === void 0) {\n method = this.params.newMessagesFirst ? 'prepend' : 'append';\n }\n const m = this;\n const html = messagesToRender.map(message => m.renderMessage(message)).join('');\n m.$el[method](html);\n }\n isFirstMessage() {\n const m = this;\n if (m.params.firstMessageRule) return m.params.firstMessageRule(...arguments);\n return false;\n }\n isLastMessage() {\n const m = this;\n if (m.params.lastMessageRule) return m.params.lastMessageRule(...arguments);\n return false;\n }\n isTailMessage() {\n const m = this;\n if (m.params.tailMessageRule) return m.params.tailMessageRule(...arguments);\n return false;\n }\n isSameNameMessage() {\n const m = this;\n if (m.params.sameNameMessageRule) return m.params.sameNameMessageRule(...arguments);\n return false;\n }\n isSameHeaderMessage() {\n const m = this;\n if (m.params.sameHeaderMessageRule) return m.params.sameHeaderMessageRule(...arguments);\n return false;\n }\n isSameFooterMessage() {\n const m = this;\n if (m.params.sameFooterMessageRule) return m.params.sameFooterMessageRule(...arguments);\n return false;\n }\n isSameAvatarMessage() {\n const m = this;\n if (m.params.sameAvatarMessageRule) return m.params.sameAvatarMessageRule(...arguments);\n return false;\n }\n isCustomClassMessage() {\n const m = this;\n if (m.params.customClassMessageRule) return m.params.customClassMessageRule(...arguments);\n return undefined;\n }\n layout() {\n const m = this;\n m.$el.find('.message, .messages-title').each((messageEl, index) => {\n const $messageEl = $(messageEl);\n if (!m.messages) {\n m.messages = m.getMessagesData();\n }\n const classes = [];\n const message = m.messages[index];\n const previousMessage = m.messages[index - 1];\n const nextMessage = m.messages[index + 1];\n if (m.isFirstMessage(message, previousMessage, nextMessage)) {\n classes.push('message-first');\n }\n if (m.isLastMessage(message, previousMessage, nextMessage)) {\n classes.push('message-last');\n }\n if (m.isTailMessage(message, previousMessage, nextMessage)) {\n classes.push('message-tail');\n }\n if (m.isSameNameMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-name');\n }\n if (m.isSameHeaderMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-header');\n }\n if (m.isSameFooterMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-footer');\n }\n if (m.isSameAvatarMessage(message, previousMessage, nextMessage)) {\n classes.push('message-same-avatar');\n }\n let customMessageClasses = m.isCustomClassMessage(message, previousMessage, nextMessage);\n if (customMessageClasses && customMessageClasses.length) {\n if (typeof customMessageClasses === 'string') {\n customMessageClasses = customMessageClasses.split(' ');\n }\n customMessageClasses.forEach(customClass => {\n classes.push(customClass);\n });\n }\n $messageEl.removeClass('message-first message-last message-tail message-same-name message-same-header message-same-footer message-same-avatar');\n classes.forEach(className => {\n $messageEl.addClass(className);\n });\n });\n }\n clear() {\n const m = this;\n m.messages = [];\n m.$el.html('');\n }\n removeMessage(messageToRemove, layout) {\n if (layout === void 0) {\n layout = true;\n }\n const m = this;\n // Index or El\n let index;\n let $el;\n if (typeof messageToRemove === 'number') {\n index = messageToRemove;\n $el = m.$el.find('.message, .messages-title').eq(index);\n } else if (m.messages && m.messages.indexOf(messageToRemove) >= 0) {\n index = m.messages.indexOf(messageToRemove);\n $el = m.$el.children().eq(index);\n } else {\n $el = $(messageToRemove);\n index = $el.index();\n }\n if ($el.length === 0) {\n return m;\n }\n $el.remove();\n m.messages.splice(index, 1);\n if (m.params.autoLayout && layout) m.layout();\n return m;\n }\n removeMessages(messagesToRemove, layout) {\n if (layout === void 0) {\n layout = true;\n }\n const m = this;\n if (Array.isArray(messagesToRemove)) {\n const messagesToRemoveEls = [];\n messagesToRemove.forEach(messageToRemoveIndex => {\n messagesToRemoveEls.push(m.$el.find('.message, .messages-title').eq(messageToRemoveIndex));\n });\n messagesToRemoveEls.forEach(messageToRemove => {\n m.removeMessage(messageToRemove, false);\n });\n } else {\n $(messagesToRemove).each(messageToRemove => {\n m.removeMessage(messageToRemove, false);\n });\n }\n if (m.params.autoLayout && layout) m.layout();\n return m;\n }\n addMessage() {\n const m = this;\n let messageToAdd;\n let animate;\n let method;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof args[1] === 'boolean') {\n [messageToAdd, animate, method] = args;\n } else {\n [messageToAdd, method, animate] = args;\n }\n if (typeof animate === 'undefined') {\n animate = true;\n }\n if (typeof method === 'undefined') {\n method = m.params.newMessagesFirst ? 'prepend' : 'append';\n }\n return m.addMessages([messageToAdd], animate, method);\n }\n setScrollData() {\n const m = this;\n // Define scroll positions before new messages added\n const scrollHeightBefore = m.pageContentEl.scrollHeight;\n const heightBefore = m.pageContentEl.offsetHeight;\n const scrollBefore = m.pageContentEl.scrollTop;\n m.scrollData = {\n scrollHeightBefore,\n heightBefore,\n scrollBefore\n };\n return {\n scrollHeightBefore,\n heightBefore,\n scrollBefore\n };\n }\n addMessages() {\n const m = this;\n let messagesToAdd;\n let animate;\n let method;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[1] === 'boolean') {\n [messagesToAdd, animate, method] = args;\n } else {\n [messagesToAdd, method, animate] = args;\n }\n if (typeof animate === 'undefined') {\n animate = true;\n }\n if (typeof method === 'undefined') {\n method = m.params.newMessagesFirst ? 'prepend' : 'append';\n }\n const {\n scrollHeightBefore,\n scrollBefore\n } = m.setScrollData();\n\n // Add message to DOM and data\n let messagesHTML = '';\n const typingMessage = m.messages.filter(el => el.isTyping)[0];\n messagesToAdd.forEach(messageToAdd => {\n if (typingMessage) {\n if (method === 'append') {\n m.messages.splice(m.messages.indexOf(typingMessage), 0, messageToAdd);\n } else {\n m.messages.splice(m.messages.indexOf(typingMessage) + 1, 0, messageToAdd);\n }\n } else {\n m.messages[method === 'append' ? 'push' : 'unshift'](messageToAdd);\n }\n messagesHTML += m.renderMessage(messageToAdd);\n });\n const $messagesEls = $(messagesHTML);\n if (animate) {\n if (method === 'append' && !m.params.newMessagesFirst) {\n $messagesEls.addClass('message-appear-from-bottom');\n }\n if (method === 'prepend' && m.params.newMessagesFirst) {\n $messagesEls.addClass('message-appear-from-top');\n }\n }\n if (typingMessage) {\n if (method === 'append') {\n $messagesEls.insertBefore(m.$el.find('.message-typing'));\n } else {\n $messagesEls.insertAfter(m.$el.find('.message-typing'));\n }\n } else {\n m.$el[method]($messagesEls);\n }\n\n // Layout\n if (m.params.autoLayout) m.layout();\n if (method === 'prepend' && !typingMessage) {\n m.pageContentEl.scrollTop = scrollBefore + (m.pageContentEl.scrollHeight - scrollHeightBefore);\n }\n if (m.params.scrollMessages && (method === 'append' && !m.params.newMessagesFirst || method === 'prepend' && m.params.newMessagesFirst && !typingMessage)) {\n m.scrollWithEdgeCheck(animate);\n }\n return m;\n }\n showTyping(message) {\n if (message === void 0) {\n message = {};\n }\n const m = this;\n const typingMessage = m.messages.filter(el => el.isTyping)[0];\n if (typingMessage) {\n m.removeMessage(m.messages.indexOf(typingMessage));\n }\n m.addMessage(extend({\n type: 'received',\n isTyping: true\n }, message));\n return m;\n }\n hideTyping() {\n const m = this;\n let typingMessageIndex;\n let typingFound;\n m.messages.forEach((message, index) => {\n if (message.isTyping) typingMessageIndex = index;\n });\n if (typeof typingMessageIndex !== 'undefined') {\n if (m.$el.find('.message').eq(typingMessageIndex).hasClass('message-typing')) {\n typingFound = true;\n m.removeMessage(typingMessageIndex);\n }\n }\n if (!typingFound) {\n const $typingMessageEl = m.$el.find('.message-typing');\n if ($typingMessageEl.length) {\n m.removeMessage($typingMessageEl);\n }\n }\n return m;\n }\n scrollWithEdgeCheck(animate) {\n const m = this;\n const {\n scrollBefore,\n scrollHeightBefore,\n heightBefore\n } = m.scrollData;\n if (m.params.scrollMessagesOnEdge) {\n let onEdge = false;\n if (m.params.newMessagesFirst && scrollBefore === 0) {\n onEdge = true;\n }\n if (!m.params.newMessagesFirst && scrollBefore - (scrollHeightBefore - heightBefore) >= -10) {\n onEdge = true;\n }\n if (onEdge) m.scroll(animate ? undefined : 0);\n } else {\n m.scroll(animate ? undefined : 0);\n }\n }\n scroll(duration, scrollTop) {\n if (duration === void 0) {\n duration = 300;\n }\n const m = this;\n const currentScroll = m.pageContentEl.scrollTop;\n let newScrollTop;\n if (typeof scrollTop !== 'undefined') newScrollTop = scrollTop;else {\n newScrollTop = m.params.newMessagesFirst ? 0 : m.pageContentEl.scrollHeight - m.pageContentEl.offsetHeight;\n if (newScrollTop === currentScroll) return m;\n }\n m.$pageContentEl.scrollTop(newScrollTop, duration);\n return m;\n }\n init() {\n const m = this;\n if (!m.messages || m.messages.length === 0) {\n m.messages = m.getMessagesData();\n }\n if (m.params.messages && m.params.messages.length) {\n m.renderMessages();\n }\n if (m.params.autoLayout) m.layout();\n if (m.params.scrollMessages) m.scroll(0);\n }\n destroy() {\n const m = this;\n m.emit('local::beforeDestroy messagesBeforeDestroy', m);\n m.$el.trigger('messages:beforedestroy');\n if (m.$el[0]) {\n m.$el[0].f7Messages = null;\n delete m.$el[0].f7Messages;\n }\n deleteProps(m);\n }\n}\nexport default Messages;", "import $ from '../../shared/dom7.js';\nimport Messages from './messages-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'messages',\n static: {\n Messages\n },\n create() {\n const app = this;\n app.messages = ConstructorMethods({\n defaultSelector: '.messages',\n constructor: Messages,\n app,\n domProp: 'f7Messages',\n addMethods: 'renderMessages layout scroll clear removeMessage removeMessages addMessage addMessages'.split(' ')\n });\n },\n on: {\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.messages-init').each(messagesEl => {\n app.messages.destroy(messagesEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.messages-init').each(messagesEl => {\n app.messages.create({\n el: messagesEl\n });\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.messages-init').each(messagesEl => {\n app.messages.destroy(messagesEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.messages-init').each(messagesEl => {\n app.messages.create({\n el: messagesEl\n });\n });\n }\n },\n vnode: {\n 'messages-init': {\n insert(vnode) {\n const app = this;\n const messagesEl = vnode.elm;\n app.messages.create({\n el: messagesEl\n });\n },\n destroy(vnode) {\n const app = this;\n const messagesEl = vnode.elm;\n app.messages.destroy(messagesEl);\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nclass Messagebar extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const messagebar = this;\n const defaults = {\n top: false,\n topOffset: 0,\n bottomOffset: 0,\n attachments: [],\n renderAttachments: undefined,\n renderAttachment: undefined,\n maxHeight: null,\n resizePage: true\n };\n\n // Extend defaults with modules params\n messagebar.useModulesParams(defaults);\n messagebar.params = extend(defaults, params);\n\n // El\n const $el = $(messagebar.params.el);\n if ($el.length === 0) return messagebar;\n if ($el[0].f7Messagebar) return $el[0].f7Messagebar;\n $el[0].f7Messagebar = messagebar;\n\n // Page and PageContent\n const $pageEl = $el.parents('.page').eq(0);\n const $pageContentEl = $pageEl.find('.page-content').eq(0);\n\n // Area\n const $areaEl = $el.find('.messagebar-area');\n\n // Textarea\n let $textareaEl;\n if (messagebar.params.textareaEl) {\n $textareaEl = $(messagebar.params.textareaEl);\n } else {\n $textareaEl = $el.find('textarea');\n }\n\n // Attachments & Library\n const $attachmentsEl = $el.find('.messagebar-attachments');\n const $sheetEl = $el.find('.messagebar-sheet');\n if (messagebar.params.top) {\n $el.addClass('messagebar-top');\n }\n extend(messagebar, {\n $el,\n el: $el[0],\n $areaEl,\n areaEl: $areaEl[0],\n $textareaEl,\n textareaEl: $textareaEl[0],\n $attachmentsEl,\n attachmentsEl: $attachmentsEl[0],\n attachmentsVisible: $attachmentsEl.hasClass('messagebar-attachments-visible'),\n $sheetEl,\n sheetEl: $sheetEl[0],\n sheetVisible: $sheetEl.hasClass('messagebar-sheet-visible'),\n $pageEl,\n pageEl: $pageEl[0],\n $pageContentEl,\n pageContentEl: $pageContentEl,\n top: $el.hasClass('messagebar-top') || messagebar.params.top,\n attachments: []\n });\n\n // Events\n function onAppResize() {\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n }\n function onSubmit(e) {\n e.preventDefault();\n }\n function onAttachmentClick(e) {\n const index = $(this).index();\n if ($(e.target).closest('.messagebar-attachment-delete').length) {\n $(this).trigger('messagebar:attachmentdelete', index);\n messagebar.emit('local::attachmentDelete messagebarAttachmentDelete', messagebar, this, index);\n } else {\n $(this).trigger('messagebar:attachmentclick', index);\n messagebar.emit('local::attachmentClick messagebarAttachmentClick', messagebar, this, index);\n }\n }\n function onTextareaChange() {\n messagebar.checkEmptyState();\n messagebar.$el.trigger('messagebar:change');\n messagebar.emit('local::change messagebarChange', messagebar);\n }\n function onTextareaFocus() {\n messagebar.sheetHide();\n messagebar.$el.addClass('messagebar-focused');\n messagebar.$el.trigger('messagebar:focus');\n messagebar.emit('local::focus messagebarFocus', messagebar);\n }\n function onTextareaBlur() {\n messagebar.$el.removeClass('messagebar-focused');\n messagebar.$el.trigger('messagebar:blur');\n messagebar.emit('local::blur messagebarBlur', messagebar);\n }\n messagebar.attachEvents = function attachEvents() {\n $el.on('textarea:resize', onAppResize);\n $el.on('submit', onSubmit);\n $el.on('click', '.messagebar-attachment', onAttachmentClick);\n $textareaEl.on('change input', onTextareaChange);\n $textareaEl.on('focus', onTextareaFocus);\n $textareaEl.on('blur', onTextareaBlur);\n app.on('resize', onAppResize);\n };\n messagebar.detachEvents = function detachEvents() {\n $el.off('textarea:resize', onAppResize);\n $el.off('submit', onSubmit);\n $el.off('click', '.messagebar-attachment', onAttachmentClick);\n $textareaEl.off('change input', onTextareaChange);\n $textareaEl.off('focus', onTextareaFocus);\n $textareaEl.off('blur', onTextareaBlur);\n app.off('resize', onAppResize);\n };\n\n // Install Modules\n messagebar.useModules();\n\n // Init\n messagebar.init();\n return messagebar;\n }\n focus() {\n const messagebar = this;\n messagebar.$textareaEl.focus();\n return messagebar;\n }\n blur() {\n const messagebar = this;\n messagebar.$textareaEl.blur();\n return messagebar;\n }\n clear() {\n const messagebar = this;\n messagebar.$textareaEl.val('').trigger('change');\n return messagebar;\n }\n getValue() {\n const messagebar = this;\n return messagebar.$textareaEl.val().trim();\n }\n setValue(value) {\n const messagebar = this;\n messagebar.$textareaEl.val(value).trigger('change');\n return messagebar;\n }\n setPlaceholder(placeholder) {\n const messagebar = this;\n messagebar.$textareaEl.attr('placeholder', placeholder);\n return messagebar;\n }\n resizePage() {\n const messagebar = this;\n const {\n params,\n $el,\n top,\n $pageEl,\n $pageContentEl,\n $areaEl,\n $textareaEl,\n $sheetEl,\n $attachmentsEl\n } = messagebar;\n const elHeight = $el[0].offsetHeight;\n let maxHeight = params.maxHeight;\n if (top) {\n /*\n Disable at the moment\n const requiredPaddingTop = elHeight + params.topOffset;\n const currentPaddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n if (requiredPaddingTop !== currentPaddingTop) {\n if (!maxHeight) {\n maxHeight = $pageEl[0].offsetHeight - currentPaddingTop - $sheetEl.outerHeight() - $attachmentsEl.outerHeight() - parseInt($areaEl.css('margin-top'), 10) - parseInt($areaEl.css('margin-bottom'), 10);\n }\n $textareaEl.css('max-height', `${maxHeight}px`);\n $pageContentEl.css('padding-top', `${requiredPaddingTop}px`);\n $el.trigger('messagebar:resizePage');\n messagebar.emit('local::resizepage messagebarResizePage');\n }\n */\n } else {\n const currentPaddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n const requiredPaddingBottom = elHeight + params.bottomOffset;\n if (requiredPaddingBottom !== currentPaddingBottom && $pageContentEl.length) {\n const currentPaddingTop = parseInt($pageContentEl.css('padding-top'), 10);\n const pageScrollHeight = $pageContentEl[0].scrollHeight;\n const pageOffsetHeight = $pageContentEl[0].offsetHeight;\n const pageScrollTop = $pageContentEl[0].scrollTop;\n const scrollOnBottom = pageScrollTop === pageScrollHeight - pageOffsetHeight;\n if (!maxHeight) {\n maxHeight = $pageEl[0].offsetHeight - currentPaddingTop - $sheetEl.outerHeight() - $attachmentsEl.outerHeight() - parseInt($areaEl.css('margin-top'), 10) - parseInt($areaEl.css('margin-bottom'), 10);\n }\n $textareaEl.css('max-height', `${maxHeight}px`);\n $pageContentEl.css('padding-bottom', `${requiredPaddingBottom}px`);\n if (scrollOnBottom) {\n $pageContentEl.scrollTop($pageContentEl[0].scrollHeight - pageOffsetHeight);\n }\n $el.trigger('messagebar:resizepage');\n messagebar.emit('local::resizePage messagebarResizePage', messagebar);\n }\n }\n }\n checkEmptyState() {\n const messagebar = this;\n const {\n $el,\n $textareaEl\n } = messagebar;\n const value = $textareaEl.val().trim();\n if (value && value.length) {\n $el.addClass('messagebar-with-value');\n } else {\n $el.removeClass('messagebar-with-value');\n }\n }\n attachmentsCreate(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n const $attachmentsEl = $(`${innerHTML}
`);\n $attachmentsEl.insertBefore(messagebar.$textareaEl);\n extend(messagebar, {\n $attachmentsEl,\n attachmentsEl: $attachmentsEl[0]\n });\n return messagebar;\n }\n attachmentsShow(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n messagebar.$attachmentsEl = messagebar.$el.find('.messagebar-attachments');\n if (messagebar.$attachmentsEl.length === 0) {\n messagebar.attachmentsCreate(innerHTML);\n }\n messagebar.$el.addClass('messagebar-attachments-visible');\n messagebar.attachmentsVisible = true;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n attachmentsHide() {\n const messagebar = this;\n messagebar.$el.removeClass('messagebar-attachments-visible');\n messagebar.attachmentsVisible = false;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n attachmentsToggle() {\n const messagebar = this;\n if (messagebar.attachmentsVisible) {\n messagebar.attachmentsHide();\n } else {\n messagebar.attachmentsShow();\n }\n return messagebar;\n }\n renderAttachment(attachment) {\n const messagebar = this;\n if (messagebar.params.renderAttachment) {\n return messagebar.params.renderAttachment.call(messagebar, attachment);\n }\n return `\n \n
\n
\n
\n `;\n }\n renderAttachments() {\n const messagebar = this;\n let html;\n if (messagebar.params.renderAttachments) {\n html = messagebar.params.renderAttachments.call(messagebar, messagebar.attachments);\n } else {\n html = `${messagebar.attachments.map(attachment => messagebar.renderAttachment(attachment)).join('')}`;\n }\n if (messagebar.$attachmentsEl.length === 0) {\n messagebar.attachmentsCreate(html);\n } else {\n messagebar.$attachmentsEl.html(html);\n }\n }\n sheetCreate(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n const $sheetEl = $(`${innerHTML}
`);\n messagebar.$el.append($sheetEl);\n extend(messagebar, {\n $sheetEl,\n sheetEl: $sheetEl[0]\n });\n return messagebar;\n }\n sheetShow(innerHTML) {\n if (innerHTML === void 0) {\n innerHTML = '';\n }\n const messagebar = this;\n messagebar.$sheetEl = messagebar.$el.find('.messagebar-sheet');\n if (messagebar.$sheetEl.length === 0) {\n messagebar.sheetCreate(innerHTML);\n }\n messagebar.$el.addClass('messagebar-sheet-visible');\n messagebar.sheetVisible = true;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n sheetHide() {\n const messagebar = this;\n messagebar.$el.removeClass('messagebar-sheet-visible');\n messagebar.sheetVisible = false;\n if (messagebar.params.resizePage) {\n messagebar.resizePage();\n }\n return messagebar;\n }\n sheetToggle() {\n const messagebar = this;\n if (messagebar.sheetVisible) {\n messagebar.sheetHide();\n } else {\n messagebar.sheetShow();\n }\n return messagebar;\n }\n init() {\n const messagebar = this;\n messagebar.attachEvents();\n messagebar.checkEmptyState();\n return messagebar;\n }\n destroy() {\n const messagebar = this;\n messagebar.emit('local::beforeDestroy messagebarBeforeDestroy', messagebar);\n messagebar.$el.trigger('messagebar:beforedestroy');\n messagebar.detachEvents();\n if (messagebar.$el[0]) {\n messagebar.$el[0].f7Messagebar = null;\n delete messagebar.$el[0].f7Messagebar;\n }\n deleteProps(messagebar);\n }\n}\nexport default Messagebar;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport Messagebar from './messagebar-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'messagebar',\n static: {\n Messagebar\n },\n create() {\n const app = this;\n app.messagebar = ConstructorMethods({\n defaultSelector: '.messagebar',\n constructor: Messagebar,\n app,\n domProp: 'f7Messagebar',\n addMethods: 'clear getValue setValue setPlaceholder resizePage focus blur attachmentsCreate attachmentsShow attachmentsHide attachmentsToggle renderAttachments sheetCreate sheetShow sheetHide sheetToggle'.split(' ')\n });\n },\n on: {\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('.messagebar-init').each(messagebarEl => {\n app.messagebar.destroy(messagebarEl);\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.messagebar-init').each(messagebarEl => {\n app.messagebar.create(extend({\n el: messagebarEl\n }, $(messagebarEl).dataset()));\n });\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.messagebar-init').each(messagebarEl => {\n app.messagebar.destroy(messagebarEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.messagebar-init').each(messagebarEl => {\n app.messagebar.create(extend({\n el: messagebarEl\n }, $(messagebarEl).dataset()));\n });\n }\n },\n vnode: {\n 'messagebar-init': {\n insert(vnode) {\n const app = this;\n const messagebarEl = vnode.elm;\n app.messagebar.create(extend({\n el: messagebarEl\n }, $(messagebarEl).dataset()));\n },\n destroy(vnode) {\n const app = this;\n const messagebarEl = vnode.elm;\n app.messagebar.destroy(messagebarEl);\n }\n }\n }\n};", "/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n", "import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, elementIndex as g, getTranslate as h, elementTransitionEnd as i, isObject as j, getSlideTransformEl as k, elementStyle as l, elementNextAll as m, nextTick as n, elementPrevAll as o, animateCSSModeScroll as p, extend as q, deleteProps as r, setCSSProperty as s };\n", "import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, l as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, m as elementNextAll, o as elementPrevAll, h as getTranslate, p as animateCSSModeScroll, n as nextTick, d as now, q as extend, g as elementIndex, c as createElement, r as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.swipeDirection === 'next' && swiper.allowSlideNext || swiper.swipeDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(event.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(event.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === 'SWIPER-CONTAINER') {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { s as setCSSProperty, e as elementChildren, c as createElement } from '../shared/utils.mjs';\n\nfunction Virtual(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n const document = getDocument();\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n const tempDOM = document.createElement('div');\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n // eslint-disable-next-line\n let slideEl;\n if (params.renderSlide) {\n slideEl = params.renderSlide.call(swiper, slide, index);\n if (typeof slideEl === 'string') {\n tempDOM.innerHTML = slideEl;\n slideEl = tempDOM.children[0];\n }\n } else if (swiper.isElement) {\n slideEl = createElement('swiper-slide');\n } else {\n slideEl = createElement('div', swiper.params.slideClass);\n }\n slideEl.setAttribute('data-swiper-slide-index', index);\n if (!params.renderSlide) {\n slideEl.innerHTML = slide;\n }\n if (params.cache) {\n swiper.virtual.cache[index] = slideEl;\n }\n return slideEl;\n }\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides,\n loop: isLoop\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\n }\n let from = activeIndex - slidesBefore;\n let to = activeIndex + slidesAfter;\n if (!isLoop) {\n from = Math.max(from, 0);\n to = Math.min(to, slides.length - 1);\n }\n let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n if (isLoop && activeIndex >= slidesBefore) {\n from -= slidesBefore;\n if (!centeredSlides) offset += swiper.slidesGrid[0];\n } else if (isLoop && activeIndex < slidesBefore) {\n from = -slidesBefore;\n if (centeredSlides) offset += swiper.slidesGrid[0];\n }\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n slidesBefore,\n slidesAfter\n });\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n emit('virtualUpdate');\n }\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n }\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n if (force) {\n swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach(slideEl => {\n slideEl.remove();\n });\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n const slideIndex = getSlideIndex(i);\n swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`)).forEach(slideEl => {\n slideEl.remove();\n });\n }\n }\n }\n const loopFrom = isLoop ? -slides.length : 0;\n const loopTo = isLoop ? slides.length * 2 : slides.length;\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n const slideIndex = getSlideIndex(i);\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(slideIndex);\n } else {\n if (i > previousTo) appendIndexes.push(slideIndex);\n if (i < previousFrom) prependIndexes.push(slideIndex);\n }\n }\n }\n appendIndexes.forEach(index => {\n swiper.slidesEl.append(renderSlide(slides[index], index));\n });\n if (isLoop) {\n for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\n const index = prependIndexes[i];\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n }\n } else {\n prependIndexes.sort((a, b) => b - a);\n prependIndexes.forEach(index => {\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n });\n }\n elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n onRendered();\n }\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const cachedEl = cache[cachedIndex];\n const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n if (cachedElIndex) {\n cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach(key => {\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach(key => {\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n let domSlidesAssigned;\n if (typeof swiper.passedParams.virtual.slides === 'undefined') {\n const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n if (slides && slides.length) {\n swiper.virtual.slides = [...slides];\n domSlidesAssigned = true;\n slides.forEach((slideEl, slideIndex) => {\n slideEl.setAttribute('data-swiper-slide-index', slideIndex);\n swiper.virtual.cache[slideIndex] = slideEl;\n slideEl.remove();\n });\n }\n }\n if (!domSlidesAssigned) {\n swiper.virtual.slides = swiper.params.virtual.slides;\n }\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n update();\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n}\n\nexport { Virtual as default };\n", "import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { a as elementParents, b as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}\n\nexport { Keyboard as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, d as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n return true;\n }\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}\n\nexport { Mousewheel as default };\n", "import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n", "import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n", "function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n", "import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { f as elementOuterSize, g as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const realIndex = swiper.realIndex;\n const newSlideIndex = swiper.getSlideIndexByData(index);\n const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);\n const loopFix = dir => {\n const indexBeforeLoopFix = swiper.activeIndex;\n swiper.loopFix({\n direction: dir,\n activeSlideIndex: newSlideIndex,\n slideTo: false\n });\n const indexAfterFix = swiper.activeIndex;\n if (indexBeforeLoopFix === indexAfterFix) {\n swiper.slideToLoop(realIndex, 0, false, true);\n }\n };\n if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {\n loopFix(newSlideIndex > currentSlideIndex ? 'next' : 'prev');\n } else if (swiper.params.centeredSlides) {\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (newSlideIndex < Math.floor(slidesPerView / 2)) {\n loopFix('prev');\n }\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">${params.bulletElement}>`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { c as createElement, n as nextTick, b as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\n\nfunction Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`);\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n disableDraggable();\n }\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}\n\nexport { Scrollbar as default };\n", "import { e as elementChildren } from '../shared/utils.mjs';\n\nfunction Parallax(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const rtlFactor = rtl ? -1 : 1;\n const p = el.getAttribute('data-swiper-parallax') || '0';\n let x = el.getAttribute('data-swiper-parallax-x');\n let y = el.getAttribute('data-swiper-parallax-y');\n const scale = el.getAttribute('data-swiper-parallax-scale');\n const opacity = el.getAttribute('data-swiper-parallax-opacity');\n const rotate = el.getAttribute('data-swiper-parallax-rotate');\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n el.style.opacity = currentOpacity;\n }\n let transform = `translate3d(${x}, ${y}, 0px)`;\n if (typeof scale !== 'undefined' && scale !== null) {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n transform += ` scale(${currentScale})`;\n }\n if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n const currentRotate = rotate * progress * -1;\n transform += ` rotate(${currentRotate}deg)`;\n }\n el.style.transform = transform;\n };\n const setTranslate = () => {\n const {\n el,\n slides,\n progress,\n snapGrid,\n isElement\n } = swiper;\n const elements = elementChildren(el, elementsSelector);\n if (swiper.isElement) {\n elements.push(...elementChildren(swiper.hostEl, elementsSelector));\n }\n elements.forEach(subEl => {\n setTransform(subEl, progress);\n });\n slides.forEach((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => {\n setTransform(subEl, slideProgress);\n });\n });\n };\n const setTransition = function (duration) {\n if (duration === void 0) {\n duration = swiper.params.speed;\n }\n const {\n el,\n hostEl\n } = swiper;\n const elements = [...el.querySelectorAll(elementsSelector)];\n if (swiper.isElement) {\n elements.push(...hostEl.querySelectorAll(elementsSelector));\n }\n elements.forEach(parallaxEl => {\n let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n });\n };\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}\n\nexport { Parallax as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, a as elementParents, b as elementOffset, h as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\n }\n if (!image.isMoved && !isScaling) {\n if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n image.isTouched = false;\n return;\n }\n if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd();\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}\n\nexport { Zoom as default };\n", "import { n as nextTick, i as elementTransitionEnd } from '../shared/utils.mjs';\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nfunction Controller(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n }\n });\n\n swiper.controller = {\n control: undefined\n };\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2\u2212x1) \u00D7 (y3\u2212y1)) \u00F7 (x3\u2212x1) + y1\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n return this;\n }\n function getInterpolateFunction(c) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n if (c.destroyed) return;\n\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {\n multiplier = 1;\n }\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n if (c.destroyed) return;\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n elementTransitionEnd(c.wrapperEl, () => {\n if (!controlled) return;\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n if (typeof window !== 'undefined' && (\n // eslint-disable-line\n typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\n const controlElement = document.querySelector(swiper.params.controller.control);\n if (controlElement && controlElement.swiper) {\n swiper.controller.control = controlElement.swiper;\n } else if (controlElement) {\n const onControllerSwiper = e => {\n swiper.controller.control = e.detail[0];\n swiper.update();\n controlElement.removeEventListener('init', onControllerSwiper);\n };\n controlElement.addEventListener('init', onControllerSwiper);\n }\n return;\n }\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}\n\nexport { Controller as default };\n", "import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElement, g as elementIndex } from '../shared/utils.mjs';\n\nfunction A11y(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.innerHTML = '';\n notification.innerHTML = message;\n }\n const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e);\n function getRandomNumber(size) {\n if (size === void 0) {\n size = 16;\n }\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n targetEl.click();\n }\n }\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (prevEl) {\n if (swiper.isBeginning) {\n disableEl(prevEl);\n makeElNotFocusable(prevEl);\n } else {\n enableEl(prevEl);\n makeElFocusable(prevEl);\n }\n }\n if (nextEl) {\n if (swiper.isEnd) {\n disableEl(nextEl);\n makeElNotFocusable(nextEl);\n } else {\n enableEl(nextEl);\n makeElFocusable(nextEl);\n }\n }\n }\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.forEach(bulletEl => {\n if (swiper.params.pagination.clickable) {\n makeElFocusable(bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole(bulletEl, 'button');\n addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n }\n }\n if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {\n bulletEl.setAttribute('aria-current', 'true');\n } else {\n bulletEl.removeAttribute('aria-current');\n }\n });\n }\n const initNavEl = (el, wrapperId, message) => {\n makeElFocusable(el);\n if (el.tagName !== 'BUTTON') {\n addElRole(el, 'button');\n el.addEventListener('keydown', onEnterOrSpaceKey);\n }\n addElLabel(el, message);\n addElControls(el, wrapperId);\n };\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n const initSlides = () => {\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n }\n if (params.slideRole) {\n addElRole(swiper.slides, params.slideRole);\n }\n const slidesLength = swiper.slides.length;\n if (params.slideLabelMessage) {\n swiper.slides.forEach((slideEl, index) => {\n const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel(slideEl, ariaLabelMessage);\n });\n }\n };\n const init = () => {\n const params = swiper.params.a11y;\n swiper.el.append(liveRegion);\n\n // Container\n const containerEl = swiper.el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel(containerEl, params.containerMessage);\n }\n\n // Wrapper\n const wrapperEl = swiper.wrapperEl;\n const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId(wrapperEl, wrapperId);\n addElLive(wrapperEl, live);\n\n // Slide\n initSlides();\n\n // Navigation\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n }\n if (prevEl) {\n prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.addEventListener('focus', handleFocus, true);\n swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n swiper.el.addEventListener('pointerup', handlePointerUp, true);\n };\n function destroy() {\n if (liveRegion) liveRegion.remove();\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n if (prevEl) {\n prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\n on('beforeInit', () => {\n liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n liveRegion.setAttribute('aria-live', 'assertive');\n liveRegion.setAttribute('aria-atomic', 'true');\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}\n\nexport { A11y as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\n\nfunction History(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides[index];\n let value = slugify(slide.getAttribute('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key ? `${key}/` : ''}${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key ? `${key}/` : ''}${value}`;\n }\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides[i];\n const slideHistory = slugify(slide.getAttribute('data-history'));\n if (slideHistory === value) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) {\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n return;\n }\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}\n\nexport { History as default };\n", "import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren } from '../shared/utils.mjs';\n\nfunction HashNavigation(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n on\n } = _ref;\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n getSlideIndex(_s, hash) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0];\n if (!slideWithHash) return 0;\n const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);\n return index;\n }\n return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${hash}\"], swiper-slide[data-hash=\"${hash}\"]`)[0]);\n }\n }\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);\n if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${activeSlideHash}` || '');\n emit('hashSet');\n } else {\n document.location.hash = activeSlideHash || '';\n emit('hashSet');\n }\n };\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);\n swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);\n }\n if (swiper.params.hashNavigation.watchState) {\n window.addEventListener('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n window.removeEventListener('hashchange', onHashChange);\n }\n };\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}\n\nexport { HashNavigation as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime;\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n autoplayStartTime = new Date().getTime();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { j as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}\n\nexport { Thumb as default };\n", "import { d as now, i as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n if (swiper.params.cssMode) return;\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n if (swiper.params.cssMode) return;\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n if (swiper.params.cssMode) return;\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}\n\nexport { freeMode as default };\n", "function Grid(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n let wasMultiRow;\n const getSpaceBetween = () => {\n let spaceBetween = swiper.params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n return spaceBetween;\n };\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n slidesPerRow = slidesNumberEvenToRows / rows;\n };\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows,\n fill\n } = swiper.params.grid;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.style.order = newSlideOrderIndex;\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.row = row;\n slide.column = column;\n slide.style[getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\n };\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n centeredSlides,\n roundLengths\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n if (centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.splice(0, snapGrid.length);\n snapGrid.push(...newSlidesGrid);\n }\n };\n const onInit = () => {\n wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;\n };\n const onUpdate = () => {\n const {\n params,\n el\n } = swiper;\n const isMultiRow = params.grid && params.grid.rows > 1;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n numFullColumns = 1;\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n wasMultiRow = isMultiRow;\n };\n on('init', onInit);\n on('update', onUpdate);\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n}\n\nexport { Grid as default };\n", "function appendSlide(slides) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n const appendElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.append(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.append(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) appendElement(slides[i]);\n }\n } else {\n appendElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n}\n\nfunction prependSlide(slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n const prependElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.prepend(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.prepend(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) prependElement(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n prependElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide(index, slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.recalcSlides();\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides[i];\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) slidesEl.append(slides[i]);\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n slidesEl.append(slides);\n }\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n slidesEl.append(slidesBuffer[i]);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n\nfunction Manipulation(_ref) {\n let {\n swiper\n } = _ref;\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n}\n\nexport { Manipulation as default };\n", "function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return;\n // remove shadows\n swiper.slides.forEach(slideEl => {\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());\n });\n // create new one\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}\n\nexport { effectInit as e };\n", "import { k as getSlideTransformEl } from './utils.mjs';\n\nfunction effectTarget(effectParams, slideEl) {\n const transformEl = getSlideTransformEl(slideEl);\n if (transformEl !== slideEl) {\n transformEl.style.backfaceVisibility = 'hidden';\n transformEl.style['-webkit-backface-visibility'] = 'hidden';\n }\n return transformEl;\n}\n\nexport { effectTarget as e };\n", "import { i as elementTransitionEnd } from './utils.mjs';\n\nfunction effectVirtualTransitionEnd(_ref) {\n let {\n swiper,\n duration,\n transformElements,\n allSlides\n } = _ref;\n const {\n activeIndex\n } = swiper;\n const getSlide = el => {\n if (!el.parentElement) {\n // assume shadow root\n const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0];\n return slide;\n }\n return el.parentElement;\n };\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let transitionEndTarget;\n if (allSlides) {\n transitionEndTarget = transformElements;\n } else {\n transitionEndTarget = transformElements.filter(transformEl => {\n const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\n return swiper.getSlideIndex(el) === activeIndex;\n });\n }\n transitionEndTarget.forEach(el => {\n elementTransitionEnd(el, () => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n });\n });\n }\n}\n\nexport { effectVirtualTransitionEnd as e };\n", "import { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectFade(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n fadeEffect: {\n crossFade: false\n }\n });\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = swiper.slides[i];\n const offset = slideEl.swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.opacity = slideOpacity;\n targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectFade as default };\n", "import { e as effectInit } from '../shared/effect-init.mjs';\nimport { c as createElement } from '../shared/utils.mjs';\n\nfunction EffectCube(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n const createSlideShadows = (slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));\n slideEl.append(shadowBefore);\n }\n if (!shadowAfter) {\n shadowAfter = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));\n slideEl.append(shadowAfter);\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.forEach(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows(slideEl, progress, isHorizontal);\n });\n };\n const setTranslate = () => {\n const {\n el,\n wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n swiper.wrapperEl.append(cubeShadowEl);\n }\n cubeShadowEl.style.height = `${swiperWidth}px`;\n } else {\n cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n el.append(cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n slideEl.style.transform = transform;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress, isHorizontal);\n }\n }\n wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`;\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`;\n }\n }\n const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\n wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;\n wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n const setTransition = duration => {\n const {\n el,\n slides\n } = swiper;\n slides.forEach(slideEl => {\n slideEl.style.transitionDuration = `${duration}ms`;\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {\n subEl.style.transitionDuration = `${duration}ms`;\n });\n });\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n const shadowEl = el.querySelector('.swiper-cube-shadow');\n if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\n }\n };\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n}\n\nexport { EffectCube as default };\n", "import { k as getSlideTransformEl, c as createElement } from './utils.mjs';\n\nfunction createShadow(suffix, slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;\n const shadowContainer = getSlideTransformEl(slideEl);\n let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);\n if (!shadowEl) {\n shadowEl = createElement('div', shadowClass.split(' '));\n shadowContainer.append(shadowEl);\n }\n return shadowEl;\n}\n\nexport { createShadow as c };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectFlip(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true\n }\n });\n const createSlideShadows = (slideEl, progress) => {\n let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createShadow('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (!shadowAfter) {\n shadowAfter = createShadow('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // Set shadows\n swiper.params.flipEffect;\n swiper.slides.forEach(slideEl => {\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n createSlideShadows(slideEl, progress);\n });\n };\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n const offset = slideEl.swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress);\n }\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectFlip as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCoverflow(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true\n }\n });\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const slideEl = slides[i];\n const slideSize = slidesSizesGrid[i];\n const slideOffset = slideEl.swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = slideTransform;\n slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBeforeEl) {\n shadowBeforeEl = createShadow('coverflow', slideEl, isHorizontal ? 'left' : 'top');\n }\n if (!shadowAfterEl) {\n shadowAfterEl = createShadow('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n };\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}\n\nexport { EffectCoverflow as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCreative(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n creativeEffect: {\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n const setTranslate = () => {\n const {\n slides,\n wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\n }\n const offset = slideEl.swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if (custom && data.shadow || !custom) {\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl && data.shadow) {\n shadowEl = createShadow('creative', slideEl);\n }\n if (shadowEl) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n targetEl.style.opacity = opacityString;\n if (data.origin) {\n targetEl.style.transformOrigin = data.origin;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectCreative as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { k as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCards(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cardsEffect: {\n slideShadows: true,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\n });\n const setTranslate = () => {\n const {\n slides,\n activeIndex,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = rtl ? -swiper.translate : swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = slideEl.swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n if (progress < 0) {\n // next\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n\n /* eslint-disable */\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)\n scale(${scaleString})\n `;\n /* eslint-enable */\n\n if (params.slideShadows) {\n // Set shadows\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl) {\n shadowEl = createShadow('cards', slideEl);\n }\n if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectCards as default };\n", "/**\n * Swiper 10.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 28, 2023\n */\n\nimport { S as Swiper } from './shared/swiper-core.mjs';\nimport Virtual from './modules/virtual.mjs';\nimport Keyboard from './modules/keyboard.mjs';\nimport Mousewheel from './modules/mousewheel.mjs';\nimport Navigation from './modules/navigation.mjs';\nimport Pagination from './modules/pagination.mjs';\nimport Scrollbar from './modules/scrollbar.mjs';\nimport Parallax from './modules/parallax.mjs';\nimport Zoom from './modules/zoom.mjs';\nimport Controller from './modules/controller.mjs';\nimport A11y from './modules/a11y.mjs';\nimport History from './modules/history.mjs';\nimport HashNavigation from './modules/hash-navigation.mjs';\nimport Autoplay from './modules/autoplay.mjs';\nimport Thumb from './modules/thumbs.mjs';\nimport freeMode from './modules/free-mode.mjs';\nimport Grid from './modules/grid.mjs';\nimport Manipulation from './modules/manipulation.mjs';\nimport EffectFade from './modules/effect-fade.mjs';\nimport EffectCube from './modules/effect-cube.mjs';\nimport EffectFlip from './modules/effect-flip.mjs';\nimport EffectCoverflow from './modules/effect-coverflow.mjs';\nimport EffectCreative from './modules/effect-creative.mjs';\nimport EffectCards from './modules/effect-cards.mjs';\n\n// Swiper Class\nconst modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\nSwiper.use(modules);\n\nexport { Swiper, Swiper as default };\n", "/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopedSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideNextClass', 'slidePrevClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params) {\n if (params === void 0) {\n params = {};\n }\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params) {\n if (params === void 0) {\n params = {};\n }\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params) {\n if (params === void 0) {\n params = {};\n }\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames) {\n if (classNames === void 0) {\n classNames = '';\n }\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName) {\n if (attrName === void 0) {\n attrName = '';\n }\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className) {\n if (className === void 0) {\n className = '';\n }\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper(_ref) {\n let {\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n } = _ref;\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n extend(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n nextEl.innerHTML = swiper.hostEl.constructor.nextButtonSvg;\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n prevEl.innerHTML = swiper.hostEl.constructor.prevButtonSvg;\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n", "import { e as extend, i as isObject, c as attrToProp, p as paramsList } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nconst formatValue = val => {\n if (parseFloat(val) === Number(val)) return Number(val);\n if (val === 'true') return true;\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'null') return null;\n if (val === 'undefined') return undefined;\n if (typeof val === 'string' && val.includes('{') && val.includes('}') && val.includes('\"')) {\n let v;\n try {\n v = JSON.parse(val);\n } catch (err) {\n v = val;\n }\n return v;\n }\n return val;\n};\nconst modulesParamsList = ['a11y', 'autoplay', 'controller', 'cards-effect', 'coverflow-effect', 'creative-effect', 'cube-effect', 'fade-effect', 'flip-effect', 'free-mode', 'grid', 'hash-navigation', 'history', 'keyboard', 'mousewheel', 'navigation', 'pagination', 'parallax', 'scrollbar', 'thumbs', 'virtual', 'zoom'];\nfunction getParams(element, propName, propValue) {\n const params = {};\n const passedParams = {};\n extend(params, defaults);\n const localParamsList = [...paramsList, 'on'];\n const allowedParams = localParamsList.map(key => key.replace(/_/, ''));\n\n // First check props\n localParamsList.forEach(paramName => {\n paramName = paramName.replace('_', '');\n if (typeof element[paramName] !== 'undefined') {\n passedParams[paramName] = element[paramName];\n }\n });\n\n // Attributes\n const attrsList = [...element.attributes];\n if (typeof propName === 'string' && typeof propValue !== 'undefined') {\n attrsList.push({\n name: propName,\n value: isObject(propValue) ? {\n ...propValue\n } : propValue\n });\n }\n attrsList.forEach(attr => {\n const moduleParam = modulesParamsList.filter(mParam => attr.name.indexOf(`${mParam}-`) === 0)[0];\n if (moduleParam) {\n const parentObjName = attrToProp(moduleParam);\n const subObjName = attrToProp(attr.name.split(`${moduleParam}-`)[1]);\n if (typeof passedParams[parentObjName] === 'undefined') passedParams[parentObjName] = {};\n if (passedParams[parentObjName] === true) {\n passedParams[parentObjName] = {\n enabled: true\n };\n }\n passedParams[parentObjName][subObjName] = formatValue(attr.value);\n } else {\n const name = attrToProp(attr.name);\n if (!allowedParams.includes(name)) return;\n const value = formatValue(attr.value);\n if (passedParams[name] && modulesParamsList.includes(attr.name) && !isObject(value)) {\n if (passedParams[name].constructor !== Object) {\n passedParams[name] = {};\n }\n passedParams[name].enabled = !!value;\n } else {\n passedParams[name] = value;\n }\n }\n });\n extend(params, passedParams);\n if (params.navigation) {\n params.navigation = {\n prevEl: '.swiper-button-prev',\n nextEl: '.swiper-button-next',\n ...(params.navigation !== true ? params.navigation : {})\n };\n } else if (params.navigation === false) {\n delete params.navigation;\n }\n if (params.scrollbar) {\n params.scrollbar = {\n el: '.swiper-scrollbar',\n ...(params.scrollbar !== true ? params.scrollbar : {})\n };\n } else if (params.scrollbar === false) {\n delete params.scrollbar;\n }\n if (params.pagination) {\n params.pagination = {\n el: '.swiper-pagination',\n ...(params.pagination !== true ? params.pagination : {})\n };\n } else if (params.pagination === false) {\n delete params.pagination;\n }\n return {\n params,\n passedParams\n };\n}\n\nexport { getParams as g };\n", "/**\n * Swiper Custom Element 10.3.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 28, 2023\n */\n\nimport './swiper-bundle.mjs';\nimport { p as paramsList, n as needsNavigation, a as needsPagination, b as needsScrollbar, u as updateSwiper, c as attrToProp } from './shared/update-swiper.mjs';\nimport { g as getParams } from './shared/get-element-params.mjs';\nimport { S as Swiper } from './shared/swiper-core.mjs';\n\n/* eslint-disable spaced-comment */\n\nconst SwiperCSS = `:host{--swiper-theme-color:#007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{width:100%;height:100%;margin-left:auto;margin-right:auto;position:relative;overflow:hidden;overflow:clip;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);box-sizing:content-box}.swiper-android ::slotted(swiper-slide),.swiper-ios ::slotted(swiper-slide),.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}::slotted(swiper-slide){flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}::slotted(.swiper-slide-invisible-blank){visibility:hidden}.swiper-autoheight,.swiper-autoheight ::slotted(swiper-slide){height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden ::slotted(swiper-slide){transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d ::slotted(swiper-slide){transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode ::slotted(swiper-slide){scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode ::slotted(swiper-slide){scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered ::slotted(swiper-slide){scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal ::slotted(swiper-slide):first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical ::slotted(swiper-slide):first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-virtual ::slotted(swiper-slide){-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:host{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:var(--swiper-navigation-top-offset,50%);width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next svg,.swiper-button-prev svg{width:100%;height:100%;object-fit:contain;transform-origin:center}.swiper-rtl .swiper-button-next svg,.swiper-rtl .swiper-button-prev svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:var(--swiper-navigation-sides-offset,10px);right:auto}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:var(--swiper-pagination-bottom,8px);top:var(--swiper-pagination-top,auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius,50%);background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:var(--swiper-pagination-right,8px);left:var(--swiper-pagination-left,auto);top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color,inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color,rgba(0,0,0,.25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size,4px);left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:var(--swiper-pagination-progressbar-size,4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:var(--swiper-scrollbar-border-radius,10px);position:relative;touch-action:none;background:var(--swiper-scrollbar-bg-color,rgba(0,0,0,.1))}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:var(--swiper-scrollbar-sides-offset,1%);bottom:var(--swiper-scrollbar-bottom,4px);top:var(--swiper-scrollbar-top,auto);z-index:50;height:var(--swiper-scrollbar-size,4px);width:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar.swiper-scrollbar-vertical,.swiper-vertical>.swiper-scrollbar{position:absolute;left:var(--swiper-scrollbar-left,auto);right:var(--swiper-scrollbar-right,4px);top:var(--swiper-scrollbar-sides-offset,1%);z-index:50;width:var(--swiper-scrollbar-size,4px);height:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:var(--swiper-scrollbar-drag-bg-color,rgba(0,0,0,.5));border-radius:var(--swiper-scrollbar-border-radius,10px);left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}::slotted(.swiper-slide-zoomed){cursor:move;touch-action:none}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode ::slotted(swiper-slide){transition-timing-function:ease-out}.swiper-fade ::slotted(swiper-slide){pointer-events:none;transition-property:opacity}.swiper-fade ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-fade ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-fade ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube ::slotted(swiper-slide){pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-cube.swiper-rtl ::slotted(swiper-slide){transform-origin:100% 0}.swiper-cube ::slotted(.swiper-slide-active),.swiper-cube ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-cube ::slotted(.swiper-slide-active),.swiper-cube ::slotted(.swiper-slide-next),.swiper-cube ::slotted(.swiper-slide-prev){pointer-events:auto;visibility:visible}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-cube ::slotted(.swiper-slide-next)+::slotted(swiper-slide){pointer-events:auto;visibility:visible}.swiper-flip{overflow:visible}.swiper-flip ::slotted(swiper-slide){pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-flip ::slotted(.swiper-slide-active),.swiper-flip ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-creative ::slotted(swiper-slide){-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards ::slotted(swiper-slide){transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden}`\nconst SwiperSlideCSS = `::slotted(.swiper-slide-shadow),::slotted(.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-top){position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}::slotted(.swiper-slide-shadow){background:rgba(0,0,0,.15)}::slotted(.swiper-slide-shadow-left){background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-right){background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-top){background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-bottom){background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear;width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-top){z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-top){z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}::slotted(.swiper-zoom-container){width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}::slotted(.swiper-zoom-container)>canvas,::slotted(.swiper-zoom-container)>img,::slotted(.swiper-zoom-container)>svg{max-width:100%;max-height:100%;object-fit:contain}`\n\nclass DummyHTMLElement {}\nconst ClassToExtend = typeof window === 'undefined' || typeof HTMLElement === 'undefined' ? DummyHTMLElement : HTMLElement;\nconst arrowSvg = `\n `;\nconst addStyle = (shadowRoot, styles) => {\n if (typeof CSSStyleSheet !== 'undefined' && shadowRoot.adoptedStyleSheets) {\n const styleSheet = new CSSStyleSheet();\n styleSheet.replaceSync(styles);\n shadowRoot.adoptedStyleSheets = [styleSheet];\n } else {\n const style = document.createElement('style');\n style.rel = 'stylesheet';\n style.textContent = styles;\n shadowRoot.appendChild(style);\n }\n};\nclass SwiperContainer extends ClassToExtend {\n constructor() {\n super();\n this.attachShadow({\n mode: 'open'\n });\n }\n static get nextButtonSvg() {\n return arrowSvg;\n }\n static get prevButtonSvg() {\n return arrowSvg.replace('/>', ' transform-origin=\"center\" transform=\"rotate(180)\"/>');\n }\n cssStyles() {\n return [SwiperCSS,\n // eslint-disable-line\n ...(this.injectStyles && Array.isArray(this.injectStyles) ? this.injectStyles : [])].join('\\n');\n }\n cssLinks() {\n return this.injectStylesUrls || [];\n }\n calcSlideSlots() {\n const currentSideSlots = this.slideSlots || 0;\n // slide slots\n const slideSlotChildren = [...this.querySelectorAll(`[slot^=slide-]`)].map(child => {\n return parseInt(child.getAttribute('slot').split('slide-')[1], 10);\n });\n this.slideSlots = slideSlotChildren.length ? Math.max(...slideSlotChildren) + 1 : 0;\n if (!this.rendered) return;\n if (this.slideSlots > currentSideSlots) {\n for (let i = currentSideSlots; i < this.slideSlots; i += 1) {\n const slideEl = document.createElement('swiper-slide');\n slideEl.setAttribute('part', `slide slide-${i + 1}`);\n const slotEl = document.createElement('slot');\n slotEl.setAttribute('name', `slide-${i + 1}`);\n slideEl.appendChild(slotEl);\n this.shadowRoot.querySelector('.swiper-wrapper').appendChild(slideEl);\n }\n } else if (this.slideSlots < currentSideSlots) {\n const slides = this.swiper.slides;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (i > this.slideSlots) {\n slides[i].remove();\n }\n }\n }\n }\n render() {\n if (this.rendered) return;\n this.calcSlideSlots();\n\n // local styles\n let localStyles = this.cssStyles();\n if (this.slideSlots > 0) {\n localStyles = localStyles.replace(/::slotted\\(([a-z-0-9.]*)\\)/g, '$1');\n }\n if (localStyles.length) {\n addStyle(this.shadowRoot, localStyles);\n }\n this.cssLinks().forEach(url => {\n const linkExists = this.shadowRoot.querySelector(`link[href=\"${url}\"]`);\n if (linkExists) return;\n const linkEl = document.createElement('link');\n linkEl.rel = 'stylesheet';\n linkEl.href = url;\n this.shadowRoot.appendChild(linkEl);\n });\n // prettier-ignore\n const el = document.createElement('div');\n el.classList.add('swiper');\n el.part = 'container';\n\n // prettier-ignore\n el.innerHTML = `\n \n \n \n ${Array.from({\n length: this.slideSlots\n }).map((_, index) => `\n \n \n \n `).join('')}\n
\n \n ${needsNavigation(this.passedParams) ? `\n ${this.constructor.prevButtonSvg}
\n ${this.constructor.nextButtonSvg}
\n ` : ''}\n ${needsPagination(this.passedParams) ? `\n \n ` : ''}\n ${needsScrollbar(this.passedParams) ? `\n \n ` : ''}\n `;\n this.shadowRoot.appendChild(el);\n this.rendered = true;\n }\n initialize() {\n var _this = this;\n if (this.initialized) return;\n this.initialized = true;\n const {\n params: swiperParams,\n passedParams\n } = getParams(this);\n this.swiperParams = swiperParams;\n this.passedParams = passedParams;\n delete this.swiperParams.init;\n this.render();\n\n // eslint-disable-next-line\n this.swiper = new Swiper(this.shadowRoot.querySelector('.swiper'), {\n ...(swiperParams.virtual ? {} : {\n observer: true,\n observeSlideChildren: this.slideSlots > 0\n }),\n ...swiperParams,\n touchEventsTarget: 'container',\n onAny: function (name) {\n if (name === 'observerUpdate') {\n _this.calcSlideSlots();\n }\n const eventName = swiperParams.eventsPrefix ? `${swiperParams.eventsPrefix}${name.toLowerCase()}` : name.toLowerCase();\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const event = new CustomEvent(eventName, {\n detail: args,\n bubbles: name !== 'hashChange',\n cancelable: true\n });\n _this.dispatchEvent(event);\n }\n });\n }\n connectedCallback() {\n if (this.initialized && this.nested && this.closest('swiper-slide') && this.closest('swiper-slide').swiperLoopMoveDOM) {\n return;\n }\n if (this.init === false || this.getAttribute('init') === 'false') {\n return;\n }\n this.initialize();\n }\n disconnectedCallback() {\n if (this.nested && this.closest('swiper-slide') && this.closest('swiper-slide').swiperLoopMoveDOM) {\n return;\n }\n if (this.swiper && this.swiper.destroy) {\n this.swiper.destroy();\n }\n this.initialized = false;\n }\n updateSwiperOnPropChange(propName, propValue) {\n const {\n params: swiperParams,\n passedParams\n } = getParams(this, propName, propValue);\n this.passedParams = passedParams;\n this.swiperParams = swiperParams;\n updateSwiper({\n swiper: this.swiper,\n passedParams: this.passedParams,\n changedParams: [attrToProp(propName)],\n ...(propName === 'navigation' && passedParams[propName] ? {\n prevEl: '.swiper-button-prev',\n nextEl: '.swiper-button-next'\n } : {}),\n ...(propName === 'pagination' && passedParams[propName] ? {\n paginationEl: '.swiper-pagination'\n } : {}),\n ...(propName === 'scrollbar' && passedParams[propName] ? {\n scrollbarEl: '.swiper-scrollbar'\n } : {})\n });\n }\n attributeChangedCallback(attr, prevValue, newValue) {\n if (!this.initialized) return;\n if (prevValue === 'true' && newValue === null) {\n newValue = false;\n }\n this.updateSwiperOnPropChange(attr, newValue);\n }\n static get observedAttributes() {\n const attrs = paramsList.filter(param => param.includes('_')).map(param => param.replace(/[A-Z]/g, v => `-${v}`).replace('_', '').toLowerCase());\n return attrs;\n }\n}\nparamsList.forEach(paramName => {\n if (paramName === 'init') return;\n paramName = paramName.replace('_', '');\n Object.defineProperty(SwiperContainer.prototype, paramName, {\n configurable: true,\n get() {\n return (this.passedParams || {})[paramName];\n },\n set(value) {\n if (!this.passedParams) this.passedParams = {};\n this.passedParams[paramName] = value;\n if (!this.initialized) return;\n this.updateSwiperOnPropChange(paramName, value);\n }\n });\n});\nclass SwiperSlide extends ClassToExtend {\n constructor() {\n super();\n this.attachShadow({\n mode: 'open'\n });\n }\n render() {\n const lazy = this.lazy || this.getAttribute('lazy') === '' || this.getAttribute('lazy') === 'true';\n addStyle(this.shadowRoot, SwiperSlideCSS);\n this.shadowRoot.appendChild(document.createElement('slot'));\n if (lazy) {\n const lazyDiv = document.createElement('div');\n lazyDiv.classList.add('swiper-lazy-preloader');\n lazyDiv.part.add('preloader');\n this.shadowRoot.appendChild(lazyDiv);\n }\n }\n initialize() {\n this.render();\n }\n connectedCallback() {\n this.initialize();\n }\n}\n\n// eslint-disable-next-line\nconst register = () => {\n if (typeof window === 'undefined') return;\n if (!window.customElements.get('swiper-container')) window.customElements.define('swiper-container', SwiperContainer);\n if (!window.customElements.get('swiper-slide')) window.customElements.define('swiper-slide', SwiperSlide);\n};\nif (typeof window !== 'undefined') {\n window.SwiperElementRegisterParams = params => {\n paramsList.push(...params);\n };\n}\n\nexport { SwiperContainer, SwiperSlide, register };\n", "// eslint-disable-next-line\nimport Swiper from 'swiper/bundle';\n// eslint-disable-next-line\nimport { register } from 'swiper/element/bundle';\nimport $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nregister();\n\n\n\nfunction initSwiper(swiperEl) {\n const app = this;\n const $swiperEl = $(swiperEl);\n if ($swiperEl.length === 0) return;\n const isElement = $swiperEl[0].swiper && $swiperEl[0].swiper.isElement;\n if ($swiperEl[0].swiper && !$swiperEl[0].swiper.isElement) return;\n let initialSlide;\n let params = {};\n let isTabs;\n let isRoutableTabs;\n if ($swiperEl.hasClass('tabs')) {\n initialSlide = $swiperEl.children('swiper-slide').indexOf($swiperEl.children('.tab-active')[0]);\n isTabs = true;\n isRoutableTabs = $swiperEl.find('.tabs-routable').length > 0;\n }\n if ($swiperEl.attr('data-swiper')) {\n params = JSON.parse($swiperEl.attr('data-swiper'));\n } else if ($swiperEl[0].f7SwiperParams) {\n params = $swiperEl[0].f7SwiperParams;\n } else {\n params = $swiperEl.dataset();\n Object.keys(params).forEach(key => {\n const value = params[key];\n if (typeof value === 'string' && value.indexOf('{') === 0 && value.indexOf('}') > 0) {\n try {\n params[key] = JSON.parse(value);\n } catch (e) {\n // not JSON\n }\n }\n });\n }\n if (typeof params.initialSlide === 'undefined' && typeof initialSlide !== 'undefined') {\n params.initialSlide = initialSlide;\n }\n const swiper = isElement ? $swiperEl[0].swiper : app.swiper.create($swiperEl[0], params);\n if (isElement) {\n swiper.slideTo(initialSlide, 0);\n }\n function updateSwiper() {\n swiper.update();\n }\n const $tabEl = $swiperEl.parents('.tab').filter(tabEl => {\n return $(tabEl).parent('.tabs').parent('.tabs-animated-wrap, swiper-container.tabs').length === 0;\n }).eq(0);\n $swiperEl.parents('.popup, .login-screen, .sheet-modal, .popover').on('modal:open', updateSwiper);\n $swiperEl.parents('.panel').on('panel:open', updateSwiper);\n if ($tabEl && $tabEl.length) {\n $tabEl.on('tab:show', updateSwiper);\n }\n swiper.on('beforeDestroy', () => {\n $swiperEl.parents('.popup, .login-screen, .sheet-modal, .popover').off('modal:open', updateSwiper);\n $swiperEl.parents('.panel').off('panel:open', updateSwiper);\n if ($tabEl && $tabEl.length) {\n $tabEl.off('tab:show', updateSwiper);\n }\n });\n if (isTabs) {\n swiper.on('slideChange', () => {\n if (isRoutableTabs) {\n let view = app.views.get($swiperEl.parents('.view'));\n if (!view) view = app.views.main;\n const router = view.router;\n const tabRouteUrl = router.findTabRouteUrl($(swiper.slides).eq(swiper.activeIndex)[0]);\n if (tabRouteUrl) {\n setTimeout(() => {\n router.navigate(tabRouteUrl);\n }, 0);\n }\n } else {\n app.tab.show({\n tabEl: $(swiper.slides).eq(swiper.activeIndex)\n });\n }\n });\n }\n}\nexport default {\n name: 'swiper',\n static: {\n Swiper\n },\n create() {\n const app = this;\n app.swiper = ConstructorMethods({\n defaultSelector: '.swiper',\n constructor: Swiper,\n domProp: 'swiper'\n });\n },\n on: {\n pageMounted(page) {\n const app = this;\n page.$el.find('swiper-container.tabs').each(swiperEl => {\n initSwiper.call(app, swiperEl);\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('swiper-container.tabs').each(swiperEl => {\n initSwiper.call(app, swiperEl);\n });\n },\n pageReinit(page) {\n const app = this;\n page.$el.find('swiper-container.tabs').each(swiperEl => {\n const swiper = app.swiper.get(swiperEl);\n if (swiper && swiper.update) swiper.update();\n });\n },\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('swiper-container.tabs').each(swiperEl => {\n initSwiper.call(app, swiperEl);\n });\n },\n tabShow(tabEl) {\n const app = this;\n $(tabEl).find('swiper-container.tabs').each(swiperEl => {\n const swiper = app.swiper.get(swiperEl);\n if (swiper && swiper.update) swiper.update();\n });\n },\n tabBeforeRemove(tabEl) {\n const app = this;\n $(tabEl).find('swiper-container.tabs').each(swiperEl => {\n app.swiper.destroy(swiperEl);\n });\n }\n }\n};", "/* eslint indent: [\"off\"] */\nimport { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, now, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass PhotoBrowser extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const pb = this;\n pb.app = app;\n const defaults = extend({\n on: {}\n }, app.params.photoBrowser);\n\n // Extend defaults with modules params\n pb.useModulesParams(defaults);\n pb.params = extend(defaults, params);\n extend(pb, {\n exposed: false,\n opened: false,\n activeIndex: pb.params.swiper.initialSlide,\n url: pb.params.url,\n swipeToClose: {\n allow: true,\n isTouched: false,\n diff: undefined,\n start: undefined,\n current: undefined,\n started: false,\n activeSlide: undefined,\n timeStart: undefined\n }\n });\n\n // Install Modules\n pb.useModules();\n\n // Init\n pb.init();\n }\n get view() {\n const {\n params,\n app\n } = this;\n return params.view || app.views.main;\n }\n onSlideChange(swiper) {\n const pb = this;\n pb.activeIndex = swiper.activeIndex;\n let current = swiper.activeIndex + 1;\n let total = pb.params.virtualSlides ? pb.params.photos.length : swiper.slides.length;\n if (swiper.params.loop) {\n total -= 2;\n current -= swiper.loopedSlides;\n if (current < 1) current = total + current;\n if (current > total) current -= total;\n }\n const $activeSlideEl = pb.params.virtualSlides ? $(swiper.wrapperEl).find(`.swiper-slide[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : $(swiper.slides).eq(swiper.activeIndex);\n const $previousSlideEl = pb.params.virtualSlides ? $(swiper.wrapperEl).find(`.swiper-slide[data-swiper-slide-index=\"${swiper.previousIndex}\"]`) : $(swiper.slides).eq(swiper.previousIndex);\n let $currentEl = pb.$el.find('.photo-browser-current');\n let $totalEl = pb.$el.find('.photo-browser-total');\n let navbarEl;\n if (pb.params.type === 'page' && pb.params.navbar && $currentEl.length === 0 && pb.app.theme === 'ios') {\n navbarEl = pb.app.navbar.getElByPage(pb.$el);\n if (navbarEl) {\n $currentEl = $(navbarEl).find('.photo-browser-current');\n $totalEl = $(navbarEl).find('.photo-browser-total');\n }\n }\n if ($currentEl.length && $totalEl.length) {\n $currentEl.text(current);\n $totalEl.text(total);\n if (!navbarEl) navbarEl = $currentEl.parents('.navbar')[0];\n if (navbarEl) {\n pb.app.navbar.size(navbarEl);\n }\n }\n\n // Update captions\n if (pb.captions.length > 0) {\n const captionIndex = swiper.params.loop ? $activeSlideEl.attr('data-swiper-slide-index') : pb.activeIndex;\n pb.$captionsContainerEl.find('.photo-browser-caption-active').removeClass('photo-browser-caption-active');\n pb.$captionsContainerEl.find(`[data-caption-index=\"${captionIndex}\"]`).addClass('photo-browser-caption-active');\n }\n\n // Stop Video\n const previousSlideVideo = $previousSlideEl.find('video');\n if (previousSlideVideo.length > 0) {\n if ('pause' in previousSlideVideo[0]) previousSlideVideo[0].pause();\n }\n }\n onTouchStart() {\n const pb = this;\n const swipeToClose = pb.swipeToClose;\n if (!swipeToClose.allow) return;\n swipeToClose.isTouched = true;\n }\n onTouchMove(e) {\n const pb = this;\n const swipeToClose = pb.swipeToClose;\n if (!swipeToClose.isTouched) return;\n if (!swipeToClose.started) {\n swipeToClose.started = true;\n swipeToClose.start = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (pb.params.virtualSlides) {\n swipeToClose.activeSlide = $(pb.swiper.wrapperEl).children('.swiper-slide-active');\n } else {\n swipeToClose.activeSlide = $(pb.swiper.slides).eq(pb.swiper.activeIndex);\n }\n swipeToClose.timeStart = now();\n }\n e.preventDefault();\n swipeToClose.current = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n swipeToClose.diff = swipeToClose.start - swipeToClose.current;\n pb.$el.transition(0).transform(`translate3d(0,${-swipeToClose.diff}px,0)`);\n }\n onTouchEnd() {\n const pb = this;\n const swipeToClose = pb.swipeToClose;\n swipeToClose.isTouched = false;\n if (!swipeToClose.started) {\n swipeToClose.started = false;\n return;\n }\n swipeToClose.started = false;\n swipeToClose.allow = false;\n const diff = Math.abs(swipeToClose.diff);\n const timeDiff = new Date().getTime() - swipeToClose.timeStart;\n if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > 100) {\n nextTick(() => {\n if (pb.$el) {\n if (swipeToClose.diff < 0) pb.$el.addClass('swipe-close-to-bottom');else pb.$el.addClass('swipe-close-to-top');\n }\n pb.emit('local::swipeToClose', pb);\n pb.$el.transform('').transition('');\n pb.close();\n swipeToClose.allow = true;\n });\n return;\n }\n if (diff !== 0) {\n pb.$el.addClass('photo-browser-transitioning').transitionEnd(() => {\n swipeToClose.allow = true;\n pb.$el.removeClass('photo-browser-transitioning');\n });\n } else {\n swipeToClose.allow = true;\n }\n nextTick(() => {\n pb.$el.transform('').transition('');\n });\n }\n\n // Render Functions\n renderNavbar() {\n const pb = this;\n if (pb.params.renderNavbar) return pb.params.renderNavbar.call(pb);\n const iconsColor = pb.params.iconsColor;\n const pageBackLinkText = pb.app.theme === 'ios' && pb.params.pageBackLinkText ? pb.params.pageBackLinkText : '';\n const renderNavbarCount = typeof pb.params.navbarShowCount === 'undefined' ? pb.params.photos.length > 1 : pb.params.navbarShowCount;\n const isPopup = pb.params.type !== 'page';\n return $jsx(\"div\", {\n class: `navbar navbar-photo-browser ${pb.params.theme === 'dark' ? 'navbar-photo-browser-dark' : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: \"navbar-inner navbar-inner-centered-title sliding\"\n }, !isPopup && $jsx(\"div\", {\n class: \"left\"\n }, $jsx(\"a\", {\n class: `link ${!pageBackLinkText ? 'icon-only' : ''} back`\n }, $jsx(\"i\", {\n class: `icon icon-back ${iconsColor ? `color-${iconsColor}` : ''}`\n }), pageBackLinkText && $jsx(\"span\", null, pageBackLinkText))), renderNavbarCount && $jsx(\"div\", {\n class: \"title\"\n }, $jsx(\"span\", {\n class: \"photo-browser-current\"\n }), $jsx(\"span\", {\n class: \"photo-browser-of\"\n }, pb.params.navbarOfText), $jsx(\"span\", {\n class: \"photo-browser-total\"\n })), isPopup && (pb.params.popupCloseLinkText || pb.params.popupCloseLinkIcon) && $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": \".photo-browser-popup\"\n }, pb.params.popupCloseLinkIcon && pb.app.theme === 'ios' && $jsx(\"i\", null, $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"56\",\n height: \"56\",\n viewBox: \"0 0 56 56\"\n }, $jsx(\"path\", {\n fill: \"currentColor\",\n d: \"M 10.0234 43.0234 C 9.2266 43.8203 9.2031 45.1797 10.0234 45.9766 C 10.8438 46.7734 12.1797 46.7734 13.0000 45.9766 L 28.0000 30.9766 L 43.0000 45.9766 C 43.7969 46.7734 45.1563 46.7969 45.9766 45.9766 C 46.7734 45.1562 46.7734 43.8203 45.9766 43.0234 L 30.9531 28.0000 L 45.9766 13.0000 C 46.7734 12.2031 46.7969 10.8437 45.9766 10.0469 C 45.1328 9.2266 43.7969 9.2266 43.0000 10.0469 L 28.0000 25.0469 L 13.0000 10.0469 C 12.1797 9.2266 10.8203 9.2031 10.0234 10.0469 C 9.2266 10.8672 9.2266 12.2031 10.0234 13.0000 L 25.0234 28.0000 Z\"\n }))), pb.params.popupCloseLinkIcon && pb.app.theme === 'md' && $jsx(\"i\", null, $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24px\",\n viewBox: \"0 0 24 24\",\n width: \"24px\",\n fill: \"currentColor\"\n }, $jsx(\"path\", {\n d: \"M0 0h24v24H0V0z\",\n fill: \"none\"\n }), $jsx(\"path\", {\n d: \"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"\n }))), pb.params.popupCloseLinkText && $jsx(\"span\", null, pb.params.popupCloseLinkText)))));\n }\n renderToolbar() {\n const pb = this;\n if (pb.params.renderToolbar) return pb.params.renderToolbar.call(pb);\n const iconsColor = pb.params.iconsColor;\n return $jsx(\"div\", {\n class: \"toolbar toolbar-bottom tabbar\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"a\", {\n class: \"link photo-browser-prev\"\n }, $jsx(\"i\", {\n class: `icon icon-back ${iconsColor ? `color-${iconsColor}` : ''}`\n })), $jsx(\"a\", {\n class: \"link photo-browser-next\"\n }, $jsx(\"i\", {\n class: `icon icon-forward ${iconsColor ? `color-${iconsColor}` : ''}`\n }))));\n }\n renderThumbs() {\n const pb = this;\n return $jsx(\"div\", {\n class: \"toolbar toolbar-bottom photo-browser-thumbs\"\n }, $jsx(\"div\", {\n class: \"swiper\"\n }, $jsx(\"div\", {\n class: \"swiper-wrapper\"\n }, pb.params.thumbs.map((thumb, index) => pb.renderThumb(thumb, index)))));\n }\n renderCaption(caption, index) {\n const pb = this;\n if (pb.params.renderCaption) return pb.params.renderCaption.call(pb, caption, index);\n return $jsx(\"div\", {\n class: \"photo-browser-caption\",\n \"data-caption-index\": index\n }, caption);\n }\n renderObject(photo, index) {\n const pb = this;\n if (pb.params.renderObject) return pb.params.renderObject.call(pb, photo, index);\n return $jsx(\"div\", {\n class: \"photo-browser-slide photo-browser-object-slide swiper-slide\",\n \"data-swiper-slide-index\": index\n }, photo.html ? photo.html : photo);\n }\n renderLazyPhoto(photo, index) {\n const pb = this;\n if (pb.params.renderLazyPhoto) return pb.params.renderLazyPhoto.call(pb, photo, index);\n return $jsx(\"div\", {\n class: \"photo-browser-slide photo-browser-slide-lazy swiper-slide\",\n \"data-swiper-slide-index\": index\n }, $jsx(\"div\", {\n class: \"swiper-lazy-preloader\"\n }), $jsx(\"span\", {\n class: \"swiper-zoom-container\"\n }, $jsx(\"img\", {\n loading: \"lazy\",\n src: photo.url ? photo.url : photo\n })));\n }\n renderPhoto(photo, index) {\n const pb = this;\n if (pb.params.renderPhoto) return pb.params.renderPhoto.call(pb, photo, index);\n return $jsx(\"div\", {\n class: \"photo-browser-slide swiper-slide\",\n \"data-swiper-slide-index\": index\n }, $jsx(\"span\", {\n class: \"swiper-zoom-container\"\n }, $jsx(\"img\", {\n src: photo.url ? photo.url : photo\n })));\n }\n renderThumb(thumb, index) {\n const pb = this;\n const url = typeof thumb === 'string' ? thumb : thumb.url;\n if (pb.params.renderThumb) return pb.params.renderThumb.call(pb, thumb, index);\n return $jsx(\"div\", {\n class: \"photo-browser-thumbs-slide swiper-slide\",\n \"data-swiper-slide-index\": index\n }, url && $jsx(\"img\", {\n src: url,\n loading: \"lazy\"\n }));\n }\n render() {\n const pb = this;\n if (pb.params.render) return pb.params.render.call(pb, pb.params);\n return $jsx(\"div\", {\n class: `photo-browser photo-browser-${pb.params.theme}`\n }, $jsx(\"div\", {\n class: \"view\"\n }, $jsx(\"div\", {\n class: `page photo-browser-page photo-browser-page-${pb.params.theme} no-toolbar ${!pb.params.navbar ? 'no-navbar' : ''}`,\n \"data-name\": \"photo-browser-page\"\n }, pb.params.navbar && pb.renderNavbar(), pb.params.toolbar && pb.renderToolbar(), pb.params.thumbs && pb.params.thumbs.length && pb.renderThumbs(), $jsx(\"div\", {\n class: `photo-browser-captions photo-browser-captions-${pb.params.captionsTheme || pb.params.theme}`\n }, pb.params.photos.map((photo, index) => {\n if (photo.caption) return pb.renderCaption(photo.caption, index);\n return '';\n })), $jsx(\"div\", {\n class: \"photo-browser-swiper-container swiper\"\n }, $jsx(\"div\", {\n class: \"photo-browser-swiper-wrapper swiper-wrapper\"\n }, !pb.params.virtualSlides && pb.params.photos.map((photo, index) => {\n if (photo.html || (typeof photo === 'string' || photo instanceof String) && photo.indexOf('<') >= 0 && photo.indexOf('>') >= 0) {\n return pb.renderObject(photo, index);\n }\n if (pb.params.lazy === true) {\n return pb.renderLazyPhoto(photo, index);\n }\n return pb.renderPhoto(photo, index);\n }))))));\n }\n renderStandalone() {\n const pb = this;\n if (pb.params.renderStandalone) return pb.params.renderStandalone.call(pb);\n const standaloneHtml = ``;\n return standaloneHtml;\n }\n renderPage() {\n const pb = this;\n if (pb.params.renderPage) return pb.params.renderPage.call(pb);\n const pageHtml = pb.render();\n return pageHtml;\n }\n renderPopup() {\n const pb = this;\n if (pb.params.renderPopup) return pb.params.renderPopup.call(pb);\n const popupHtml = ``;\n return popupHtml;\n }\n\n // Callbacks\n onOpen(type, el) {\n const pb = this;\n const app = pb.app;\n const $el = $(el);\n $el[0].f7PhotoBrowser = pb;\n pb.$el = $el;\n pb.el = $el[0];\n pb.openedIn = type;\n pb.opened = true;\n pb.$swiperContainerEl = pb.$el.find('.photo-browser-swiper-container');\n pb.$swiperWrapperEl = pb.$el.find('.photo-browser-swiper-wrapper');\n pb.slides = pb.$el.find('.photo-browser-slide');\n pb.$captionsContainerEl = pb.$el.find('.photo-browser-captions');\n pb.captions = pb.$el.find('.photo-browser-caption');\n const hasThumbs = pb.params.thumbs && pb.params.thumbs.length > 0;\n\n // Init Swiper\n let clickTimeout;\n let preventThumbsSlide;\n let preventMainSlide;\n const initialSlide = pb.activeIndex;\n const swiperParams = extend({}, pb.params.swiper, {\n initialSlide,\n // cssMode:\n // typeof pb.params.swiper.cssMode === 'undefined' && (app.device.ios || app.device.android)\n // ? true\n // : pb.params.swiper.cssMode,\n on: {\n click(e) {\n clearTimeout(clickTimeout);\n if (pb.params.exposition) {\n clickTimeout = setTimeout(() => {\n pb.expositionToggle();\n }, 350);\n }\n pb.emit('local::tap', e);\n pb.emit('local::click', e);\n },\n doubleClick(e) {\n clearTimeout(clickTimeout);\n pb.emit('local::doubleTap', e);\n pb.emit('local::doubleClick', e);\n },\n slideChange() {\n const swiper = this;\n if (hasThumbs && pb.thumbsSwiper && !preventMainSlide) {\n preventThumbsSlide = true;\n pb.thumbsSwiper.slideTo(pb.swiper.activeIndex);\n setTimeout(() => {\n preventThumbsSlide = false;\n });\n }\n pb.onSlideChange(swiper);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n pb.emit('local::slideChange', ...args);\n },\n transitionStart() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n pb.emit('local::transitionStart', ...args);\n },\n transitionEnd() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n pb.emit('local::transitionEnd', ...args);\n },\n slideChangeTransitionStart() {\n const swiper = this;\n pb.onSlideChange(swiper);\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n pb.emit('local::slideChangeTransitionStart', ...args);\n },\n slideChangeTransitionEnd() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n pb.emit('local::slideChangeTransitionEnd', ...args);\n }\n }\n });\n if (pb.params.swipeToClose && pb.params.type !== 'page') {\n extend(swiperParams.on, {\n touchStart(swiper, e) {\n pb.onTouchStart(e);\n pb.emit('local::touchStart', e);\n },\n touchMoveOpposite(swiper, e) {\n pb.onTouchMove(e);\n pb.emit('local::touchMoveOpposite', e);\n },\n touchEnd(swiper, e) {\n pb.onTouchEnd(e);\n pb.emit('local::touchEnd', e);\n }\n });\n }\n if (pb.params.virtualSlides) {\n extend(swiperParams, {\n virtual: {\n slides: pb.params.photos,\n renderSlide(photo, index) {\n if (photo.html || (typeof photo === 'string' || photo instanceof String) && photo.indexOf('<') >= 0 && photo.indexOf('>') >= 0) {\n return pb.renderObject(photo, index);\n }\n if (pb.params.lazy === true) {\n return pb.renderLazyPhoto(photo, index);\n }\n return pb.renderPhoto(photo, index);\n }\n }\n });\n }\n const window = getWindow();\n pb.swiper = app.swiper ? app.swiper.create(pb.$swiperContainerEl[0], swiperParams) : new window.Swiper(pb.$swiperContainerEl[0], swiperParams);\n if (pb.activeIndex === 0 || pb.params.virtualSlides) {\n pb.onSlideChange(pb.swiper);\n }\n if (hasThumbs) {\n const thumbsSwiperParams = {\n el: pb.$el.find('.photo-browser-thumbs .swiper')[0],\n slidesPerView: 'auto',\n centeredSlides: true,\n spaceBetween: 4,\n watchSlidesProgress: true,\n initialSlide,\n on: {\n touchMove() {\n preventMainSlide = true;\n },\n touchEnd() {\n preventMainSlide = false;\n },\n slideChange(s) {\n if (preventThumbsSlide) return;\n pb.swiper.slideTo(s.activeIndex, 0);\n },\n click(s) {\n if (!s.clickedSlide) return;\n const index = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);\n s.slideTo(index, 0);\n }\n }\n };\n pb.thumbsSwiper = app.swiper ? app.swiper.create(thumbsSwiperParams) : new window.Swiper(thumbsSwiperParams);\n }\n if (pb.$el) {\n pb.$el.trigger('photobrowser:open');\n }\n pb.emit('local::open photoBrowserOpen', pb);\n }\n onOpened() {\n const pb = this;\n if (pb.$el && pb.params.type === 'standalone') {\n pb.$el.css('animation', 'none');\n }\n if (pb.$el) {\n pb.$el.trigger('photobrowser:opened');\n }\n pb.emit('local::opened photoBrowserOpened', pb);\n }\n onClose() {\n const pb = this;\n if (pb.destroyed) return;\n\n // Destroy Swiper\n if (pb.swiper && pb.swiper.destroy) {\n pb.swiper.destroy(true, false);\n pb.swiper = null;\n delete pb.swiper;\n }\n if (pb.thumbsSwiper && pb.thumbsSwiper.destroy) {\n pb.thumbsSwiper.destroy(true, false);\n pb.thumbsSwiper = null;\n delete pb.thumbsSwiper;\n }\n if (pb.$el) {\n pb.$el.trigger('photobrowser:close');\n }\n pb.emit('local::close photoBrowserClose', pb);\n }\n onClosed() {\n const pb = this;\n if (pb.destroyed) return;\n pb.opened = false;\n pb.$el = null;\n pb.el = null;\n delete pb.$el;\n delete pb.el;\n if (pb.$el) {\n pb.$el.trigger('photobrowser:closed');\n }\n pb.emit('local::closed photoBrowserClosed', pb);\n }\n\n // Open\n openPage() {\n const pb = this;\n if (pb.opened) return pb;\n const pageHtml = pb.renderPage();\n pb.view.router.navigate({\n url: pb.url,\n route: {\n content: pageHtml,\n path: pb.url,\n on: {\n pageBeforeIn(e, page) {\n pb.view.$el.addClass(`with-photo-browser-page with-photo-browser-page-${pb.params.theme}`);\n pb.onOpen('page', page.el);\n },\n pageAfterIn(e, page) {\n pb.onOpened('page', page.el);\n },\n pageBeforeOut(e, page) {\n pb.view.$el.removeClass(`with-photo-browser-page with-photo-browser-page-exposed with-photo-browser-page-${pb.params.theme}`);\n pb.onClose('page', page.el);\n },\n pageAfterOut(e, page) {\n pb.onClosed('page', page.el);\n }\n }\n }\n });\n return pb;\n }\n openStandalone() {\n const pb = this;\n if (pb.opened) return pb;\n const standaloneHtml = pb.renderStandalone();\n const popupParams = {\n backdrop: false,\n content: standaloneHtml,\n on: {\n popupOpen(popup) {\n pb.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n pb.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n pb.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n pb.onClosed('popup', popup.el);\n }\n }\n };\n if (pb.params.routableModals && pb.view) {\n pb.view.router.navigate({\n url: pb.url,\n route: {\n path: pb.url,\n popup: popupParams\n }\n });\n } else {\n pb.modal = pb.app.popup.create(popupParams).open();\n }\n return pb;\n }\n openPopup() {\n const pb = this;\n if (pb.opened) return pb;\n const popupHtml = pb.renderPopup();\n const popupParams = {\n content: popupHtml,\n push: pb.params.popupPush,\n closeByBackdropClick: pb.params.closeByBackdropClick,\n on: {\n popupOpen(popup) {\n pb.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n pb.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n pb.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n pb.onClosed('popup', popup.el);\n }\n }\n };\n if (pb.params.routableModals && pb.view) {\n pb.view.router.navigate({\n url: pb.url,\n route: {\n path: pb.url,\n popup: popupParams\n }\n });\n } else {\n pb.modal = pb.app.popup.create(popupParams).open();\n }\n return pb;\n }\n\n // Exposition\n expositionEnable() {\n const pb = this;\n if (pb.params.type === 'page') {\n pb.view.$el.addClass('with-photo-browser-page-exposed');\n }\n if (pb.$el) pb.$el.addClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.addClass('photo-browser-captions-exposed');\n pb.exposed = true;\n return pb;\n }\n expositionDisable() {\n const pb = this;\n if (pb.params.type === 'page') {\n pb.view.$el.removeClass('with-photo-browser-page-exposed');\n }\n if (pb.$el) pb.$el.removeClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.removeClass('photo-browser-captions-exposed');\n pb.exposed = false;\n return pb;\n }\n expositionToggle() {\n const pb = this;\n if (pb.params.type === 'page') {\n pb.view.$el.toggleClass('with-photo-browser-page-exposed');\n }\n if (pb.$el) pb.$el.toggleClass('photo-browser-exposed');\n if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.toggleClass('photo-browser-captions-exposed');\n pb.exposed = !pb.exposed;\n return pb;\n }\n open(index) {\n const pb = this;\n const type = pb.params.type;\n if (pb.opened) {\n if (pb.swiper && typeof index !== 'undefined') {\n pb.swiper.slideTo(parseInt(index, 10));\n }\n return pb;\n }\n if (typeof index !== 'undefined') {\n pb.activeIndex = index;\n }\n if (type === 'standalone') {\n pb.openStandalone();\n }\n if (type === 'page') {\n pb.openPage();\n }\n if (type === 'popup') {\n pb.openPopup();\n }\n return pb;\n }\n close() {\n const pb = this;\n if (!pb.opened) return pb;\n if (pb.params.routableModals && pb.view || pb.openedIn === 'page') {\n pb.view.router.back();\n } else {\n pb.modal.once('modalClosed', () => {\n nextTick(() => {\n if (pb.destroyed) return;\n pb.modal.destroy();\n delete pb.modal;\n });\n });\n pb.modal.close();\n }\n return pb;\n }\n // eslint-disable-next-line\n init() {}\n destroy() {\n let pb = this;\n pb.emit('local::beforeDestroy photoBrowserBeforeDestroy', pb);\n if (pb.$el) {\n pb.$el.trigger('photobrowser:beforedestroy');\n pb.$el[0].f7PhotoBrowser = null;\n delete pb.$el[0].f7PhotoBrowser;\n }\n deleteProps(pb);\n pb.destroyed = true;\n pb = null;\n }\n}\nexport default PhotoBrowser;", "import PhotoBrowser from './photo-browser-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'photoBrowser',\n params: {\n photoBrowser: {\n photos: [],\n thumbs: [],\n exposition: true,\n expositionHideCaptions: false,\n type: 'standalone',\n navbar: true,\n toolbar: true,\n theme: 'light',\n captionsTheme: undefined,\n iconsColor: undefined,\n popupPush: false,\n swipeToClose: true,\n pageBackLinkText: 'Back',\n popupCloseLinkText: undefined,\n popupCloseLinkIcon: true,\n navbarOfText: 'of',\n navbarShowCount: undefined,\n view: undefined,\n url: 'photos/',\n routableModals: false,\n virtualSlides: true,\n lazy: true,\n closeByBackdropClick: true,\n renderNavbar: undefined,\n renderToolbar: undefined,\n renderCaption: undefined,\n renderObject: undefined,\n renderLazyPhoto: undefined,\n renderPhoto: undefined,\n renderThumb: undefined,\n renderPage: undefined,\n renderPopup: undefined,\n renderStandalone: undefined,\n swiper: {\n cssMode: false,\n initialSlide: 0,\n spaceBetween: 20,\n speed: 300,\n loop: false,\n keyboard: {\n enabled: true\n },\n navigation: {\n nextEl: '.photo-browser-next',\n prevEl: '.photo-browser-prev'\n },\n zoom: {\n enabled: true,\n maxRatio: 3,\n minRatio: 1\n }\n }\n }\n },\n create() {\n const app = this;\n app.photoBrowser = ConstructorMethods({\n defaultSelector: '.photo-browser-popup, .photo-browser-page',\n constructor: PhotoBrowser,\n app,\n domProp: 'f7PhotoBrowser'\n });\n },\n static: {\n PhotoBrowser\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, now, nextTick } from '../../shared/utils.js';\nimport Modal from '../modal/modal-class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Notification extends Modal {\n constructor(app, params) {\n const extendedParams = extend({\n on: {}\n }, app.params.notification, params);\n\n // Extends with open/close Modal methods;\n super(app, extendedParams);\n const notification = this;\n notification.app = app;\n notification.params = extendedParams;\n const {\n icon,\n title,\n titleRightText,\n subtitle,\n text,\n closeButton,\n closeTimeout,\n cssClass,\n closeOnClick\n } = notification.params;\n let $el;\n if (!notification.params.el) {\n // Find Element\n const notificationHtml = notification.render({\n icon,\n title,\n titleRightText,\n subtitle,\n text,\n closeButton,\n cssClass\n });\n $el = $(notificationHtml);\n } else {\n $el = $(notification.params.el);\n }\n if ($el && $el.length > 0 && $el[0].f7Modal) {\n return $el[0].f7Modal;\n }\n if ($el.length === 0) {\n return notification.destroy();\n }\n extend(notification, {\n $el,\n el: $el[0],\n type: 'notification'\n });\n $el[0].f7Modal = notification;\n if (closeButton) {\n $el.find('.notification-close-button').on('click', () => {\n notification.close();\n });\n }\n $el.on('click', e => {\n if (closeButton && $(e.target).closest('.notification-close-button').length) {\n return;\n }\n notification.emit('local::click notificationClick', notification);\n if (closeOnClick) notification.close();\n });\n notification.on('beforeDestroy', () => {\n $el.off('click');\n });\n\n /* Touch Events */\n let isTouched;\n let isMoved;\n let isScrolling;\n let touchesDiff;\n let touchStartTime;\n let notificationHeight;\n const touchesStart = {};\n function handleTouchStart(e) {\n if (isTouched) return;\n isTouched = true;\n isMoved = false;\n isScrolling = undefined;\n touchStartTime = now();\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n if (typeof isScrolling === 'undefined') {\n isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) < Math.abs(pageX - touchesStart.x));\n }\n if (isScrolling) {\n isTouched = false;\n return;\n }\n e.preventDefault();\n if (!isMoved) {\n notification.$el.removeClass('notification-transitioning');\n notification.$el.transition(0);\n notificationHeight = notification.$el[0].offsetHeight / 2;\n }\n isMoved = true;\n touchesDiff = pageY - touchesStart.y;\n let newTranslate = touchesDiff;\n if (touchesDiff > 0) {\n newTranslate = touchesDiff ** 0.8;\n }\n notification.$el.transform(`translate3d(0, ${newTranslate}px, 0)`);\n }\n function handleTouchEnd() {\n if (!isTouched || !isMoved) {\n isTouched = false;\n isMoved = false;\n return;\n }\n isTouched = false;\n isMoved = false;\n if (touchesDiff === 0) {\n return;\n }\n const timeDiff = now() - touchStartTime;\n notification.$el.transition('');\n notification.$el.addClass('notification-transitioning');\n notification.$el.transform('');\n if (touchesDiff < -10 && timeDiff < 300 || -touchesDiff >= notificationHeight / 1) {\n notification.close();\n }\n }\n function attachTouchEvents() {\n notification.$el.on(app.touchEvents.start, handleTouchStart, {\n passive: true\n });\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n }\n function detachTouchEvents() {\n notification.$el.off(app.touchEvents.start, handleTouchStart, {\n passive: true\n });\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n }\n let timeoutId;\n function closeOnTimeout() {\n timeoutId = nextTick(() => {\n if (isTouched && isMoved) {\n closeOnTimeout();\n return;\n }\n notification.close();\n }, closeTimeout);\n }\n notification.on('open', () => {\n if (notification.params.swipeToClose) {\n attachTouchEvents();\n }\n $('.notification.modal-in').each(openedEl => {\n const notificationInstance = app.notification.get(openedEl);\n if (openedEl !== notification.el && notificationInstance) {\n notificationInstance.close();\n }\n });\n if (closeTimeout) {\n closeOnTimeout();\n }\n });\n notification.on('close beforeDestroy', () => {\n if (notification.params.swipeToClose) {\n detachTouchEvents();\n }\n clearTimeout(timeoutId);\n });\n return notification;\n }\n render() {\n const notification = this;\n if (notification.params.render) return notification.params.render.call(notification, notification);\n const {\n icon,\n title,\n titleRightText,\n subtitle,\n text,\n closeButton,\n cssClass\n } = notification.params;\n return $jsx(\"div\", {\n class: `notification ${icon ? 'notification-with-icon' : ''} ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"notification-header\"\n }, icon && $jsx(\"div\", {\n class: \"notification-icon\"\n }, icon), title && $jsx(\"div\", {\n class: \"notification-title\"\n }, title), titleRightText && $jsx(\"div\", {\n class: \"notification-title-right-text\"\n }, titleRightText), closeButton && $jsx(\"span\", {\n class: \"notification-close-button\"\n })), $jsx(\"div\", {\n class: \"notification-content\"\n }, subtitle && $jsx(\"div\", {\n class: \"notification-subtitle\"\n }, subtitle), text && $jsx(\"div\", {\n class: \"notification-text\"\n }, text)));\n }\n}\nexport default Notification;", "import { extend } from '../../shared/utils.js';\nimport Notification from './notification-class.js';\nimport ModalMethods from '../../shared/modal-methods.js';\nexport default {\n name: 'notification',\n static: {\n Notification\n },\n create() {\n const app = this;\n app.notification = extend({}, ModalMethods({\n app,\n constructor: Notification,\n defaultSelector: '.notification.modal-in'\n }));\n },\n params: {\n notification: {\n icon: null,\n title: null,\n titleRightText: null,\n subtitle: null,\n text: null,\n closeButton: false,\n closeTimeout: null,\n closeOnClick: false,\n swipeToClose: true,\n cssClass: null,\n render: null,\n containerEl: null\n }\n }\n};", "/* eslint \"no-useless-escape\": \"off\" */\nimport $ from '../../shared/dom7.js';\nimport { extend, id, nextTick, deleteProps, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Autocomplete extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const ac = this;\n ac.app = app;\n const device = getDevice();\n const defaults = extend({\n on: {}\n }, app.params.autocomplete);\n\n // Extend defaults with modules params\n ac.useModulesParams(defaults);\n ac.params = extend(defaults, params);\n let $openerEl;\n if (ac.params.openerEl) {\n $openerEl = $(ac.params.openerEl);\n if ($openerEl.length) $openerEl[0].f7Autocomplete = ac;\n }\n let $inputEl;\n if (ac.params.inputEl) {\n $inputEl = $(ac.params.inputEl);\n if ($inputEl.length) $inputEl[0].f7Autocomplete = ac;\n }\n const uniqueId = id();\n let url = params.url;\n if (!url && $openerEl && $openerEl.length) {\n if ($openerEl.attr('href')) url = $openerEl.attr('href');else if ($openerEl.find('a').length > 0) {\n url = $openerEl.find('a').attr('href');\n }\n }\n if (!url || url === '#' || url === '') url = ac.params.url;\n const inputType = ac.params.multiple ? 'checkbox' : 'radio';\n extend(ac, {\n $openerEl,\n openerEl: $openerEl && $openerEl[0],\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n id: uniqueId,\n url,\n value: ac.params.value || [],\n inputType,\n inputName: `${inputType}-${uniqueId}`,\n $modalEl: undefined,\n $dropdownEl: undefined\n });\n let previousQuery = '';\n function onInputChange() {\n let query = ac.$inputEl.val().trim();\n if (!ac.params.source) return;\n ac.params.source.call(ac, query, items => {\n let itemsHTML = '';\n const limit = ac.params.limit ? Math.min(ac.params.limit, items.length) : items.length;\n ac.items = items;\n let regExp;\n if (ac.params.highlightMatches) {\n query = query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n regExp = new RegExp(`(${query})`, 'i');\n }\n let firstValue;\n let firstItem;\n for (let i = 0; i < limit; i += 1) {\n const itemValue = typeof items[i] === 'object' ? items[i][ac.params.valueProperty] : items[i];\n const itemText = typeof items[i] === 'object' ? items[i][ac.params.textProperty] : items[i];\n if (i === 0) {\n firstValue = itemValue;\n firstItem = ac.items[i];\n }\n itemsHTML += ac.renderItem({\n value: itemValue,\n text: ac.params.highlightMatches ? itemText.replace(regExp, '$1') : itemText\n }, i);\n }\n if (itemsHTML === '' && query === '' && ac.params.dropdownPlaceholderText) {\n itemsHTML += ac.renderItem({\n placeholder: true,\n text: ac.params.dropdownPlaceholderText\n });\n }\n ac.$dropdownEl.find('ul').html(itemsHTML);\n if (ac.params.typeahead) {\n if (!firstValue || !firstItem) {\n return;\n }\n if (firstValue.toLowerCase().indexOf(query.toLowerCase()) !== 0) {\n return;\n }\n if (previousQuery.toLowerCase() === query.toLowerCase()) {\n ac.value = [];\n return;\n }\n if (previousQuery.toLowerCase().indexOf(query.toLowerCase()) === 0) {\n previousQuery = query;\n ac.value = [];\n return;\n }\n $inputEl.val(firstValue);\n $inputEl[0].setSelectionRange(query.length, firstValue.length);\n const previousValue = typeof ac.value[0] === 'object' ? ac.value[0][ac.params.valueProperty] : ac.value[0];\n if (!previousValue || firstValue.toLowerCase() !== previousValue.toLowerCase()) {\n ac.value = [firstItem];\n ac.emit('local::change autocompleteChange', [firstItem]);\n }\n }\n previousQuery = query;\n });\n }\n function onPageInputChange() {\n const inputEl = this;\n const value = inputEl.value;\n const isValues = $(inputEl).parents('.autocomplete-values').length > 0;\n let item;\n let itemValue;\n let aValue;\n if (isValues) {\n if (ac.inputType === 'checkbox' && !inputEl.checked) {\n for (let i = 0; i < ac.value.length; i += 1) {\n aValue = typeof ac.value[i] === 'string' ? ac.value[i] : ac.value[i][ac.params.valueProperty];\n if (aValue === value || aValue * 1 === value * 1) {\n ac.value.splice(i, 1);\n }\n }\n ac.updateValues();\n ac.emit('local::change autocompleteChange', ac.value);\n }\n return;\n }\n\n // Find Related Item\n for (let i = 0; i < ac.items.length; i += 1) {\n itemValue = typeof ac.items[i] === 'object' ? ac.items[i][ac.params.valueProperty] : ac.items[i];\n if (itemValue === value || itemValue * 1 === value * 1) item = ac.items[i];\n }\n if (ac.inputType === 'radio') {\n ac.value = [item];\n } else if (inputEl.checked) {\n ac.value.push(item);\n } else {\n for (let i = 0; i < ac.value.length; i += 1) {\n aValue = typeof ac.value[i] === 'object' ? ac.value[i][ac.params.valueProperty] : ac.value[i];\n if (aValue === value || aValue * 1 === value * 1) {\n ac.value.splice(i, 1);\n }\n }\n }\n\n // Update Values Block\n ac.updateValues();\n\n // On Select Callback\n if (ac.inputType === 'radio' && inputEl.checked || ac.inputType === 'checkbox') {\n ac.emit('local::change autocompleteChange', ac.value);\n }\n }\n function onHtmlClick(e) {\n const $targetEl = $(e.target);\n if ($targetEl.is(ac.$inputEl[0]) || ac.$dropdownEl && $targetEl.closest(ac.$dropdownEl[0]).length) return;\n ac.close();\n }\n function onOpenerClick() {\n ac.open();\n }\n function onInputFocus() {\n ac.open();\n }\n function onInputBlur() {\n if (ac.$dropdownEl.find('label.active-state').length > 0) return;\n setTimeout(() => {\n ac.close();\n }, 0);\n }\n function onResize() {\n ac.positionDropdown();\n }\n function onKeyDown(e) {\n if (!ac.opened) return;\n if (e.keyCode === 27) {\n // ESC\n e.preventDefault();\n ac.$inputEl.blur();\n return;\n }\n if (e.keyCode === 13) {\n // Enter\n const $selectedItemLabel = ac.$dropdownEl.find('.autocomplete-dropdown-selected label');\n if ($selectedItemLabel.length) {\n e.preventDefault();\n $selectedItemLabel.trigger('click');\n ac.$inputEl.blur();\n return;\n }\n if (ac.params.typeahead) {\n e.preventDefault();\n ac.$inputEl.blur();\n }\n return;\n }\n if (e.keyCode !== 40 && e.keyCode !== 38) return;\n e.preventDefault();\n const $selectedItem = ac.$dropdownEl.find('.autocomplete-dropdown-selected');\n let $newItem;\n if ($selectedItem.length) {\n $newItem = $selectedItem[e.keyCode === 40 ? 'next' : 'prev']('li');\n if (!$newItem.length) {\n $newItem = ac.$dropdownEl.find('li').eq(e.keyCode === 40 ? 0 : ac.$dropdownEl.find('li').length - 1);\n }\n } else {\n $newItem = ac.$dropdownEl.find('li').eq(e.keyCode === 40 ? 0 : ac.$dropdownEl.find('li').length - 1);\n }\n if ($newItem.hasClass('autocomplete-dropdown-placeholder')) return;\n $selectedItem.removeClass('autocomplete-dropdown-selected');\n $newItem.addClass('autocomplete-dropdown-selected');\n }\n function onDropdownClick() {\n const $clickedEl = $(this);\n let clickedItem;\n for (let i = 0; i < ac.items.length; i += 1) {\n const itemValue = typeof ac.items[i] === 'object' ? ac.items[i][ac.params.valueProperty] : ac.items[i];\n const value = $clickedEl.attr('data-value');\n if (itemValue === value || itemValue * 1 === value * 1) {\n clickedItem = ac.items[i];\n }\n }\n if (ac.params.updateInputValueOnSelect) {\n ac.$inputEl.val(typeof clickedItem === 'object' ? clickedItem[ac.params.valueProperty] : clickedItem);\n ac.$inputEl.trigger('input change');\n }\n ac.value = [clickedItem];\n ac.emit('local::change autocompleteChange', [clickedItem]);\n ac.close();\n }\n ac.attachEvents = function attachEvents() {\n if (ac.params.openIn !== 'dropdown' && ac.$openerEl) {\n ac.$openerEl.on('click', onOpenerClick);\n }\n if (ac.params.openIn === 'dropdown' && ac.$inputEl) {\n ac.$inputEl.on('focus', onInputFocus);\n ac.$inputEl.on(ac.params.inputEvents, onInputChange);\n if (device.android) {\n $('html').on('click', onHtmlClick);\n } else {\n ac.$inputEl.on('blur', onInputBlur);\n }\n ac.$inputEl.on('keydown', onKeyDown);\n }\n };\n ac.detachEvents = function attachEvents() {\n if (ac.params.openIn !== 'dropdown' && ac.$openerEl) {\n ac.$openerEl.off('click', onOpenerClick);\n }\n if (ac.params.openIn === 'dropdown' && ac.$inputEl) {\n ac.$inputEl.off('focus', onInputFocus);\n ac.$inputEl.off(ac.params.inputEvents, onInputChange);\n if (device.android) {\n $('html').off('click', onHtmlClick);\n } else {\n ac.$inputEl.off('blur', onInputBlur);\n }\n ac.$inputEl.off('keydown', onKeyDown);\n }\n };\n ac.attachDropdownEvents = function attachDropdownEvents() {\n ac.$dropdownEl.on('click', 'label', onDropdownClick);\n app.on('resize', onResize);\n };\n ac.detachDropdownEvents = function detachDropdownEvents() {\n ac.$dropdownEl.off('click', 'label', onDropdownClick);\n app.off('resize', onResize);\n };\n ac.attachPageEvents = function attachPageEvents() {\n ac.$el.on('change', 'input[type=\"radio\"], input[type=\"checkbox\"]', onPageInputChange);\n if (ac.params.closeOnSelect && !ac.params.multiple) {\n ac.$el.once('click', '.list label', () => {\n nextTick(() => {\n ac.close();\n });\n });\n }\n };\n ac.detachPageEvents = function detachPageEvents() {\n ac.$el.off('change', 'input[type=\"radio\"], input[type=\"checkbox\"]', onPageInputChange);\n };\n\n // Install Modules\n ac.useModules();\n\n // Init\n ac.init();\n return ac;\n }\n get view() {\n const ac = this;\n const {\n $openerEl,\n $inputEl,\n app\n } = ac;\n let view;\n if (ac.params.view) {\n view = ac.params.view;\n } else if ($openerEl || $inputEl) {\n const $el = $openerEl || $inputEl;\n view = $el.closest('.view').length && $el.closest('.view')[0].f7View;\n }\n if (!view) view = app.views.main;\n return view;\n }\n positionDropdown() {\n const ac = this;\n const {\n $inputEl,\n app,\n $dropdownEl\n } = ac;\n const $pageContentEl = $inputEl.parents('.page-content');\n if ($pageContentEl.length === 0) return;\n const inputOffset = $inputEl.offset();\n const inputOffsetWidth = $inputEl[0].offsetWidth;\n const inputOffsetHeight = $inputEl[0].offsetHeight;\n const $listEl = $inputEl.parents('.list');\n let $listParent;\n $listEl.parents().each(parentEl => {\n if ($listParent) return;\n const $parentEl = $(parentEl);\n if ($parentEl.parent($pageContentEl).length) $listParent = $parentEl;\n });\n const listOffset = $listEl.offset();\n const paddingBottom = parseInt($pageContentEl.css('padding-bottom'), 10);\n const listOffsetLeft = $listEl.length > 0 ? listOffset.left - $pageContentEl.offset().left : 0;\n const inputOffsetLeft = inputOffset.left - ($listEl.length > 0 ? listOffset.left : 0) - (app.rtl ? 0 : 0);\n const inputOffsetTop = inputOffset.top - ($pageContentEl.offset().top - $pageContentEl[0].scrollTop);\n const maxHeight = $pageContentEl[0].scrollHeight - paddingBottom - (inputOffsetTop + $pageContentEl[0].scrollTop) - $inputEl[0].offsetHeight;\n const paddingProp = app.rtl ? 'padding-right' : 'padding-left';\n let paddingValue;\n if ($listEl.length) {\n paddingValue = (app.rtl ? $listEl[0].offsetWidth - inputOffsetLeft - inputOffsetWidth : inputOffsetLeft) - (app.theme === 'md' ? 16 : 15);\n }\n $dropdownEl.css({\n left: `${$listEl.length > 0 ? listOffsetLeft : inputOffsetLeft}px`,\n top: `${inputOffsetTop + $pageContentEl[0].scrollTop + inputOffsetHeight}px`,\n width: `${$listEl.length > 0 ? $listEl[0].offsetWidth : inputOffsetWidth}px`\n });\n $dropdownEl.children('.autocomplete-dropdown-inner').css({\n maxHeight: `${maxHeight}px`,\n [paddingProp]: $listEl.length > 0 ? `${paddingValue}px` : ''\n });\n }\n focus() {\n const ac = this;\n ac.$el.find('input[type=search]').focus();\n }\n source(query) {\n const ac = this;\n if (!ac.params.source) return;\n const {\n $el\n } = ac;\n ac.params.source.call(ac, query, items => {\n let itemsHTML = '';\n const limit = ac.params.limit ? Math.min(ac.params.limit, items.length) : items.length;\n ac.items = items;\n for (let i = 0; i < limit; i += 1) {\n let selected = false;\n const itemValue = typeof items[i] === 'object' ? items[i][ac.params.valueProperty] : items[i];\n for (let j = 0; j < ac.value.length; j += 1) {\n const aValue = typeof ac.value[j] === 'object' ? ac.value[j][ac.params.valueProperty] : ac.value[j];\n if (aValue === itemValue || aValue * 1 === itemValue * 1) selected = true;\n }\n itemsHTML += ac.renderItem({\n value: itemValue,\n text: typeof items[i] === 'object' ? items[i][ac.params.textProperty] : items[i],\n inputType: ac.inputType,\n id: ac.id,\n inputName: ac.inputName,\n selected\n }, i);\n }\n $el.find('.autocomplete-found ul').html(itemsHTML);\n if (items.length === 0) {\n if (query.length !== 0) {\n $el.find('.autocomplete-not-found').show();\n $el.find('.autocomplete-found, .autocomplete-values').hide();\n } else {\n $el.find('.autocomplete-values').show();\n $el.find('.autocomplete-found, .autocomplete-not-found').hide();\n }\n } else {\n $el.find('.autocomplete-found').show();\n $el.find('.autocomplete-not-found, .autocomplete-values').hide();\n }\n });\n }\n updateValues() {\n const ac = this;\n let valuesHTML = '';\n for (let i = 0; i < ac.value.length; i += 1) {\n valuesHTML += ac.renderItem({\n value: typeof ac.value[i] === 'object' ? ac.value[i][ac.params.valueProperty] : ac.value[i],\n text: typeof ac.value[i] === 'object' ? ac.value[i][ac.params.textProperty] : ac.value[i],\n inputType: ac.inputType,\n id: ac.id,\n inputName: `${ac.inputName}-checked}`,\n selected: true\n }, i);\n }\n ac.$el.find('.autocomplete-values ul').html(valuesHTML);\n }\n preloaderHide() {\n const ac = this;\n if (ac.params.openIn === 'dropdown' && ac.$dropdownEl) {\n ac.$dropdownEl.find('.autocomplete-preloader').removeClass('autocomplete-preloader-visible');\n } else {\n $('.autocomplete-preloader').removeClass('autocomplete-preloader-visible');\n }\n }\n preloaderShow() {\n const ac = this;\n if (ac.params.openIn === 'dropdown' && ac.$dropdownEl) {\n ac.$dropdownEl.find('.autocomplete-preloader').addClass('autocomplete-preloader-visible');\n } else {\n $('.autocomplete-preloader').addClass('autocomplete-preloader-visible');\n }\n }\n renderPreloader() {\n const ac = this;\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n return $jsx(\"div\", {\n class: `autocomplete-preloader preloader ${ac.params.preloaderColor ? `color-${ac.params.preloaderColor}` : ''}`\n }, preloaders[`${ac.app.theme}PreloaderContent`] || '');\n }\n renderSearchbar() {\n const ac = this;\n if (ac.params.renderSearchbar) return ac.params.renderSearchbar.call(ac);\n return $jsx(\"form\", {\n class: \"searchbar\"\n }, $jsx(\"div\", {\n class: \"searchbar-inner\"\n }, $jsx(\"div\", {\n class: \"searchbar-input-wrap\"\n }, $jsx(\"input\", {\n type: \"search\",\n spellcheck: ac.params.searchbarSpellcheck || 'false',\n placeholder: ac.params.searchbarPlaceholder\n }), $jsx(\"i\", {\n class: \"searchbar-icon\"\n }), $jsx(\"span\", {\n class: \"input-clear-button\"\n })), ac.params.searchbarDisableButton && $jsx(\"span\", {\n class: \"searchbar-disable-button\"\n }, ac.params.searchbarDisableText)));\n }\n renderItem(item, index) {\n const ac = this;\n if (ac.params.renderItem) return ac.params.renderItem.call(ac, item, index);\n const itemValue = item.value && typeof item.value === 'string' ? item.value.replace(/\"/g, '"') : item.value;\n if (ac.params.openIn !== 'dropdown') {\n return $jsx(\"li\", null, $jsx(\"label\", {\n class: `item-${item.inputType} item-content`\n }, $jsx(\"input\", {\n type: item.inputType,\n name: item.inputName,\n value: itemValue,\n _checked: item.selected\n }), $jsx(\"i\", {\n class: `icon icon-${item.inputType}`\n }), $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, item.text))));\n }\n // Dropdown\n if (!item.placeholder) {\n return $jsx(\"li\", null, $jsx(\"label\", {\n class: \"item-radio item-content\",\n \"data-value\": itemValue\n }, $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, item.text))));\n }\n\n // Dropwdown placeholder\n return $jsx(\"li\", {\n class: \"autocomplete-dropdown-placeholder\"\n }, $jsx(\"label\", {\n class: \"item-content\"\n }, $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, item.text))));\n }\n renderNavbar() {\n const ac = this;\n if (ac.params.renderNavbar) return ac.params.renderNavbar.call(ac);\n let pageTitle = ac.params.pageTitle;\n if (typeof pageTitle === 'undefined' && ac.$openerEl && ac.$openerEl.length) {\n pageTitle = ac.$openerEl.find('.item-title').text().trim();\n }\n const inPopup = ac.params.openIn === 'popup';\n\n // eslint-disable-next-line\n const navbarLeft = inPopup ? ac.params.preloader && $jsx(\"div\", {\n class: \"left\"\n }, ac.renderPreloader()) : $jsx(\"div\", {\n class: \"left sliding\"\n }, $jsx(\"a\", {\n class: \"link back\"\n }, $jsx(\"i\", {\n class: \"icon icon-back\"\n }), $jsx(\"span\", {\n class: \"if-not-md\"\n }, ac.params.pageBackLinkText)));\n const navbarRight = inPopup ? $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": \".autocomplete-popup\"\n }, ac.params.popupCloseLinkText)) : ac.params.preloader && $jsx(\"div\", {\n class: \"right\"\n }, ac.renderPreloader());\n return $jsx(\"div\", {\n class: `navbar ${ac.params.navbarColorTheme ? `color-${ac.params.navbarColorTheme}` : ''}`\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: `navbar-inner ${ac.params.navbarColorTheme ? `color-${ac.params.navbarColorTheme}` : ''}`\n }, navbarLeft, pageTitle && $jsx(\"div\", {\n class: \"title sliding\"\n }, pageTitle), navbarRight, $jsx(\"div\", {\n class: \"subnavbar sliding\"\n }, ac.renderSearchbar())));\n }\n renderDropdown() {\n const ac = this;\n if (ac.params.renderDropdown) return ac.params.renderDropdown.call(ac, ac.items);\n return $jsx(\"div\", {\n class: \"autocomplete-dropdown\"\n }, $jsx(\"div\", {\n class: \"autocomplete-dropdown-inner\"\n }, $jsx(\"div\", {\n class: `list no-safe-areas`\n }, $jsx(\"ul\", null))), ac.params.preloader && ac.renderPreloader());\n }\n renderPage(inPopup) {\n const ac = this;\n if (ac.params.renderPage) return ac.params.renderPage.call(ac, ac.items);\n return $jsx(\"div\", {\n class: \"page page-with-subnavbar autocomplete-page\",\n \"data-name\": \"autocomplete-page\"\n }, ac.renderNavbar(inPopup), $jsx(\"div\", {\n class: \"searchbar-backdrop\"\n }), $jsx(\"div\", {\n class: \"page-content\"\n }, $jsx(\"div\", {\n class: `list autocomplete-list autocomplete-found autocomplete-list-${ac.id} ${ac.params.formColorTheme ? `color-${ac.params.formColorTheme}` : ''}`\n }, $jsx(\"ul\", null)), $jsx(\"div\", {\n class: \"list autocomplete-not-found\"\n }, $jsx(\"ul\", null, $jsx(\"li\", {\n class: \"item-content\"\n }, $jsx(\"div\", {\n class: \"item-inner\"\n }, $jsx(\"div\", {\n class: \"item-title\"\n }, ac.params.notFoundText))))), $jsx(\"div\", {\n class: \"list autocomplete-values\"\n }, $jsx(\"ul\", null))));\n }\n renderPopup() {\n const ac = this;\n if (ac.params.renderPopup) return ac.params.renderPopup.call(ac, ac.items);\n return $jsx(\"div\", {\n class: \"popup autocomplete-popup\"\n }, $jsx(\"div\", {\n class: \"view\"\n }, ac.renderPage(true), \";\"));\n }\n onOpen(type, el) {\n const ac = this;\n const app = ac.app;\n const $el = $(el);\n ac.$el = $el;\n ac.el = $el[0];\n ac.openedIn = type;\n ac.opened = true;\n if (ac.params.openIn === 'dropdown') {\n ac.attachDropdownEvents();\n ac.$dropdownEl.addClass('autocomplete-dropdown-in');\n ac.$inputEl.trigger('input');\n } else {\n // Init SB\n let $searchbarEl = $el.find('.searchbar');\n if (ac.params.openIn === 'page' && app.theme === 'ios' && $searchbarEl.length === 0) {\n $searchbarEl = $(app.navbar.getElByPage($el)).find('.searchbar');\n }\n ac.searchbar = app.searchbar.create({\n el: $searchbarEl,\n backdropEl: $el.find('.searchbar-backdrop'),\n customSearch: true,\n on: {\n search(sb, query) {\n if (query.length === 0 && ac.searchbar.enabled) {\n ac.searchbar.backdropShow();\n } else {\n ac.searchbar.backdropHide();\n }\n ac.source(query);\n }\n }\n });\n\n // Attach page events\n ac.attachPageEvents();\n\n // Update Values On Page Init\n ac.updateValues();\n\n // Source on load\n if (ac.params.requestSourceOnOpen) ac.source('');\n }\n ac.emit('local::open autocompleteOpen', ac);\n }\n autoFocus() {\n const ac = this;\n if (ac.searchbar && ac.searchbar.$inputEl) {\n ac.searchbar.$inputEl.focus();\n }\n return ac;\n }\n onOpened() {\n const ac = this;\n if (ac.params.openIn !== 'dropdown' && ac.params.autoFocus) {\n ac.autoFocus();\n }\n ac.emit('local::opened autocompleteOpened', ac);\n }\n onClose() {\n const ac = this;\n if (ac.destroyed) return;\n\n // Destroy SB\n if (ac.searchbar && ac.searchbar.destroy) {\n ac.searchbar.destroy();\n ac.searchbar = null;\n delete ac.searchbar;\n }\n if (ac.params.openIn === 'dropdown') {\n ac.detachDropdownEvents();\n ac.$dropdownEl.removeClass('autocomplete-dropdown-in').remove();\n } else {\n ac.detachPageEvents();\n }\n ac.emit('local::close autocompleteClose', ac);\n }\n onClosed() {\n const ac = this;\n if (ac.destroyed) return;\n ac.opened = false;\n ac.$el = null;\n ac.el = null;\n delete ac.$el;\n delete ac.el;\n ac.emit('local::closed autocompleteClosed', ac);\n }\n openPage() {\n const ac = this;\n if (ac.opened) return ac;\n const pageHtml = ac.renderPage();\n ac.view.router.navigate({\n url: ac.url,\n route: {\n content: pageHtml,\n path: ac.url,\n on: {\n pageBeforeIn(e, page) {\n ac.onOpen('page', page.el);\n },\n pageAfterIn(e, page) {\n ac.onOpened('page', page.el);\n },\n pageBeforeOut(e, page) {\n ac.onClose('page', page.el);\n },\n pageAfterOut(e, page) {\n ac.onClosed('page', page.el);\n }\n },\n options: {\n animate: ac.params.animate\n }\n }\n });\n return ac;\n }\n openPopup() {\n const ac = this;\n if (ac.opened) return ac;\n const popupHtml = ac.renderPopup();\n const popupParams = {\n content: popupHtml,\n animate: ac.params.animate,\n push: ac.params.popupPush,\n swipeToClose: ac.params.popupSwipeToClose,\n on: {\n popupOpen(popup) {\n ac.onOpen('popup', popup.el);\n },\n popupOpened(popup) {\n ac.onOpened('popup', popup.el);\n },\n popupClose(popup) {\n ac.onClose('popup', popup.el);\n },\n popupClosed(popup) {\n ac.onClosed('popup', popup.el);\n }\n }\n };\n if (ac.params.routableModals && ac.view) {\n ac.view.router.navigate({\n url: ac.url,\n route: {\n path: ac.url,\n popup: popupParams\n }\n });\n } else {\n ac.modal = ac.app.popup.create(popupParams).open(ac.params.animate);\n }\n return ac;\n }\n openDropdown() {\n const ac = this;\n if (!ac.$dropdownEl) {\n ac.$dropdownEl = $(ac.renderDropdown());\n }\n const $pageContentEl = ac.$inputEl.parents('.page-content');\n if (ac.params.dropdownContainerEl) {\n $(ac.params.dropdownContainerEl).append(ac.$dropdownEl);\n } else if ($pageContentEl.length === 0) {\n ac.$dropdownEl.insertAfter(ac.$inputEl);\n } else {\n ac.positionDropdown();\n $pageContentEl.append(ac.$dropdownEl);\n }\n ac.onOpen('dropdown', ac.$dropdownEl);\n ac.onOpened('dropdown', ac.$dropdownEl);\n }\n open() {\n const ac = this;\n if (ac.opened) return ac;\n const openIn = ac.params.openIn;\n ac[`open${openIn.split('').map((el, index) => {\n if (index === 0) return el.toUpperCase();\n return el;\n }).join('')}`]();\n return ac;\n }\n close() {\n const ac = this;\n if (!ac.opened) return ac;\n if (ac.params.openIn === 'dropdown') {\n ac.onClose();\n ac.onClosed();\n } else if (ac.params.routableModals && ac.view || ac.openedIn === 'page') {\n ac.view.router.back({\n animate: ac.params.animate\n });\n } else {\n ac.modal.once('modalClosed', () => {\n nextTick(() => {\n if (ac.destroyed) return;\n ac.modal.destroy();\n delete ac.modal;\n });\n });\n ac.modal.close();\n }\n return ac;\n }\n init() {\n const ac = this;\n ac.attachEvents();\n }\n destroy() {\n const ac = this;\n ac.emit('local::beforeDestroy autocompleteBeforeDestroy', ac);\n ac.detachEvents();\n if (ac.$inputEl && ac.$inputEl[0]) {\n delete ac.$inputEl[0].f7Autocomplete;\n }\n if (ac.$openerEl && ac.$openerEl[0]) {\n delete ac.$openerEl[0].f7Autocomplete;\n }\n deleteProps(ac);\n ac.destroyed = true;\n }\n}\nexport default Autocomplete;", "import { extend } from '../../shared/utils.js';\nimport Autocomplete from './autocomplete-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'autocomplete',\n params: {\n autocomplete: {\n openerEl: undefined,\n inputEl: undefined,\n view: undefined,\n // DropDown\n dropdownContainerEl: undefined,\n dropdownPlaceholderText: undefined,\n typeahead: false,\n highlightMatches: true,\n updateInputValueOnSelect: true,\n inputEvents: 'input',\n value: undefined,\n multiple: false,\n source: undefined,\n limit: undefined,\n valueProperty: 'id',\n textProperty: 'text',\n openIn: 'page',\n // or 'popup' or 'dropdown'\n pageBackLinkText: 'Back',\n popupCloseLinkText: 'Close',\n pageTitle: undefined,\n searchbarPlaceholder: 'Search...',\n searchbarDisableText: 'Cancel',\n searchbarDisableButton: true,\n searchbarSpellcheck: false,\n popupPush: false,\n popupSwipeToClose: undefined,\n animate: true,\n autoFocus: false,\n closeOnSelect: false,\n notFoundText: 'Nothing found',\n requestSourceOnOpen: false,\n // Preloader\n preloaderColor: undefined,\n preloader: false,\n // Colors\n formColorTheme: undefined,\n navbarColorTheme: undefined,\n // Routing\n routableModals: false,\n url: 'select/',\n // Custom render functions\n renderDropdown: undefined,\n renderPage: undefined,\n renderPopup: undefined,\n renderItem: undefined,\n renderSearchbar: undefined,\n renderNavbar: undefined\n }\n },\n static: {\n Autocomplete\n },\n create() {\n const app = this;\n app.autocomplete = extend(ConstructorMethods({\n defaultSelector: undefined,\n constructor: Autocomplete,\n app,\n domProp: 'f7Autocomplete'\n }), {\n open(autocompleteEl) {\n const ac = app.autocomplete.get(autocompleteEl);\n if (ac && ac.open) return ac.open();\n return undefined;\n },\n close(autocompleteEl) {\n const ac = app.autocomplete.get(autocompleteEl);\n if (ac && ac.close) return ac.close();\n return undefined;\n }\n });\n }\n};", "import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport { getSupport } from '../../shared/get-support.js';\nimport Framework7Class from '../../shared/class.js';\nclass Tooltip extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const tooltip = this;\n const support = getSupport();\n const defaults = extend({}, app.params.tooltip);\n const document = getDocument();\n\n // Extend defaults with modules params\n tooltip.useModulesParams(defaults);\n tooltip.params = extend(defaults, params);\n if (typeof params.offset === 'undefined' && support.touch && tooltip.params.trigger === 'hover') {\n tooltip.params.offset = 10;\n }\n const {\n targetEl,\n containerEl\n } = tooltip.params;\n if (!targetEl && !tooltip.params.delegated) return tooltip;\n const $targetEl = $(targetEl);\n if ($targetEl.length === 0 && !tooltip.params.delegated) return tooltip;\n if ($targetEl[0] && $targetEl[0].f7Tooltip && !tooltip.params.delegated) return $targetEl[0].f7Tooltip;\n let $containerEl = $(containerEl || app.$el).eq(0);\n if ($containerEl.length === 0) {\n $containerEl = app.$el;\n }\n const $el = $(tooltip.render()).eq(0);\n extend(tooltip, {\n app,\n $targetEl,\n targetEl: $targetEl && $targetEl[0],\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n $el,\n el: $el && $el[0],\n text: tooltip.params.text || '',\n visible: false,\n opened: false\n });\n if ($targetEl[0]) $targetEl[0].f7Tooltip = tooltip;\n const touchesStart = {};\n let isTouched;\n function handleClick() {\n if (tooltip.opened) tooltip.hide();else tooltip.show(this);\n }\n function handleClickOut(e) {\n if (tooltip.opened && ($(e.target).closest($targetEl).length || $(e.target).closest(tooltip.$el).length)) return;\n tooltip.hide();\n }\n function handleTouchStart(e) {\n if (isTouched) return;\n isTouched = true;\n touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n tooltip.show(this);\n }\n function handleTouchMove(e) {\n if (!isTouched) return;\n const x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n const y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n const distance = ((x - touchesStart.x) ** 2 + (y - touchesStart.y) ** 2) ** 0.5;\n if (distance > 50) {\n isTouched = false;\n tooltip.hide();\n }\n }\n function handleTouchEnd() {\n if (!isTouched) return;\n isTouched = false;\n tooltip.hide();\n }\n function handleMouseEnter() {\n tooltip.show(this);\n }\n function handleMouseLeave() {\n tooltip.hide();\n }\n function handleTransitionEnd() {\n if (!$el.hasClass('tooltip-in')) {\n $el.removeClass('tooltip-out').remove();\n }\n }\n tooltip.attachEvents = function attachEvents() {\n $el.on('transitionend', handleTransitionEnd);\n if (tooltip.params.trigger === 'click') {\n if (tooltip.params.delegated) {\n $(document).on('click', tooltip.params.targetEl, handleClick);\n } else {\n tooltip.$targetEl.on('click', handleClick);\n }\n $('html').on('click', handleClickOut);\n return;\n }\n if (tooltip.params.trigger === 'manual') return;\n if (support.touch) {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (tooltip.params.delegated) {\n $(document).on(app.touchEvents.start, tooltip.params.targetEl, handleTouchStart, passive);\n } else {\n tooltip.$targetEl.on(app.touchEvents.start, handleTouchStart, passive);\n }\n app.on('touchmove', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n } else {\n // eslint-disable-next-line\n if (tooltip.params.delegated) {\n $(document).on(support.pointerEvents ? 'pointerenter' : 'mouseenter', tooltip.params.targetEl, handleMouseEnter, true);\n $(document).on(support.pointerEvents ? 'pointerleave' : 'mouseleave', tooltip.params.targetEl, handleMouseLeave, true);\n } else {\n tooltip.$targetEl.on(support.pointerEvents ? 'pointerenter' : 'mouseenter', handleMouseEnter);\n tooltip.$targetEl.on(support.pointerEvents ? 'pointerleave' : 'mouseleave', handleMouseLeave);\n }\n }\n };\n tooltip.detachEvents = function detachEvents() {\n $el.off('transitionend', handleTransitionEnd);\n if (tooltip.params.trigger === 'click') {\n if (tooltip.params.delegated) {\n $(document).on('click', tooltip.params.targetEl, handleClick);\n } else {\n tooltip.$targetEl.off('click', handleClick);\n }\n $('html').off('click', handleClickOut);\n return;\n }\n if (tooltip.params.trigger === 'manual') return;\n if (support.touch) {\n const passive = support.passiveListener ? {\n passive: true\n } : false;\n if (tooltip.params.delegated) {\n $(document).off(app.touchEvents.start, tooltip.params.targetEl, handleTouchStart, passive);\n } else {\n tooltip.$targetEl.off(app.touchEvents.start, handleTouchStart, passive);\n }\n app.off('touchmove', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n } else {\n // eslint-disable-next-line\n if (tooltip.params.delegated) {\n $(document).off(support.pointerEvents ? 'pointerenter' : 'mouseenter', tooltip.params.targetEl, handleMouseEnter, true);\n $(document).off(support.pointerEvents ? 'pointerleave' : 'mouseleave', tooltip.params.targetEl, handleMouseLeave, true);\n } else {\n tooltip.$targetEl.off(support.pointerEvents ? 'pointerenter' : 'mouseenter', handleMouseEnter);\n tooltip.$targetEl.off(support.pointerEvents ? 'pointerleave' : 'mouseleave', handleMouseLeave);\n }\n }\n };\n\n // Install Modules\n tooltip.useModules();\n tooltip.init();\n return tooltip;\n }\n setTargetEl(targetEl) {\n const tooltip = this;\n tooltip.detachEvents();\n tooltip.$targetEl = $(targetEl);\n tooltip.targetEl = tooltip.$targetEl[0];\n tooltip.attachEvents();\n return tooltip;\n }\n position(targetEl) {\n const tooltip = this;\n const {\n $el,\n app,\n $containerEl\n } = tooltip;\n const hasContainerEl = !!tooltip.params.containerEl;\n const tooltipOffset = tooltip.params.offset || 0;\n $el.css({\n left: '',\n top: ''\n });\n const $targetEl = $(targetEl || tooltip.targetEl);\n const [width, height] = [$el.width(), $el.height()];\n $el.css({\n left: '',\n top: ''\n });\n let targetWidth;\n let targetHeight;\n let targetOffsetLeft;\n let targetOffsetTop;\n const boundaries = hasContainerEl && $containerEl.length ? $containerEl[0].getBoundingClientRect() : app;\n if ($targetEl && $targetEl.length > 0) {\n targetWidth = $targetEl.outerWidth();\n targetHeight = $targetEl.outerHeight();\n if (typeof targetWidth === 'undefined' && typeof targetHeight === 'undefined') {\n const clientRect = $targetEl[0].getBoundingClientRect();\n targetWidth = clientRect.width;\n targetHeight = clientRect.height;\n }\n const targetOffset = $targetEl.offset();\n targetOffsetLeft = targetOffset.left - boundaries.left;\n targetOffsetTop = targetOffset.top - boundaries.top;\n const targetParentPage = $targetEl.parents('.page');\n if (targetParentPage.length > 0) {\n targetOffsetTop -= targetParentPage[0].scrollTop;\n }\n }\n let [left, top] = [0, 0, 0];\n\n // Top Position\n let position = 'top';\n if (height + tooltipOffset < targetOffsetTop) {\n // On top\n top = targetOffsetTop - height - tooltipOffset;\n } else if (height < boundaries.height - targetOffsetTop - targetHeight) {\n // On bottom\n position = 'bottom';\n top = targetOffsetTop + targetHeight + tooltipOffset;\n } else {\n // On middle\n position = 'middle';\n top = targetHeight / 2 + targetOffsetTop - height / 2;\n if (top <= 0) {\n top = 8;\n } else if (top + height >= boundaries.height) {\n top = boundaries.height - height - 8;\n }\n }\n\n // Horizontal Position\n if (position === 'top' || position === 'bottom') {\n left = targetWidth / 2 + targetOffsetLeft - width / 2;\n if (left < 8) left = 8;\n if (left + width > boundaries.width) left = boundaries.width - width - 8;\n if (left < 0) left = 0;\n } else if (position === 'middle') {\n left = targetOffsetLeft - width;\n if (left < 8 || left + width > boundaries.width) {\n if (left < 8) left = targetOffsetLeft + targetWidth;\n if (left + width > boundaries.width) left = boundaries.width - width - 8;\n }\n }\n\n // Apply Styles\n $el.css({\n top: `${top}px`,\n left: `${left}px`\n });\n }\n show(aroundEl) {\n const tooltip = this;\n const {\n $el,\n $targetEl,\n $containerEl\n } = tooltip;\n if ($containerEl[0] && $el[0] && !$containerEl[0].contains($el[0])) {\n $containerEl.append($el);\n }\n tooltip.position(aroundEl);\n const $aroundEl = $(aroundEl);\n tooltip.visible = true;\n tooltip.opened = true;\n $targetEl.trigger('tooltip:show');\n $el.trigger('tooltip:show');\n if ($aroundEl.length && $aroundEl[0] !== $targetEl[0]) {\n $aroundEl.trigger('tooltip:show');\n }\n tooltip.emit('local::show tooltipShow', tooltip);\n $el.removeClass('tooltip-out').addClass('tooltip-in');\n return tooltip;\n }\n hide() {\n const tooltip = this;\n const {\n $el,\n $targetEl\n } = tooltip;\n tooltip.visible = false;\n tooltip.opened = false;\n $targetEl.trigger('tooltip:hide');\n $el.trigger('tooltip:hide');\n tooltip.emit('local::hide tooltipHide', tooltip);\n $el.addClass('tooltip-out').removeClass('tooltip-in');\n return tooltip;\n }\n render() {\n const tooltip = this;\n if (tooltip.params.render) return tooltip.params.render.call(tooltip, tooltip);\n const {\n cssClass,\n text\n } = tooltip.params;\n return `\n \n `.trim();\n }\n setText(newText) {\n const tooltip = this;\n if (typeof newText === 'undefined') {\n return tooltip;\n }\n tooltip.params.text = newText;\n tooltip.text = newText;\n if (tooltip.$el) {\n tooltip.$el.children('.tooltip-content').html(newText);\n }\n if (tooltip.opened) {\n tooltip.position();\n }\n return tooltip;\n }\n init() {\n const tooltip = this;\n tooltip.attachEvents();\n }\n destroy() {\n const tooltip = this;\n if (!tooltip.$targetEl || tooltip.destroyed) return;\n tooltip.$targetEl.trigger('tooltip:beforedestroy');\n tooltip.emit('local::beforeDestroy tooltipBeforeDestroy', tooltip);\n tooltip.$el.remove();\n if (tooltip.$targetEl[0]) delete tooltip.$targetEl[0].f7Tooltip;\n tooltip.detachEvents();\n deleteProps(tooltip);\n tooltip.destroyed = true;\n }\n}\nexport default Tooltip;", "import $ from '../../shared/dom7.js';\nimport Tooltip from './tooltip-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'tooltip',\n static: {\n Tooltip\n },\n create() {\n const app = this;\n app.tooltip = ConstructorMethods({\n defaultSelector: '.tooltip',\n constructor: Tooltip,\n app,\n domProp: 'f7Tooltip'\n });\n app.tooltip.show = function show(el) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const tooltip = $el[0].f7Tooltip;\n if (!tooltip) return undefined;\n tooltip.show($el[0]);\n return tooltip;\n };\n app.tooltip.hide = function hide(el) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const tooltip = $el[0].f7Tooltip;\n if (!tooltip) return undefined;\n tooltip.hide();\n return tooltip;\n };\n app.tooltip.setText = function text(el, newText) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const tooltip = $el[0].f7Tooltip;\n if (!tooltip) return undefined;\n tooltip.setText(newText);\n return tooltip;\n };\n },\n params: {\n tooltip: {\n targetEl: null,\n delegated: false,\n text: null,\n cssClass: null,\n render: null,\n offset: 0,\n trigger: 'hover',\n containerEl: undefined\n }\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.tooltip-init').each(el => {\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.tooltip-init').each(el => {\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.tooltip-init').each(el => {\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.tooltip-init').each(el => {\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n });\n }\n },\n pageBeforeRemove(page) {\n const app = this;\n page.$el.find('.tooltip-init').each(el => {\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n });\n if (app.theme === 'ios' && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {\n page.$navbarEl.find('.tooltip-init').each(el => {\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n });\n }\n }\n },\n vnode: {\n 'tooltip-init': {\n insert(vnode) {\n const app = this;\n const el = vnode.elm;\n const text = $(el).attr('data-tooltip');\n if (!text) return;\n app.tooltip.create({\n targetEl: el,\n text\n });\n },\n update(vnode) {\n const el = vnode.elm;\n if (!el.f7Tooltip) return;\n if (vnode && vnode.data && vnode.data.attrs && vnode.data.attrs['data-tooltip']) {\n el.f7Tooltip.setText(vnode.data.attrs['data-tooltip']);\n }\n },\n destroy(vnode) {\n const el = vnode.elm;\n if (el.f7Tooltip) el.f7Tooltip.destroy();\n }\n }\n }\n};", "/* eslint no-nested-ternary: off */\nimport { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass Gauge extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n const defaults = extend({}, app.params.gauge);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const {\n el\n } = self.params;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7Gauge) return $el[0].f7Gauge;\n extend(self, {\n app,\n $el,\n el: $el && $el[0]\n });\n $el[0].f7Gauge = self;\n\n // Install Modules\n self.useModules();\n self.init();\n return self;\n }\n calcRadius() {\n const self = this;\n const {\n size,\n borderWidth\n } = self.params;\n return size / 2 - borderWidth / 2;\n }\n calcBorderLength() {\n const self = this;\n const radius = self.calcRadius();\n return 2 * Math.PI * radius;\n }\n render() {\n const self = this;\n if (self.params.render) return self.params.render.call(self, self);\n const {\n type,\n value,\n size,\n bgColor,\n borderBgColor,\n borderColor,\n borderWidth,\n valueText,\n valueTextColor,\n valueFontSize,\n valueFontWeight,\n labelText,\n labelTextColor,\n labelFontSize,\n labelFontWeight\n } = self.params;\n const semiCircle = type === 'semicircle';\n const radius = self.calcRadius();\n const length = self.calcBorderLength();\n const progress = Math.max(Math.min(value, 1), 0);\n return $jsx(\"svg\", {\n class: \"gauge-svg\",\n width: `${size}px`,\n height: `${semiCircle ? size / 2 : size}px`,\n viewBox: `0 0 ${size} ${semiCircle ? size / 2 : size}`\n }, semiCircle && $jsx(\"path\", {\n class: \"gauge-back-semi\",\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderBgColor,\n \"stroke-width\": borderWidth,\n fill: bgColor || 'none'\n }), semiCircle && $jsx(\"path\", {\n class: \"gauge-front-semi\",\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderColor,\n \"stroke-width\": borderWidth,\n \"stroke-dasharray\": length / 2,\n \"stroke-dashoffset\": length / 2 * (1 + progress),\n fill: borderBgColor ? 'none' : bgColor || 'none'\n }), !semiCircle && borderBgColor && $jsx(\"circle\", {\n class: \"gauge-back-circle\",\n stroke: borderBgColor,\n \"stroke-width\": borderWidth,\n fill: bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n }), !semiCircle && $jsx(\"circle\", {\n class: \"gauge-front-circle\",\n transform: `rotate(-90 ${size / 2} ${size / 2})`,\n stroke: borderColor,\n \"stroke-width\": borderWidth,\n \"stroke-dasharray\": length,\n \"stroke-dashoffset\": length * (1 - progress),\n fill: borderBgColor ? 'none' : bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n }), valueText && $jsx(\"text\", {\n class: \"gauge-value-text\",\n x: \"50%\",\n y: semiCircle ? '100%' : '50%',\n \"font-weight\": valueFontWeight,\n \"font-size\": valueFontSize,\n fill: valueTextColor,\n dy: semiCircle ? labelText ? -labelFontSize - 15 : -5 : 0,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": !semiCircle && 'middle'\n }, valueText), labelText && $jsx(\"text\", {\n class: \"gauge-label-text\",\n x: \"50%\",\n y: semiCircle ? '100%' : '50%',\n \"font-weight\": labelFontWeight,\n \"font-size\": labelFontSize,\n fill: labelTextColor,\n dy: semiCircle ? -5 : valueText ? valueFontSize / 2 + 10 : 0,\n \"text-anchor\": \"middle\",\n \"dominant-baseline\": !semiCircle && 'middle'\n }, labelText));\n }\n update(newParams) {\n if (newParams === void 0) {\n newParams = {};\n }\n const self = this;\n const document = getDocument();\n const {\n params,\n $svgEl\n } = self;\n Object.keys(newParams).forEach(param => {\n if (typeof newParams[param] !== 'undefined') {\n params[param] = newParams[param];\n }\n });\n if ($svgEl.length === 0) return self;\n const {\n value,\n size,\n bgColor,\n borderBgColor,\n borderColor,\n borderWidth,\n valueText,\n valueTextColor,\n valueFontSize,\n valueFontWeight,\n labelText,\n labelTextColor,\n labelFontSize,\n labelFontWeight\n } = params;\n const length = self.calcBorderLength();\n const progress = Math.max(Math.min(value, 1), 0);\n const radius = self.calcRadius();\n const semiCircle = params.type === 'semicircle';\n const svgAttrs = {\n width: `${size}px`,\n height: `${semiCircle ? size / 2 : size}px`,\n viewBox: `0 0 ${size} ${semiCircle ? size / 2 : size}`\n };\n Object.keys(svgAttrs).forEach(attr => {\n $svgEl.attr(attr, svgAttrs[attr]);\n });\n if (semiCircle) {\n const backAttrs = {\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderBgColor,\n 'stroke-width': borderWidth,\n fill: bgColor || 'none'\n };\n const frontAttrs = {\n d: `M${size - borderWidth / 2},${size / 2} a1,1 0 0,0 -${size - borderWidth},0`,\n stroke: borderColor,\n 'stroke-width': borderWidth,\n 'stroke-dasharray': length / 2,\n 'stroke-dashoffset': length / 2 * (1 + progress),\n fill: borderBgColor ? 'none' : bgColor || 'none'\n };\n Object.keys(backAttrs).forEach(attr => {\n $svgEl.find('.gauge-back-semi').attr(attr, backAttrs[attr]);\n });\n Object.keys(frontAttrs).forEach(attr => {\n $svgEl.find('.gauge-front-semi').attr(attr, frontAttrs[attr]);\n });\n } else {\n const backAttrs = {\n stroke: borderBgColor,\n 'stroke-width': borderWidth,\n fill: bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n };\n const frontAttrs = {\n transform: `rotate(-90 ${size / 2} ${size / 2})`,\n stroke: borderColor,\n 'stroke-width': borderWidth,\n 'stroke-dasharray': length,\n 'stroke-dashoffset': length * (1 - progress),\n fill: borderBgColor ? 'none' : bgColor || 'none',\n cx: size / 2,\n cy: size / 2,\n r: radius\n };\n Object.keys(backAttrs).forEach(attr => {\n $svgEl.find('.gauge-back-circle').attr(attr, backAttrs[attr]);\n });\n Object.keys(frontAttrs).forEach(attr => {\n $svgEl.find('.gauge-front-circle').attr(attr, frontAttrs[attr]);\n });\n }\n if (valueText) {\n if (!$svgEl.find('.gauge-value-text').length) {\n const textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n textEl.classList.add('gauge-value-text');\n $svgEl.append(textEl);\n }\n const textAttrs = {\n x: '50%',\n y: semiCircle ? '100%' : '50%',\n 'font-weight': valueFontWeight,\n 'font-size': valueFontSize,\n fill: valueTextColor,\n dy: semiCircle ? labelText ? -labelFontSize - 15 : -5 : 0,\n 'text-anchor': 'middle',\n 'dominant-baseline': !semiCircle && 'middle'\n };\n Object.keys(textAttrs).forEach(attr => {\n $svgEl.find('.gauge-value-text').attr(attr, textAttrs[attr]);\n });\n $svgEl.find('.gauge-value-text').text(valueText);\n } else {\n $svgEl.find('.gauge-value-text').remove();\n }\n if (labelText) {\n if (!$svgEl.find('.gauge-label-text').length) {\n const textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n textEl.classList.add('gauge-label-text');\n $svgEl.append(textEl);\n }\n const labelAttrs = {\n x: '50%',\n y: semiCircle ? '100%' : '50%',\n 'font-weight': labelFontWeight,\n 'font-size': labelFontSize,\n fill: labelTextColor,\n dy: semiCircle ? -5 : valueText ? valueFontSize / 2 + 10 : 0,\n 'text-anchor': 'middle',\n 'dominant-baseline': !semiCircle && 'middle'\n };\n Object.keys(labelAttrs).forEach(attr => {\n $svgEl.find('.gauge-label-text').attr(attr, labelAttrs[attr]);\n });\n $svgEl.find('.gauge-label-text').text(labelText);\n } else {\n $svgEl.find('.gauge-label-text').remove();\n }\n return self;\n }\n init() {\n const self = this;\n const $svgEl = $(self.render()).eq(0);\n $svgEl.f7Gauge = self;\n extend(self, {\n $svgEl,\n svgEl: $svgEl && $svgEl[0]\n });\n self.$el.append($svgEl);\n return self;\n }\n destroy() {\n const self = this;\n if (!self.$el || self.destroyed) return;\n self.$el.trigger('gauge:beforedestroy');\n self.emit('local::beforeDestroy gaugeBeforeDestroy', self);\n self.$svgEl.remove();\n delete self.$el[0].f7Gauge;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default Gauge;", "import $ from '../../shared/dom7.js';\nimport Gauge from './gauge-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport { extend } from '../../shared/utils.js';\nexport default {\n name: 'gauge',\n static: {\n Gauge\n },\n create() {\n const app = this;\n app.gauge = ConstructorMethods({\n defaultSelector: '.gauge',\n constructor: Gauge,\n app,\n domProp: 'f7Gauge'\n });\n app.gauge.update = function update(el, newParams) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const gauge = app.gauge.get(el);\n if (!gauge) return undefined;\n gauge.update(newParams);\n return gauge;\n };\n },\n params: {\n gauge: {\n el: null,\n type: 'circle',\n value: 0,\n size: 200,\n bgColor: 'transparent',\n borderBgColor: '#eeeeee',\n borderColor: '#000000',\n borderWidth: 10,\n valueText: null,\n valueTextColor: '#000000',\n valueFontSize: 31,\n valueFontWeight: 500,\n labelText: null,\n labelTextColor: '#888888',\n labelFontSize: 14,\n labelFontWeight: 400\n }\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.gauge-init').each(el => {\n app.gauge.create(extend({\n el\n }, $(el).dataset() || {}));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.gauge-init').each(el => {\n if (el.f7Gauge) el.f7Gauge.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.gauge-init').each(el => {\n app.gauge.create(extend({\n el\n }, $(el).dataset() || {}));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.gauge-init').each(el => {\n if (el.f7Gauge) el.f7Gauge.destroy();\n });\n }\n },\n vnode: {\n 'gauge-init': {\n insert(vnode) {\n const app = this;\n const el = vnode.elm;\n app.gauge.create(extend({\n el\n }, $(el).dataset() || {}));\n },\n destroy(vnode) {\n const el = vnode.elm;\n if (el.f7Gauge) el.f7Gauge.destroy();\n }\n }\n }\n};", "export default {\n name: 'skeleton'\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n alphaLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-alpha-slider\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, alphaLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-alpha\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.01\",\n min: \"0\",\n max: \"1\",\n class: \"color-picker-value-alpha\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-alpha\"\n }))));\n },\n init(self) {\n self.alphaRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-alpha'),\n min: 0,\n max: 1,\n step: 0.01,\n value: 1,\n on: {\n change(range, value) {\n const alpha = Math.floor(value * 100) / 100;\n self.setValue({\n alpha\n });\n }\n }\n });\n function handleInputChange(e) {\n const alpha = self.value.alpha;\n let value = parseFloat(e.target.value);\n if (Number.isNaN(value)) {\n e.target.value = alpha;\n return;\n }\n value = Math.max(0, Math.min(1, value));\n self.setValue({\n alpha: value\n });\n }\n self.$el.on('change', '.color-picker-module-alpha-slider input', handleInputChange);\n self.destroyAlphaSliderEvents = function destroyAlphaSliderEvents() {\n self.$el.off('change', '.color-picker-module-alpha-slider input', handleInputChange);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n alpha\n } = value;\n self.alphaRangeSlider.value = alpha;\n self.alphaRangeSlider.layout();\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-alpha').val(alpha);\n } else {\n self.$el.find('span.color-picker-value-alpha').text(alpha);\n }\n },\n destroy(self) {\n if (self.alphaRangeSlider && self.alphaRangeSlider.destroy) {\n self.alphaRangeSlider.destroy();\n }\n delete self.alphaRangeSlider;\n if (self.destroyAlphaSliderEvents) self.destroyAlphaSliderEvents();\n delete self.destroyAlphaSliderEvents;\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-current-color\"\n }, $jsx(\"div\", {\n class: \"color-picker-current-color\"\n }));\n },\n update(self) {\n self.$el.find('.color-picker-module-current-color .color-picker-current-color').css('background-color', self.value.hex);\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n hexLabel,\n hexLabelText,\n hexValueEditable\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hex\"\n }, $jsx(\"div\", {\n class: \"color-picker-hex-wrap\"\n }, hexLabel && $jsx(\"div\", {\n class: \"color-picker-hex-label\"\n }, hexLabelText), $jsx(\"div\", {\n class: \"color-picker-hex-value\"\n }, hexValueEditable ? $jsx(\"input\", {\n type: \"text\",\n class: \"color-picker-value-hex\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-hex\"\n }))));\n },\n init(self) {\n function handleInputChange(e) {\n const hex = self.value.hex;\n let value = e.target.value.replace(/#/g, '');\n if (Number.isNaN(value) || !value || value.length !== 3 && value.length !== 6) {\n e.target.value = hex;\n return;\n }\n const min = 0;\n const current = parseInt(value, 16);\n const max = parseInt('ffffff', 16); // eslint-disable-line\n if (current > max) {\n value = 'fff';\n }\n if (current < min) {\n value = '000';\n }\n self.setValue({\n hex: value\n });\n }\n self.$el.on('change', '.color-picker-module-hex input', handleInputChange);\n self.destroyHexEvents = function destroyHexEvents() {\n self.$el.off('change', '.color-picker-module-hex input', handleInputChange);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hexValueEditable\n } = self.params;\n const {\n hex\n } = value;\n if (hexValueEditable) {\n self.$el.find('input.color-picker-value-hex').val(hex);\n } else {\n self.$el.find('span.color-picker-value-hex').text(hex);\n }\n },\n destroy(self) {\n if (self.destroyHexEvents) self.destroyHexEvents();\n delete self.destroyHexEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { colorHsbToHsl } from '../../../shared/utils.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n hueLabelText,\n saturationLabelText,\n brightnessLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hsb-sliders\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, hueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-hue\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"360\",\n class: \"color-picker-value-hue\",\n \"data-color-index\": \"0\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-hue\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, saturationLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-saturation\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"100\",\n class: \"color-picker-value-saturation\",\n \"data-color-index\": \"1\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-saturation\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, brightnessLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-brightness\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"100\",\n class: \"color-picker-value-brightness\",\n \"data-color-index\": \"2\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-brightness\"\n }))));\n },\n init(self) {\n self.hueRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-hue'),\n min: 0,\n max: 360,\n step: 0.1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n hue: value\n });\n }\n }\n });\n self.saturationRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-saturation'),\n min: 0,\n max: 1,\n step: 0.001,\n value: 0,\n on: {\n change(range, value) {\n const s = Math.floor(value * 1000) / 1000;\n self.setValue({\n hsb: [self.value.hsb[0], s, self.value.hsb[2]]\n });\n }\n }\n });\n self.brightnessRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-brightness'),\n min: 0,\n max: 1,\n step: 0.001,\n value: 0,\n on: {\n change(range, value) {\n const b = Math.floor(value * 1000) / 1000;\n self.setValue({\n hsb: [self.value.hsb[0], self.value.hsb[1], b]\n });\n }\n }\n });\n function handleInputChange(e) {\n const hsb = [...self.value.hsb];\n const index = parseInt($(e.target).attr('data-color-index'), 10);\n let value = parseFloat(e.target.value);\n if (Number.isNaN(value)) {\n e.target.value = hsb[index];\n return;\n }\n if (index === 0) {\n value = Math.max(0, Math.min(360, value));\n } else {\n value = Math.max(0, Math.min(100, value)) / 100;\n }\n hsb[index] = value;\n self.setValue({\n hsb\n });\n }\n self.$el.on('change', '.color-picker-module-hsb-sliders input', handleInputChange);\n self.destroyHsbSlidersEvents = function destroyHsbSlidersEvents() {\n self.$el.off('change', '.color-picker-module-hsb-sliders input', handleInputChange);\n };\n },\n update(self) {\n const {\n app,\n value\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n hsb,\n hue\n } = value;\n self.hueRangeSlider.value = hue;\n self.saturationRangeSlider.value = hsb[1];\n self.brightnessRangeSlider.value = hsb[2];\n self.hueRangeSlider.layout();\n self.saturationRangeSlider.layout();\n self.brightnessRangeSlider.layout();\n const hslCurrent = colorHsbToHsl(hsb[0], hsb[1], 1);\n const hslLeft = colorHsbToHsl(hsb[0], 0, 1);\n const hslRight = colorHsbToHsl(hsb[0], 1, 1);\n const brightness = hsb[2];\n self.hueRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hue}, 100%, 50%)`);\n self.saturationRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hslCurrent[0]}, ${hslCurrent[1] * 100}%, ${hslCurrent[2] * 100}%)`);\n self.brightnessRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${brightness * 255}, ${brightness * 255}, ${brightness * 255})`);\n self.saturationRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${app.rtl ? 'to left' : 'to right'}, hsl(${hslLeft[0]}, ${hslLeft[1] * 100}%, ${hslLeft[2] * 100}%), hsl(${hslRight[0]}, ${hslRight[1] * 100}%, ${hslRight[2] * 100}%))`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-hue').val(`${hue}`);\n self.$el.find('input.color-picker-value-saturation').val(`${hsb[1] * 1000 / 10}`);\n self.$el.find('input.color-picker-value-brightness').val(`${hsb[2] * 1000 / 10}`);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-hue').text(`${hue}`);\n self.$el.find('span.color-picker-value-saturation').text(`${hsb[1] * 1000 / 10}`);\n self.$el.find('span.color-picker-value-brightness').text(`${hsb[2] * 1000 / 10}`);\n }\n },\n destroy(self) {\n if (self.hueRangeSlider && self.hueRangeSlider.destroy) {\n self.hueRangeSlider.destroy();\n }\n if (self.saturationRangeSlider && self.saturationRangeSlider.destroy) {\n self.saturationRangeSlider.destroy();\n }\n if (self.brightnessRangeSlider && self.brightnessRangeSlider.destroy) {\n self.brightnessRangeSlider.destroy();\n }\n delete self.hueRangeSlider;\n delete self.saturationRangeSlider;\n delete self.brightnessRangeSlider;\n if (self.destroyHsbSlidersEvents) self.destroyHsbSlidersEvents();\n delete self.destroyHsbSlidersEvents;\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n hueLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hue-slider\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, hueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-hue\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"360\",\n class: \"color-picker-value-hue\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-hue\"\n }))));\n },\n init(self) {\n self.hueRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-hue'),\n min: 0,\n max: 360,\n step: 0.1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n hue: value\n });\n }\n }\n });\n },\n update(self) {\n const {\n value\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n hue\n } = value;\n self.hueRangeSlider.value = hue;\n self.hueRangeSlider.layout();\n self.hueRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hue}, 100%, 50%)`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-hue').val(`${hue}`);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-hue').text(`${hue}`);\n }\n },\n destroy(self) {\n if (self.hueRangeSlider && self.hueRangeSlider.destroy) {\n self.hueRangeSlider.destroy();\n }\n delete self.hueRangeSlider;\n }\n};", "import { colorHsbToHsl } from '../../../shared/utils.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n brightnessLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-brightness-slider\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, brightnessLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-brightness\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"0.1\",\n min: \"0\",\n max: \"100\",\n class: \"color-picker-value-brightness\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-brightness\"\n }))));\n },\n init(self) {\n self.brightnessRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-brightness'),\n min: 0,\n max: 1,\n step: 0.001,\n value: 0,\n on: {\n change(range, value) {\n const b = Math.floor(value * 1000) / 1000;\n self.setValue({\n hsb: [self.value.hsb[0], self.value.hsb[1], b]\n });\n }\n }\n });\n },\n update(self) {\n const {\n value,\n app\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n hsb\n } = value;\n self.brightnessRangeSlider.value = hsb[2];\n self.brightnessRangeSlider.layout();\n const hslCurrent = colorHsbToHsl(hsb[0], hsb[1], hsb[2]);\n const hslLeft = colorHsbToHsl(hsb[0], hsb[1], 0);\n const hslRight = colorHsbToHsl(hsb[0], hsb[1], 1);\n self.brightnessRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `hsl(${hslCurrent[0]}, ${hslCurrent[1] * 100}%, ${hslCurrent[2] * 100}%)`);\n self.brightnessRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${app.rtl ? 'to left' : 'to right'}, hsl(${hslLeft[0]}, ${hslLeft[1] * 100}%, ${hslLeft[2] * 100}%), hsl(${hslRight[0]}, ${hslRight[1] * 100}%, ${hslRight[2] * 100}%))`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-brightness').val(`${hsb[2] * 1000 / 10}`);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-brightness').text(`${hsb[2] * 1000 / 10}`);\n }\n },\n destroy(self) {\n if (self.brightnessRangeSlider && self.brightnessRangeSlider.destroy) {\n self.brightnessRangeSlider.destroy();\n }\n delete self.brightnessRangeSlider;\n }\n};", "/* eslint indent: [\"off\"] */\nimport $ from '../../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-palette\"\n }, $jsx(\"div\", {\n class: \"color-picker-palette\"\n }, self.params.palette.map(p => {\n if (Array.isArray(p)) {\n let row = '';\n // prettier-ignore\n row += p.map(c => `\n
\n `).join('');\n row += '
';\n return row;\n }\n return $jsx(\"div\", {\n class: \"color-picker-palette-value\",\n \"data-palette-color\": p,\n style: `background-color: ${p}`\n });\n })));\n },\n init(self) {\n function handlePaletteClick(e) {\n const hex = $(e.target).attr('data-palette-color');\n self.setValue({\n hex\n });\n }\n self.$el.on('click', '.color-picker-module-palette .color-picker-palette-value', handlePaletteClick);\n self.destroyPaletteEvents = function destroyPaletteEvents() {\n self.$el.off('click', '.color-picker-module-hex input', handlePaletteClick);\n };\n },\n destroy(self) {\n if (self.destroyPaletteEvents) {\n self.destroyPaletteEvents();\n }\n delete self.destroyPaletteEvents;\n }\n};", "/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-initial-current-colors\"\n }, $jsx(\"div\", {\n class: \"color-picker-initial-current-colors\"\n }, $jsx(\"div\", {\n class: \"color-picker-initial-color\"\n }), $jsx(\"div\", {\n class: \"color-picker-current-color\"\n })));\n },\n init(self) {\n function handleInitialColorClick() {\n if (self.initialValue) {\n const {\n hex,\n alpha\n } = self.initialValue;\n self.setValue({\n hex,\n alpha\n });\n }\n }\n self.$el.on('click', '.color-picker-initial-color', handleInitialColorClick);\n self.destroyInitialCurrentEvents = function destroyInitialCurrentEvents() {\n self.$el.off('click', '.color-picker-initial-color', handleInitialColorClick);\n };\n },\n update(self) {\n self.$el.find('.color-picker-module-initial-current-colors .color-picker-initial-color').css('background-color', self.initialValue.hex);\n self.$el.find('.color-picker-module-initial-current-colors .color-picker-current-color').css('background-color', self.value.hex);\n },\n destroy(self) {\n if (self.destroyInitialCurrentEvents) {\n self.destroyInitialCurrentEvents();\n }\n delete self.destroyInitialCurrentEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n barLabel,\n barValue,\n barValueEditable,\n redLabelText,\n greenLabelText,\n blueLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-rgb-bars\"\n }, $jsx(\"div\", {\n class: \"color-picker-bar-wrap\"\n }, barLabel && $jsx(\"div\", {\n class: \"color-picker-bar-label\"\n }, redLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-bar color-picker-bar-red\"\n }), barValue && $jsx(\"div\", {\n class: \"color-picker-bar-value\"\n }, barValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-bar-red\",\n \"data-color-index\": \"0\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-bar-red\"\n }))), $jsx(\"div\", {\n class: \"color-picker-bar-wrap\"\n }, barLabel && $jsx(\"div\", {\n class: \"color-picker-bar-label\"\n }, greenLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-bar color-picker-bar-green\"\n }), barValue && $jsx(\"div\", {\n class: \"color-picker-bar-value\"\n }, barValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-bar-green\",\n \"data-color-index\": \"1\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-bar-green\"\n }))), $jsx(\"div\", {\n class: \"color-picker-bar-wrap\"\n }, barLabel && $jsx(\"div\", {\n class: \"color-picker-bar-label\"\n }, blueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-bar color-picker-bar-blue\"\n }), barValue && $jsx(\"div\", {\n class: \"color-picker-bar-value\"\n }, barValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-bar-blue\",\n \"data-color-index\": \"2\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-bar-blue\"\n }))));\n },\n init(self) {\n self.redBar = self.app.range.create({\n el: self.$el.find('.color-picker-bar-red'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n vertical: true,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [value, self.value.rgb[1], self.value.rgb[2]]\n });\n }\n }\n });\n self.greenBar = self.app.range.create({\n el: self.$el.find('.color-picker-bar-green'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n vertical: true,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], value, self.value.rgb[2]]\n });\n }\n }\n });\n self.blueBar = self.app.range.create({\n el: self.$el.find('.color-picker-bar-blue'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n vertical: true,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], self.value.rgb[1], value]\n });\n }\n }\n });\n function handleInputChange(e) {\n const rgb = [...self.value.rgb];\n const index = parseInt($(e.target).attr('data-color-index'), 10);\n let value = parseInt(e.target.value, 10);\n if (Number.isNaN(value)) {\n e.target.value = rgb[index];\n return;\n }\n value = Math.max(0, Math.min(255, value));\n rgb[index] = value;\n self.setValue({\n rgb\n });\n }\n self.$el.on('change', '.color-picker-module-rgb-bars input', handleInputChange);\n self.destroyRgbBarsEvents = function destroyRgbBarsEvents() {\n self.$el.off('change', '.color-picker-module-rgb-bars input', handleInputChange);\n };\n },\n update(self) {\n const {\n value,\n redBar,\n greenBar,\n blueBar\n } = self;\n const {\n barValue,\n barValueEditable\n } = self.params;\n const {\n rgb\n } = value;\n redBar.value = rgb[0];\n greenBar.value = rgb[1];\n blueBar.value = rgb[2];\n redBar.layout();\n greenBar.layout();\n blueBar.layout();\n redBar.$el.find('.range-bar').css('background-image', `linear-gradient(to top, rgb(0, ${rgb[1]}, ${rgb[2]}), rgb(255, ${rgb[1]}, ${rgb[2]}))`);\n greenBar.$el.find('.range-bar').css('background-image', `linear-gradient(to top, rgb(${rgb[0]}, 0, ${rgb[2]}), rgb(${rgb[0]}, 255, ${rgb[2]}))`);\n blueBar.$el.find('.range-bar').css('background-image', `linear-gradient(to top, rgb(${rgb[0]}, ${rgb[1]}, 0), rgb(${rgb[0]}, ${rgb[1]}, 255))`);\n if (barValue && barValueEditable) {\n self.$el.find('input.color-picker-value-bar-red').val(rgb[0]);\n self.$el.find('input.color-picker-value-bar-green').val(rgb[1]);\n self.$el.find('input.color-picker-value-bar-blue').val(rgb[2]);\n } else if (barValue) {\n self.$el.find('span.color-picker-value-bar-red').text(rgb[0]);\n self.$el.find('span.color-picker-value-bar-green').text(rgb[1]);\n self.$el.find('span.color-picker-value-bar-blue').text(rgb[2]);\n }\n },\n destroy(self) {\n if (self.redBar && self.redBar.destroy) {\n self.redBar.destroy();\n }\n if (self.greenBar && self.greenBar.destroy) {\n self.greenBar.destroy();\n }\n if (self.blueBar && self.blueBar.destroy) {\n self.blueBar.destroy();\n }\n delete self.redBar;\n delete self.greenBar;\n delete self.blueBar;\n if (self.destroyRgbBarsEvents) self.destroyRgbBarsEvents();\n delete self.destroyRgbBarsEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render(self) {\n const {\n sliderLabel,\n sliderValue,\n sliderValueEditable,\n redLabelText,\n greenLabelText,\n blueLabelText\n } = self.params;\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-rgb-sliders\"\n }, $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, redLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-red\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-red\",\n \"data-color-index\": \"0\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-red\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, greenLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-green\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-green\",\n \"data-color-index\": \"1\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-green\"\n }))), $jsx(\"div\", {\n class: \"color-picker-slider-wrap\"\n }, sliderLabel && $jsx(\"div\", {\n class: \"color-picker-slider-label\"\n }, blueLabelText), $jsx(\"div\", {\n class: \"range-slider color-picker-slider color-picker-slider-blue\"\n }), sliderValue && $jsx(\"div\", {\n class: \"color-picker-slider-value\"\n }, sliderValueEditable ? $jsx(\"input\", {\n type: \"number\",\n step: \"1\",\n min: \"0\",\n max: \"255\",\n class: \"color-picker-value-blue\",\n \"data-color-index\": \"2\"\n }) : $jsx(\"span\", {\n class: \"color-picker-value-blue\"\n }))));\n },\n init(self) {\n self.redRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-red'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [value, self.value.rgb[1], self.value.rgb[2]]\n });\n }\n }\n });\n self.greenRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-green'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], value, self.value.rgb[2]]\n });\n }\n }\n });\n self.blueRangeSlider = self.app.range.create({\n el: self.$el.find('.color-picker-slider-blue'),\n min: 0,\n max: 255,\n step: 1,\n value: 0,\n on: {\n change(range, value) {\n self.setValue({\n rgb: [self.value.rgb[0], self.value.rgb[1], value]\n });\n }\n }\n });\n function handleInputChange(e) {\n const rgb = [...self.value.rgb];\n const index = parseInt($(e.target).attr('data-color-index'), 10);\n let value = parseInt(e.target.value, 10);\n if (Number.isNaN(value)) {\n e.target.value = rgb[index];\n return;\n }\n value = Math.max(0, Math.min(255, value));\n rgb[index] = value;\n self.setValue({\n rgb\n });\n }\n self.$el.on('change', '.color-picker-module-rgb-sliders input', handleInputChange);\n self.destroyRgbSlidersEvents = function destroyRgbSlidersEvents() {\n self.$el.off('change', '.color-picker-module-rgb-sliders input', handleInputChange);\n };\n },\n update(self) {\n const {\n app,\n value,\n redRangeSlider,\n greenRangeSlider,\n blueRangeSlider\n } = self;\n const {\n sliderValue,\n sliderValueEditable\n } = self.params;\n const {\n rgb\n } = value;\n redRangeSlider.value = rgb[0];\n greenRangeSlider.value = rgb[1];\n blueRangeSlider.value = rgb[2];\n redRangeSlider.layout();\n greenRangeSlider.layout();\n blueRangeSlider.layout();\n redRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);\n greenRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);\n blueRangeSlider.$el[0].style.setProperty('--f7-range-knob-color', `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);\n const direction = app.rtl ? 'to left' : 'to right';\n redRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${direction}, rgb(0, ${rgb[1]}, ${rgb[2]}), rgb(255, ${rgb[1]}, ${rgb[2]}))`);\n greenRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${direction}, rgb(${rgb[0]}, 0, ${rgb[2]}), rgb(${rgb[0]}, 255, ${rgb[2]}))`);\n blueRangeSlider.$el.find('.range-bar').css('background-image', `linear-gradient(${direction}, rgb(${rgb[0]}, ${rgb[1]}, 0), rgb(${rgb[0]}, ${rgb[1]}, 255))`);\n if (sliderValue && sliderValueEditable) {\n self.$el.find('input.color-picker-value-red').val(rgb[0]);\n self.$el.find('input.color-picker-value-green').val(rgb[1]);\n self.$el.find('input.color-picker-value-blue').val(rgb[2]);\n } else if (sliderValue) {\n self.$el.find('span.color-picker-value-red').text(rgb[0]);\n self.$el.find('span.color-picker-value-green').text(rgb[1]);\n self.$el.find('span.color-picker-value-blue').text(rgb[2]);\n }\n },\n destroy(self) {\n if (self.redRangeSlider && self.redRangeSlider.destroy) {\n self.redRangeSlider.destroy();\n }\n if (self.greenRangeSlider && self.greenRangeSlider.destroy) {\n self.greenRangeSlider.destroy();\n }\n if (self.blueRangeSlider && self.blueRangeSlider.destroy) {\n self.blueRangeSlider.destroy();\n }\n delete self.redRangeSlider;\n delete self.greenRangeSlider;\n delete self.blueRangeSlider;\n if (self.destroyRgbSlidersEvents) self.destroyRgbSlidersEvents();\n delete self.destroyRgbSlidersEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { getSupport } from '../../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-sb-spectrum\"\n }, $jsx(\"div\", {\n class: \"color-picker-sb-spectrum\",\n style: \"background-color: hsl(0, 100%, 50%)\"\n }, $jsx(\"div\", {\n class: \"color-picker-sb-spectrum-handle\"\n })));\n },\n init(self) {\n const {\n app\n } = self;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let specterRect;\n let specterIsTouched;\n let specterHandleIsTouched;\n const {\n $el\n } = self;\n function setSBFromSpecterCoords(x, y) {\n let s = (x - specterRect.left) / specterRect.width;\n let b = (y - specterRect.top) / specterRect.height;\n s = Math.max(0, Math.min(1, s));\n b = 1 - Math.max(0, Math.min(1, b));\n self.setValue({\n hsb: [self.value.hue, s, b]\n });\n }\n function handleTouchStart(e) {\n if (isMoved || isTouched) return;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n const $targetEl = $(e.target);\n specterHandleIsTouched = $targetEl.closest('.color-picker-sb-spectrum-handle').length > 0;\n if (!specterHandleIsTouched) {\n specterIsTouched = $targetEl.closest('.color-picker-sb-spectrum').length > 0;\n }\n if (specterIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n setSBFromSpecterCoords(touchStartX, touchStartY);\n }\n if (specterHandleIsTouched || specterIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').addClass('color-picker-sb-spectrum-handle-pressed');\n }\n }\n function handleTouchMove(e) {\n if (!(specterIsTouched || specterHandleIsTouched)) return;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n if (!isMoved) {\n // First move\n isMoved = true;\n if (specterHandleIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n }\n }\n if (specterIsTouched || specterHandleIsTouched) {\n setSBFromSpecterCoords(touchCurrentX, touchCurrentY);\n }\n }\n function handleTouchEnd() {\n isMoved = false;\n if (specterIsTouched || specterHandleIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').removeClass('color-picker-sb-spectrum-handle-pressed');\n }\n specterIsTouched = false;\n specterHandleIsTouched = false;\n }\n function handleResize() {\n self.modules['sb-spectrum'].update(self);\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n self.destroySpectrumEvents = function destroySpectrumEvents() {\n self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hsl,\n hsb\n } = value;\n const specterWidth = self.$el.find('.color-picker-sb-spectrum')[0].offsetWidth;\n const specterHeight = self.$el.find('.color-picker-sb-spectrum')[0].offsetHeight;\n self.$el.find('.color-picker-sb-spectrum').css('background-color', `hsl(${hsl[0]}, 100%, 50%)`);\n self.$el.find('.color-picker-sb-spectrum-handle').css('background-color', `hsl(${hsl[0]}, ${hsl[1] * 100}%, ${hsl[2] * 100}%)`).transform(`translate(${specterWidth * hsb[1]}px, ${specterHeight * (1 - hsb[2])}px)`);\n },\n destroy(self) {\n if (self.destroySpectrumEvents) self.destroySpectrumEvents();\n delete self.destroySpectrumEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { colorHsbToHsl } from '../../../shared/utils.js';\nimport { getSupport } from '../../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-hs-spectrum\"\n }, $jsx(\"div\", {\n class: \"color-picker-hs-spectrum\"\n }, $jsx(\"div\", {\n class: \"color-picker-hs-spectrum-handle\"\n })));\n },\n init(self) {\n const {\n app\n } = self;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let specterRect;\n let specterIsTouched;\n let specterHandleIsTouched;\n const {\n $el\n } = self;\n function setHSFromSpecterCoords(x, y) {\n let h = (x - specterRect.left) / specterRect.width * 360;\n let s = (y - specterRect.top) / specterRect.height;\n h = Math.max(0, Math.min(360, h));\n s = 1 - Math.max(0, Math.min(1, s));\n self.setValue({\n hsb: [h, s, self.value.hsb[2]]\n });\n }\n function handleTouchStart(e) {\n if (isMoved || isTouched) return;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n const $targetEl = $(e.target);\n specterHandleIsTouched = $targetEl.closest('.color-picker-hs-spectrum-handle').length > 0;\n if (!specterHandleIsTouched) {\n specterIsTouched = $targetEl.closest('.color-picker-hs-spectrum').length > 0;\n }\n if (specterIsTouched) {\n specterRect = $el.find('.color-picker-hs-spectrum')[0].getBoundingClientRect();\n setHSFromSpecterCoords(touchStartX, touchStartY);\n }\n if (specterHandleIsTouched || specterIsTouched) {\n $el.find('.color-picker-hs-spectrum-handle').addClass('color-picker-hs-spectrum-handle-pressed');\n }\n }\n function handleTouchMove(e) {\n if (!(specterIsTouched || specterHandleIsTouched)) return;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n if (!isMoved) {\n // First move\n isMoved = true;\n if (specterHandleIsTouched) {\n specterRect = $el.find('.color-picker-hs-spectrum')[0].getBoundingClientRect();\n }\n }\n if (specterIsTouched || specterHandleIsTouched) {\n setHSFromSpecterCoords(touchCurrentX, touchCurrentY);\n }\n }\n function handleTouchEnd() {\n isMoved = false;\n if (specterIsTouched || specterHandleIsTouched) {\n $el.find('.color-picker-hs-spectrum-handle').removeClass('color-picker-hs-spectrum-handle-pressed');\n }\n specterIsTouched = false;\n specterHandleIsTouched = false;\n }\n function handleResize() {\n self.modules['hs-spectrum'].update(self);\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n self.destroySpectrumEvents = function destroySpectrumEvents() {\n self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hsb\n } = value;\n const specterWidth = self.$el.find('.color-picker-hs-spectrum')[0].offsetWidth;\n const specterHeight = self.$el.find('.color-picker-hs-spectrum')[0].offsetHeight;\n const hslBright = colorHsbToHsl(hsb[0], hsb[1], 1);\n self.$el.find('.color-picker-hs-spectrum-handle').css('background-color', `hsl(${hslBright[0]}, ${hslBright[1] * 100}%, ${hslBright[2] * 100}%)`).transform(`translate(${specterWidth * (hsb[0] / 360)}px, ${specterHeight * (1 - hsb[1])}px)`);\n },\n destroy(self) {\n if (self.destroySpectrumEvents) self.destroySpectrumEvents();\n delete self.destroySpectrumEvents;\n }\n};", "import $ from '../../../shared/dom7.js';\nimport { getSupport } from '../../../shared/get-support.js';\n/** @jsx $jsx */\nimport $jsx from '../../../shared/$jsx.js';\nfunction svgWheelCircles() {\n const total = 256;\n let circles = '';\n for (let i = total; i > 0; i -= 1) {\n const angle = i * Math.PI / (total / 2);\n const hue = 360 / total * i;\n circles += ``;\n }\n return circles;\n}\nexport default {\n render() {\n return $jsx(\"div\", {\n class: \"color-picker-module color-picker-module-wheel\"\n }, $jsx(\"div\", {\n class: \"color-picker-wheel\"\n }, $jsx(\"svg\", {\n viewBox: \"0 0 300 300\",\n width: \"300\",\n height: \"300\"\n }, svgWheelCircles()), $jsx(\"div\", {\n class: \"color-picker-wheel-handle\"\n }), $jsx(\"div\", {\n class: \"color-picker-sb-spectrum\",\n style: \"background-color: hsl(0, 100%, 50%)\"\n }, $jsx(\"div\", {\n class: \"color-picker-sb-spectrum-handle\"\n }))));\n },\n init(self) {\n const {\n app\n } = self;\n let isTouched;\n let isMoved;\n let touchStartX;\n let touchStartY;\n let touchCurrentX;\n let touchCurrentY;\n let wheelRect;\n let wheelIsTouched;\n let wheelHandleIsTouched;\n let specterRect;\n let specterIsTouched;\n let specterHandleIsTouched;\n const {\n $el\n } = self;\n function setHueFromWheelCoords(x, y) {\n const wheelCenterX = wheelRect.left + wheelRect.width / 2;\n const wheelCenterY = wheelRect.top + wheelRect.height / 2;\n const angleRad = Math.atan2(y - wheelCenterY, x - wheelCenterX);\n let angleDeg = angleRad * 180 / Math.PI + 90;\n if (angleDeg < 0) angleDeg += 360;\n angleDeg = 360 - angleDeg;\n self.setValue({\n hue: angleDeg\n });\n }\n function setSBFromSpecterCoords(x, y) {\n let s = (x - specterRect.left) / specterRect.width;\n let b = (y - specterRect.top) / specterRect.height;\n s = Math.max(0, Math.min(1, s));\n b = 1 - Math.max(0, Math.min(1, b));\n self.setValue({\n hsb: [self.value.hue, s, b]\n });\n }\n function handleTouchStart(e) {\n if (isMoved || isTouched) return;\n touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentX = touchStartX;\n touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n touchCurrentY = touchStartY;\n const $targetEl = $(e.target);\n wheelHandleIsTouched = $targetEl.closest('.color-picker-wheel-handle').length > 0;\n wheelIsTouched = $targetEl.closest('circle').length > 0;\n specterHandleIsTouched = $targetEl.closest('.color-picker-sb-spectrum-handle').length > 0;\n if (!specterHandleIsTouched) {\n specterIsTouched = $targetEl.closest('.color-picker-sb-spectrum').length > 0;\n }\n if (wheelIsTouched) {\n wheelRect = $el.find('.color-picker-wheel')[0].getBoundingClientRect();\n setHueFromWheelCoords(touchStartX, touchStartY);\n }\n if (specterIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n setSBFromSpecterCoords(touchStartX, touchStartY);\n }\n if (specterHandleIsTouched || specterIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').addClass('color-picker-sb-spectrum-handle-pressed');\n }\n }\n function handleTouchMove(e) {\n if (!(wheelIsTouched || wheelHandleIsTouched) && !(specterIsTouched || specterHandleIsTouched)) return;\n touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n e.preventDefault();\n if (!isMoved) {\n // First move\n isMoved = true;\n if (wheelHandleIsTouched) {\n wheelRect = $el.find('.color-picker-wheel')[0].getBoundingClientRect();\n }\n if (specterHandleIsTouched) {\n specterRect = $el.find('.color-picker-sb-spectrum')[0].getBoundingClientRect();\n }\n }\n if (wheelIsTouched || wheelHandleIsTouched) {\n setHueFromWheelCoords(touchCurrentX, touchCurrentY);\n }\n if (specterIsTouched || specterHandleIsTouched) {\n setSBFromSpecterCoords(touchCurrentX, touchCurrentY);\n }\n }\n function handleTouchEnd() {\n isMoved = false;\n if (specterIsTouched || specterHandleIsTouched) {\n $el.find('.color-picker-sb-spectrum-handle').removeClass('color-picker-sb-spectrum-handle-pressed');\n }\n wheelIsTouched = false;\n wheelHandleIsTouched = false;\n specterIsTouched = false;\n specterHandleIsTouched = false;\n }\n function handleResize() {\n self.modules.wheel.update(self);\n }\n const passiveListener = app.touchEvents.start === 'touchstart' && getSupport().passiveListener ? {\n passive: true,\n capture: false\n } : false;\n self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);\n app.on('touchmove:active', handleTouchMove);\n app.on('touchend:passive', handleTouchEnd);\n app.on('resize', handleResize);\n self.destroyWheelEvents = function destroyWheelEvents() {\n self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);\n app.off('touchmove:active', handleTouchMove);\n app.off('touchend:passive', handleTouchEnd);\n app.off('resize', handleResize);\n };\n },\n update(self) {\n const {\n value\n } = self;\n const {\n hsl,\n hsb\n } = value;\n const specterWidth = self.$el.find('.color-picker-sb-spectrum')[0].offsetWidth;\n const specterHeight = self.$el.find('.color-picker-sb-spectrum')[0].offsetHeight;\n const wheelSize = self.$el.find('.color-picker-wheel')[0].offsetWidth;\n const wheelHalfSize = wheelSize / 2;\n const angleRad = value.hue * Math.PI / 180;\n const handleSize = wheelSize / 6;\n const handleHalfSize = handleSize / 2;\n const tX = wheelHalfSize - Math.sin(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;\n const tY = wheelHalfSize - Math.cos(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;\n self.$el.find('.color-picker-wheel-handle').css('background-color', `hsl(${hsl[0]}, 100%, 50%)`).transform(`translate(${tX}px, ${tY}px)`);\n self.$el.find('.color-picker-sb-spectrum').css('background-color', `hsl(${hsl[0]}, 100%, 50%)`);\n self.$el.find('.color-picker-sb-spectrum-handle').css('background-color', `hsl(${hsl[0]}, ${hsl[1] * 100}%, ${hsl[2] * 100}%)`).transform(`translate(${specterWidth * hsb[1]}px, ${specterHeight * (1 - hsb[2])}px)`);\n },\n destroy(self) {\n if (self.destroyWheelEvents) self.destroyWheelEvents();\n delete self.destroyWheelEvents;\n }\n};", "import { extend, colorRgbToHex, colorRgbToHsl, colorHslToHsb, colorHslToRgb, colorHsbToHsl, colorHexToRgb, nextTick, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport $ from '../../shared/dom7.js';\nimport { getDevice } from '../../shared/get-device.js';\nimport moduleAlphaSlider from './modules/alpha-slider.js';\nimport moduleCurrentColor from './modules/current-color.js';\nimport moduleHex from './modules/hex.js';\nimport moduleHsbSliders from './modules/hsb-sliders.js';\nimport moduleHueSlider from './modules/hue-slider.js';\nimport moduleBrightnessSlider from './modules/brightness-slider.js';\nimport modulePalette from './modules/palette.js';\nimport moduleInitialCurrentColors from './modules/initial-current-colors.js';\nimport moduleRgbBars from './modules/rgb-bars.js';\nimport moduleRgbSliders from './modules/rgb-sliders.js';\nimport moduleSbSpectrum from './modules/sb-spectrum.js';\nimport moduleHsSpectrum from './modules/hs-spectrum.js';\nimport moduleWheel from './modules/wheel.js';\n\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass ColorPicker extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n self.params = extend({}, app.params.colorPicker, params);\n let $containerEl;\n if (self.params.containerEl) {\n $containerEl = $(self.params.containerEl);\n if ($containerEl.length === 0) return self;\n }\n let $inputEl;\n if (self.params.inputEl) {\n $inputEl = $(self.params.inputEl);\n }\n let $targetEl;\n if (self.params.targetEl) {\n $targetEl = $(self.params.targetEl);\n }\n extend(self, {\n app,\n $containerEl,\n containerEl: $containerEl && $containerEl[0],\n inline: $containerEl && $containerEl.length > 0,\n $inputEl,\n inputEl: $inputEl && $inputEl[0],\n $targetEl,\n targetEl: $targetEl && $targetEl[0],\n initialized: false,\n opened: false,\n url: self.params.url,\n modules: {\n 'alpha-slider': moduleAlphaSlider,\n 'current-color': moduleCurrentColor,\n hex: moduleHex,\n // eslint-disable-line\n 'hsb-sliders': moduleHsbSliders,\n 'hue-slider': moduleHueSlider,\n 'brightness-slider': moduleBrightnessSlider,\n palette: modulePalette,\n // eslint-disable-line\n 'initial-current-colors': moduleInitialCurrentColors,\n 'rgb-bars': moduleRgbBars,\n 'rgb-sliders': moduleRgbSliders,\n 'sb-spectrum': moduleSbSpectrum,\n 'hs-spectrum': moduleHsSpectrum,\n wheel: moduleWheel // eslint-disable-line\n }\n });\n\n function onInputClick() {\n self.open();\n }\n function onInputFocus(e) {\n e.preventDefault();\n }\n function onTargetClick() {\n self.open();\n }\n function onHtmlClick(e) {\n if (self.destroyed || !self.params) return;\n if (self.params.openIn === 'page') return;\n const $clickTargetEl = $(e.target);\n if (!self.opened || self.closing) return;\n if ($clickTargetEl.closest('[class*=\"backdrop\"]').length) return;\n if ($clickTargetEl.closest('.color-picker-popup, .color-picker-popover').length) return;\n if ($inputEl && $inputEl.length > 0) {\n if ($clickTargetEl[0] !== $inputEl[0] && $clickTargetEl.closest('.sheet-modal').length === 0) {\n self.close();\n }\n } else if ($(e.target).closest('.sheet-modal').length === 0) {\n self.close();\n }\n }\n\n // Events\n extend(self, {\n attachInputEvents() {\n self.$inputEl.on('click', onInputClick);\n if (self.params.inputReadOnly) {\n self.$inputEl.on('focus mousedown', onInputFocus);\n if (self.$inputEl[0]) {\n self.$inputEl[0].f7ValidateReadonly = true;\n }\n }\n },\n detachInputEvents() {\n self.$inputEl.off('click', onInputClick);\n if (self.params.inputReadOnly) {\n self.$inputEl.off('focus mousedown', onInputFocus);\n if (self.$inputEl[0]) {\n delete self.$inputEl[0].f7ValidateReadonly;\n }\n }\n },\n attachTargetEvents() {\n self.$targetEl.on('click', onTargetClick);\n },\n detachTargetEvents() {\n self.$targetEl.off('click', onTargetClick);\n },\n attachHtmlEvents() {\n app.on('click', onHtmlClick);\n },\n detachHtmlEvents() {\n app.off('click', onHtmlClick);\n }\n });\n self.init();\n return self;\n }\n get view() {\n const {\n $inputEl,\n $targetEl,\n app,\n params\n } = this;\n let view;\n if (params.view) {\n view = params.view;\n } else {\n if ($inputEl) {\n view = $inputEl.parents('.view').length && $inputEl.parents('.view')[0].f7View;\n }\n if (!view && $targetEl) {\n view = $targetEl.parents('.view').length && $targetEl.parents('.view')[0].f7View;\n }\n }\n if (!view) view = app.views.main;\n return view;\n }\n attachEvents() {\n const self = this;\n self.centerModules = self.centerModules.bind(self);\n if (self.params.centerModules) {\n self.app.on('resize', self.centerModules);\n }\n }\n detachEvents() {\n const self = this;\n if (self.params.centerModules) {\n self.app.off('resize', self.centerModules);\n }\n }\n centerModules() {\n const self = this;\n if (!self.opened || !self.$el || self.inline) return;\n const $pageContentEl = self.$el.find('.page-content');\n if (!$pageContentEl.length) return;\n const {\n scrollHeight,\n offsetHeight\n } = $pageContentEl[0];\n if (scrollHeight <= offsetHeight) {\n $pageContentEl.addClass('justify-content-center');\n } else {\n $pageContentEl.removeClass('justify-content-center');\n }\n }\n initInput() {\n const self = this;\n if (!self.$inputEl) return;\n if (self.params.inputReadOnly) self.$inputEl.prop('readOnly', true);\n }\n getModalType() {\n const self = this;\n const {\n app,\n modal,\n params\n } = self;\n const {\n openIn,\n openInPhone\n } = params;\n const device = getDevice();\n if (modal && modal.type) return modal.type;\n if (openIn !== 'auto') return openIn;\n if (self.inline) return null;\n if (device.ios) {\n return device.ipad ? 'popover' : openInPhone;\n }\n if (app.width >= 768) {\n return 'popover';\n }\n return openInPhone;\n }\n formatValue() {\n const self = this;\n const {\n value\n } = self;\n if (self.params.formatValue) {\n return self.params.formatValue.call(self, value);\n }\n return value.hex;\n }\n\n // eslint-disable-next-line\n normalizeHsValues(arr) {\n return [Math.floor(arr[0] * 10) / 10, Math.floor(arr[1] * 1000) / 1000, Math.floor(arr[2] * 1000) / 1000];\n }\n setValue(value, updateModules) {\n if (value === void 0) {\n value = {};\n }\n if (updateModules === void 0) {\n updateModules = true;\n }\n const self = this;\n if (typeof value === 'undefined') return;\n let {\n hex,\n rgb,\n hsl,\n hsb,\n alpha = 1,\n hue,\n rgba,\n hsla\n } = self.value || {};\n const needChangeEvent = self.value || !self.value && !self.params.value;\n let valueChanged;\n Object.keys(value).forEach(k => {\n if (!self.value || typeof self.value[k] === 'undefined') {\n valueChanged = true;\n return;\n }\n const v = value[k];\n if (Array.isArray(v)) {\n v.forEach((subV, subIndex) => {\n if (subV !== self.value[k][subIndex]) {\n valueChanged = true;\n }\n });\n } else if (v !== self.value[k]) {\n valueChanged = true;\n }\n });\n if (!valueChanged) return;\n if (value.rgb || value.rgba) {\n const [r, g, b, a = alpha] = value.rgb || value.rgba;\n rgb = [r, g, b];\n hex = colorRgbToHex(...rgb);\n hsl = colorRgbToHsl(...rgb);\n hsb = colorHslToHsb(...hsl);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n alpha = a;\n rgba = [rgb[0], rgb[1], rgb[2], a];\n hsla = [hsl[0], hsl[1], hsl[2], a];\n }\n if (value.hsl || value.hsla) {\n const [h, s, l, a = alpha] = value.hsl || value.hsla;\n hsl = [h, s, l];\n rgb = colorHslToRgb(...hsl);\n hex = colorRgbToHex(...rgb);\n hsb = colorHslToHsb(...hsl);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n alpha = a;\n rgba = [rgb[0], rgb[1], rgb[2], a];\n hsla = [hsl[0], hsl[1], hsl[2], a];\n }\n if (value.hsb) {\n const [h, s, b, a = alpha] = value.hsb;\n hsb = [h, s, b];\n hsl = colorHsbToHsl(...hsb);\n rgb = colorHslToRgb(...hsl);\n hex = colorRgbToHex(...rgb);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n alpha = a;\n rgba = [rgb[0], rgb[1], rgb[2], a];\n hsla = [hsl[0], hsl[1], hsl[2], a];\n }\n if (value.hex) {\n rgb = colorHexToRgb(value.hex);\n hex = colorRgbToHex(...rgb);\n hsl = colorRgbToHsl(...rgb);\n hsb = colorHslToHsb(...hsl);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n rgba = [rgb[0], rgb[1], rgb[2], alpha];\n hsla = [hsl[0], hsl[1], hsl[2], alpha];\n }\n if (typeof value.alpha !== 'undefined') {\n alpha = value.alpha;\n if (typeof rgb !== 'undefined') {\n rgba = [rgb[0], rgb[1], rgb[2], alpha];\n }\n if (typeof hsl !== 'undefined') {\n hsla = [hsl[0], hsl[1], hsl[2], alpha];\n }\n }\n if (typeof value.hue !== 'undefined') {\n const [h, s, l] = hsl; // eslint-disable-line\n hsl = [value.hue, s, l];\n hsb = colorHslToHsb(...hsl);\n rgb = colorHslToRgb(...hsl);\n hex = colorRgbToHex(...rgb);\n hsl = self.normalizeHsValues(hsl);\n hsb = self.normalizeHsValues(hsb);\n hue = hsb[0];\n rgba = [rgb[0], rgb[1], rgb[2], alpha];\n hsla = [hsl[0], hsl[1], hsl[2], alpha];\n }\n self.value = {\n hex,\n alpha,\n hue,\n rgb,\n hsl,\n hsb,\n rgba,\n hsla\n };\n if (!self.initialValue) self.initialValue = extend({}, self.value);\n self.updateValue(needChangeEvent);\n if (self.opened && updateModules) {\n self.updateModules();\n }\n }\n getValue() {\n const self = this;\n return self.value;\n }\n updateValue(fireEvents) {\n if (fireEvents === void 0) {\n fireEvents = true;\n }\n const self = this;\n const {\n $inputEl,\n value,\n $targetEl\n } = self;\n if ($targetEl && self.params.targetElSetBackgroundColor) {\n const {\n rgba\n } = value;\n $targetEl.css('background-color', `rgba(${rgba.join(', ')})`);\n }\n if (fireEvents) {\n self.emit('local::change colorPickerChange', self, value);\n }\n if ($inputEl && $inputEl.length) {\n const inputValue = self.formatValue(value);\n if ($inputEl && $inputEl.length) {\n $inputEl.val(inputValue);\n if (fireEvents) {\n $inputEl.trigger('change');\n }\n }\n }\n }\n updateModules() {\n const self = this;\n const {\n modules\n } = self;\n self.params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].update) {\n modules[m].update(self);\n } else if (m && m.update) {\n m.update(self);\n }\n });\n }\n update() {\n const self = this;\n self.updateModules();\n }\n renderPicker() {\n const self = this;\n const {\n params,\n modules\n } = self;\n let html = '';\n params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].render) {\n html += modules[m].render(self);\n } else if (m && m.render) {\n html += m.render(self);\n }\n });\n return html;\n }\n renderNavbar() {\n const self = this;\n if (self.params.renderNavbar) {\n return self.params.renderNavbar.call(self, self);\n }\n const {\n openIn,\n navbarTitleText,\n navbarBackLinkText,\n navbarCloseText\n } = self.params;\n return $jsx(\"div\", {\n class: \"navbar\"\n }, $jsx(\"div\", {\n class: \"navbar-bg\"\n }), $jsx(\"div\", {\n class: \"navbar-inner sliding\"\n }, openIn === 'page' && $jsx(\"div\", {\n class: \"left\"\n }, $jsx(\"a\", {\n class: \"link back\"\n }, $jsx(\"i\", {\n class: \"icon icon-back\"\n }), $jsx(\"span\", {\n class: \"if-not-md\"\n }, navbarBackLinkText))), $jsx(\"div\", {\n class: \"title\"\n }, navbarTitleText), openIn !== 'page' && $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link popup-close\",\n \"data-popup\": \".color-picker-popup\"\n }, navbarCloseText))));\n }\n renderToolbar() {\n const self = this;\n if (self.params.renderToolbar) {\n return self.params.renderToolbar.call(self, self);\n }\n return $jsx(\"div\", {\n class: \"toolbar toolbar-top\"\n }, $jsx(\"div\", {\n class: \"toolbar-inner\"\n }, $jsx(\"div\", {\n class: \"left\"\n }), $jsx(\"div\", {\n class: \"right\"\n }, $jsx(\"a\", {\n class: \"link sheet-close popover-close\",\n \"data-sheet\": \".color-picker-sheet-modal\",\n \"data-popover\": \".color-picker-popover\"\n }, self.params.toolbarCloseText))));\n }\n renderInline() {\n const self = this;\n const {\n cssClass,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `color-picker color-picker-inline ${groupedModules ? 'color-picker-grouped-modules' : ''} ${cssClass || ''}`\n }, self.renderPicker());\n }\n renderSheet() {\n const self = this;\n const {\n cssClass,\n toolbarSheet,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `sheet-modal color-picker color-picker-sheet-modal ${groupedModules ? 'color-picker-grouped-modules' : ''} ${cssClass || ''}`\n }, toolbarSheet && self.renderToolbar(), $jsx(\"div\", {\n class: \"sheet-modal-inner\"\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker())));\n }\n renderPopover() {\n const self = this;\n const {\n cssClass,\n toolbarPopover,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `popover color-picker-popover ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"popover-inner\"\n }, $jsx(\"div\", {\n class: `color-picker ${groupedModules ? 'color-picker-grouped-modules' : ''}`\n }, toolbarPopover && self.renderToolbar(), $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker()))));\n }\n renderPopup() {\n const self = this;\n const {\n cssClass,\n navbarPopup,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `popup color-picker-popup ${cssClass || ''}`\n }, $jsx(\"div\", {\n class: \"page\"\n }, navbarPopup && self.renderNavbar(), $jsx(\"div\", {\n class: `color-picker ${groupedModules ? 'color-picker-grouped-modules' : ''}`\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker()))));\n }\n renderPage() {\n const self = this;\n const {\n cssClass,\n groupedModules\n } = self.params;\n return $jsx(\"div\", {\n class: `page color-picker-page ${cssClass || ''}`,\n \"data-name\": \"color-picker-page\"\n }, self.renderNavbar(), $jsx(\"div\", {\n class: `color-picker ${groupedModules ? 'color-picker-grouped-modules' : ''}`\n }, $jsx(\"div\", {\n class: \"page-content\"\n }, self.renderPicker())));\n }\n\n // eslint-disable-next-line\n render() {\n const self = this;\n const {\n params\n } = self;\n if (params.render) return params.render.call(self);\n if (self.inline) return self.renderInline();\n if (params.openIn === 'page') {\n return self.renderPage();\n }\n const modalType = self.getModalType();\n if (modalType === 'popover') return self.renderPopover();\n if (modalType === 'sheet') return self.renderSheet();\n if (modalType === 'popup') return self.renderPopup();\n }\n onOpen() {\n const self = this;\n const {\n initialized,\n $el,\n app,\n $inputEl,\n inline,\n value,\n params,\n modules\n } = self;\n self.closing = false;\n self.opened = true;\n self.opening = true;\n\n // Init main events\n self.attachEvents();\n params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].init) {\n modules[m].init(self);\n } else if (m && m.init) {\n m.init(self);\n }\n });\n const updateValue = !value && params.value;\n\n // Set value\n if (!initialized) {\n if (value) self.setValue(value);else if (params.value) {\n self.setValue(params.value, false);\n } else if (!params.value) {\n self.setValue({\n hex: '#ff0000'\n }, false);\n }\n } else if (value) {\n self.initialValue = extend({}, value);\n self.setValue(value, false);\n }\n\n // Update input value\n if (updateValue) self.updateValue();\n self.updateModules();\n\n // Center modules\n if (params.centerModules) {\n self.centerModules();\n }\n\n // Extra focus\n if (!inline && $inputEl && $inputEl.length && app.theme === 'md') {\n $inputEl.trigger('focus');\n }\n self.initialized = true;\n\n // Trigger events\n if ($el) {\n $el.trigger('colorpicker:open');\n }\n if ($inputEl) {\n $inputEl.trigger('colorpicker:open');\n }\n self.emit('local::open colorPickerOpen', self);\n }\n onOpened() {\n const self = this;\n self.opening = false;\n if (self.$el) {\n self.$el.trigger('colorpicker:opened');\n }\n if (self.$inputEl) {\n self.$inputEl.trigger('colorpicker:opened');\n }\n self.emit('local::opened colorPickerOpened', self);\n }\n onClose() {\n const self = this;\n const {\n app,\n params,\n modules\n } = self;\n self.opening = false;\n self.closing = true;\n\n // Detach events\n self.detachEvents();\n if (self.$inputEl) {\n if (app.theme === 'md') {\n self.$inputEl.trigger('blur');\n } else {\n const validate = self.$inputEl.attr('validate');\n const required = self.$inputEl.attr('required');\n if (validate && required) {\n app.input.validate(self.$inputEl);\n }\n }\n }\n params.modules.forEach(m => {\n if (typeof m === 'string' && modules[m] && modules[m].destroy) {\n modules[m].destroy(self);\n } else if (m && m.destroy) {\n m.destroy(self);\n }\n });\n if (self.$el) {\n self.$el.trigger('colorpicker:close');\n }\n if (self.$inputEl) {\n self.$inputEl.trigger('colorpicker:close');\n }\n self.emit('local::close colorPickerClose', self);\n }\n onClosed() {\n const self = this;\n self.opened = false;\n self.closing = false;\n if (!self.inline) {\n nextTick(() => {\n if (self.modal && self.modal.el && self.modal.destroy) {\n if (!self.params.routableModals) {\n self.modal.destroy();\n }\n }\n delete self.modal;\n });\n }\n if (self.$el) {\n self.$el.trigger('colorpicker:closed');\n }\n if (self.$inputEl) {\n self.$inputEl.trigger('colorpicker:closed');\n }\n self.emit('local::closed colorPickerClosed', self);\n }\n open() {\n const self = this;\n const {\n app,\n opened,\n inline,\n $inputEl,\n $targetEl,\n params\n } = self;\n if (opened) return;\n if (inline) {\n self.$el = $(self.render());\n self.$el[0].f7ColorPicker = self;\n self.$containerEl.append(self.$el);\n self.onOpen();\n self.onOpened();\n return;\n }\n const colorPickerContent = self.render();\n if (params.openIn === 'page') {\n self.view.router.navigate({\n url: self.url,\n route: {\n content: colorPickerContent,\n path: self.url,\n on: {\n pageBeforeIn(e, page) {\n self.$el = page.$el.find('.color-picker');\n self.$el[0].f7ColorPicker = self;\n self.onOpen();\n },\n pageAfterIn() {\n self.onOpened();\n },\n pageBeforeOut() {\n self.onClose();\n },\n pageAfterOut() {\n self.onClosed();\n if (self.$el && self.$el[0]) {\n self.$el[0].f7ColorPicker = null;\n delete self.$el[0].f7ColorPicker;\n }\n }\n }\n }\n });\n } else {\n const modalType = self.getModalType();\n let backdrop = params.backdrop;\n if (backdrop === null || typeof backdrop === 'undefined') {\n if (modalType === 'popover' && app.params.popover.backdrop !== false) backdrop = true;\n if (modalType === 'popup') backdrop = true;\n }\n const modalParams = {\n targetEl: $targetEl || $inputEl,\n scrollToEl: params.scrollToInput ? $targetEl || $inputEl : undefined,\n content: colorPickerContent,\n backdrop,\n closeByBackdropClick: params.closeByBackdropClick,\n on: {\n open() {\n const modal = this;\n self.modal = modal;\n self.$el = modalType === 'popover' || modalType === 'popup' ? modal.$el.find('.color-picker') : modal.$el;\n self.$el[0].f7ColorPicker = self;\n self.onOpen();\n },\n opened() {\n self.onOpened();\n },\n close() {\n self.onClose();\n },\n closed() {\n self.onClosed();\n if (self.$el && self.$el[0]) {\n self.$el[0].f7ColorPicker = null;\n delete self.$el[0].f7ColorPicker;\n }\n }\n }\n };\n if (modalType === 'popup') {\n modalParams.push = params.popupPush;\n modalParams.swipeToClose = params.popupSwipeToClose;\n }\n if (modalType === 'sheet') {\n modalParams.push = params.sheetPush;\n modalParams.swipeToClose = params.sheetSwipeToClose;\n }\n if (params.routableModals && self.view) {\n self.view.router.navigate({\n url: self.url,\n route: {\n path: self.url,\n [modalType]: modalParams\n }\n });\n } else {\n self.modal = app[modalType].create(modalParams);\n self.modal.open();\n }\n }\n }\n close() {\n const self = this;\n const {\n opened,\n inline\n } = self;\n if (!opened) return;\n if (inline) {\n self.onClose();\n self.onClosed();\n return;\n }\n if (self.params.routableModals && self.view || self.params.openIn === 'page') {\n self.view.router.back();\n } else {\n self.modal.close();\n }\n }\n init() {\n const self = this;\n self.initInput();\n if (self.inline) {\n self.open();\n self.emit('local::init colorPickerInit', self);\n return;\n }\n if (!self.initialized && self.params.value) {\n self.setValue(self.params.value);\n }\n\n // Attach input Events\n if (self.$inputEl) {\n self.attachInputEvents();\n }\n if (self.$targetEl) {\n self.attachTargetEvents();\n }\n if (self.params.closeByOutsideClick) {\n self.attachHtmlEvents();\n }\n self.emit('local::init colorPickerInit', self);\n }\n destroy() {\n const self = this;\n if (self.destroyed) return;\n const {\n $el\n } = self;\n self.emit('local::beforeDestroy colorPickerBeforeDestroy', self);\n if ($el) $el.trigger('colorpicker:beforedestroy');\n self.close();\n\n // Detach Events\n self.detachEvents();\n if (self.$inputEl) {\n self.detachInputEvents();\n }\n if (self.$targetEl) {\n self.detachTargetEvents();\n }\n if (self.params.closeByOutsideClick) {\n self.detachHtmlEvents();\n }\n if ($el && $el.length) delete self.$el[0].f7ColorPicker;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default ColorPicker;", "import $ from '../../shared/dom7.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nimport ColorPicker from './color-picker-class.js';\nexport default {\n name: 'colorPicker',\n static: {\n ColorPicker\n },\n create() {\n const app = this;\n app.colorPicker = ConstructorMethods({\n defaultSelector: '.color-picker',\n constructor: ColorPicker,\n app,\n domProp: 'f7ColorPicker'\n });\n app.colorPicker.close = function close(el) {\n if (el === void 0) {\n el = '.color-picker';\n }\n const $el = $(el);\n if ($el.length === 0) return;\n const colorPicker = $el[0].f7ColorPicker;\n if (!colorPicker || colorPicker && !colorPicker.opened) return;\n colorPicker.close();\n };\n },\n params: {\n colorPicker: {\n // Color picker settings\n value: null,\n modules: ['wheel'],\n palette: [['#FFEBEE', '#FFCDD2', '#EF9A9A', '#E57373', '#EF5350', '#F44336', '#E53935', '#D32F2F', '#C62828', '#B71C1C'], ['#F3E5F5', '#E1BEE7', '#CE93D8', '#BA68C8', '#AB47BC', '#9C27B0', '#8E24AA', '#7B1FA2', '#6A1B9A', '#4A148C'], ['#E8EAF6', '#C5CAE9', '#9FA8DA', '#7986CB', '#5C6BC0', '#3F51B5', '#3949AB', '#303F9F', '#283593', '#1A237E'], ['#E1F5FE', '#B3E5FC', '#81D4FA', '#4FC3F7', '#29B6F6', '#03A9F4', '#039BE5', '#0288D1', '#0277BD', '#01579B'], ['#E0F2F1', '#B2DFDB', '#80CBC4', '#4DB6AC', '#26A69A', '#009688', '#00897B', '#00796B', '#00695C', '#004D40'], ['#F1F8E9', '#DCEDC8', '#C5E1A5', '#AED581', '#9CCC65', '#8BC34A', '#7CB342', '#689F38', '#558B2F', '#33691E'], ['#FFFDE7', '#FFF9C4', '#FFF59D', '#FFF176', '#FFEE58', '#FFEB3B', '#FDD835', '#FBC02D', '#F9A825', '#F57F17'], ['#FFF3E0', '#FFE0B2', '#FFCC80', '#FFB74D', '#FFA726', '#FF9800', '#FB8C00', '#F57C00', '#EF6C00', '#E65100']],\n groupedModules: false,\n centerModules: true,\n sliderLabel: false,\n sliderValue: false,\n sliderValueEdiable: false,\n barLabel: false,\n barValue: false,\n barValueEdiable: false,\n hexLabel: false,\n hexValueEditable: false,\n redLabelText: 'R',\n greenLabelText: 'G',\n blueLabelText: 'B',\n hueLabelText: 'H',\n saturationLabelText: 'S',\n brightnessLabelText: 'B',\n hexLabelText: 'HEX',\n alphaLabelText: 'A',\n // Common opener settings\n containerEl: null,\n openIn: 'popover',\n // or 'popover' or 'sheet' or 'popup' or 'page' or 'auto'\n openInPhone: 'popup',\n // or 'popover' or 'sheet' or 'popup' or 'page'\n popupPush: false,\n popupSwipeToClose: undefined,\n sheetPush: false,\n sheetSwipeToClose: undefined,\n formatValue: null,\n targetEl: null,\n targetElSetBackgroundColor: false,\n inputEl: null,\n inputReadOnly: true,\n closeByOutsideClick: true,\n scrollToInput: true,\n toolbarSheet: true,\n toolbarPopover: false,\n toolbarCloseText: 'Done',\n navbarPopup: true,\n navbarCloseText: 'Done',\n navbarTitleText: 'Color',\n navbarBackLinkText: 'Back',\n cssClass: null,\n routableModals: false,\n view: null,\n url: 'color/',\n backdrop: null,\n closeByBackdropClick: true,\n // Render functions\n renderToolbar: null,\n renderNavbar: null,\n renderInline: null,\n renderPopover: null,\n renderSheet: null,\n renderPopup: null,\n render: null\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { bindMethods, iosPreloaderContent, mdPreloaderContent } from '../../shared/utils.js';\nconst Treeview = {\n open(itemEl) {\n const app = this;\n const $itemEl = $(itemEl).eq(0);\n if (!$itemEl.length) return;\n $itemEl.addClass('treeview-item-opened');\n $itemEl.trigger('treeview:open');\n app.emit('treeviewOpen', $itemEl[0]);\n function done(cancel) {\n if (cancel) {\n $itemEl.removeClass('treeview-item-opened');\n $itemEl.trigger('treeview:close');\n app.emit('treeviewClose', $itemEl[0]);\n } else {\n $itemEl[0].f7TreeviewChildrenLoaded = true;\n }\n $itemEl.find('.treeview-toggle').removeClass('treeview-toggle-hidden');\n $itemEl.find('.treeview-preloader').remove();\n }\n if ($itemEl.hasClass('treeview-load-children') && !$itemEl[0].f7TreeviewChildrenLoaded) {\n const preloaders = {\n iosPreloaderContent,\n mdPreloaderContent\n };\n $itemEl.trigger('treeview:loadchildren', done);\n app.emit('treeviewLoadChildren', $itemEl[0], done);\n $itemEl.find('.treeview-toggle').addClass('treeview-toggle-hidden');\n $itemEl.find('.treeview-item-root').prepend(`${preloaders[`${app.theme}PreloaderContent`]}
`);\n }\n },\n close(itemEl) {\n const app = this;\n const $itemEl = $(itemEl).eq(0);\n if (!$itemEl.length) return;\n $itemEl.removeClass('treeview-item-opened');\n $itemEl.trigger('treeview:close');\n app.emit('treeviewClose', $itemEl[0]);\n },\n toggle(itemEl) {\n const app = this;\n const $itemEl = $(itemEl).eq(0);\n if (!$itemEl.length) return;\n const wasOpened = $itemEl.hasClass('treeview-item-opened');\n app.treeview[wasOpened ? 'close' : 'open']($itemEl);\n }\n};\nexport default {\n name: 'treeview',\n create() {\n const app = this;\n bindMethods(app, {\n treeview: Treeview\n });\n },\n clicks: {\n '.treeview-toggle': function toggle($clickedEl, clickedData, e) {\n const app = this;\n if ($clickedEl.parents('.treeview-item-toggle').length) return;\n const $treeviewItemEl = $clickedEl.parents('.treeview-item').eq(0);\n if (!$treeviewItemEl.length) return;\n e.preventF7Router = true;\n app.treeview.toggle($treeviewItemEl[0]);\n },\n '.treeview-item-toggle': function toggle($clickedEl, clickedData, e) {\n const app = this;\n const $treeviewItemEl = $clickedEl.closest('.treeview-item').eq(0);\n if (!$treeviewItemEl.length) return;\n e.preventF7Router = true;\n app.treeview.toggle($treeviewItemEl[0]);\n }\n }\n};", "import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\nimport { getDevice } from '../../shared/get-device.js';\nconst textEditorButtonsMap = {\n // f7-icon, material-icon, command\n bold: ['bold', 'format_bold', 'bold'],\n italic: ['italic', 'format_italic', 'italic'],\n underline: ['underline', 'format_underlined', 'underline'],\n strikeThrough: ['strikethrough', 'strikethrough_s', 'strikeThrough'],\n orderedList: ['list_number', 'format_list_numbered', 'insertOrderedList'],\n unorderedList: ['list_bullet', 'format_list_bulleted', 'insertUnorderedList'],\n link: ['link', 'link', 'createLink'],\n image: ['photo', 'image', 'insertImage'],\n paragraph: ['paragraph', '\u00B6', 'formatBlock.P'],\n h1: ['H1', 'H1', 'formatBlock.H1'],\n h2: ['H2', 'H2', 'formatBlock.H2'],\n h3: ['H3', 'H3', 'formatBlock.H3'],\n alignLeft: ['text_alignleft', 'format_align_left', 'justifyLeft'],\n alignCenter: ['text_aligncenter', 'format_align_center', 'justifyCenter'],\n alignRight: ['text_alignright', 'format_align_right', 'justifyRight'],\n alignJustify: ['text_justify', 'format_align_justify', 'justifyFull'],\n subscript: ['textformat_subscript', 'A1', 'subscript'],\n superscript: ['textformat_superscript', 'A1', 'superscript'],\n indent: ['increase_indent', 'format_indent_increase', 'indent'],\n outdent: ['decrease_indent', 'format_indent_decrease', 'outdent']\n};\nclass TextEditor extends Framework7Class {\n constructor(app, params) {\n super(params, [app]);\n const self = this;\n const document = getDocument();\n const device = getDevice();\n const defaults = extend({}, app.params.textEditor);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const el = self.params.el;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7TextEditor) return $el[0].f7TextEditor;\n let $contentEl = $el.children('.text-editor-content');\n if (!$contentEl.length) {\n $el.append('');\n $contentEl = $el.children('.text-editor-content');\n }\n extend(self, {\n app,\n $el,\n el: $el[0],\n $contentEl,\n contentEl: $contentEl[0]\n });\n if ('value' in params) {\n self.value = self.params.value;\n }\n if (self.params.mode === 'keyboard-toolbar') {\n if (!(device.cordova || device.capacitor) && !device.android) {\n self.params.mode = 'popover';\n }\n }\n if (typeof self.params.buttons === 'string') {\n try {\n self.params.buttons = JSON.parse(self.params.buttons);\n } catch (err) {\n throw new Error('Framework7: TextEditor: wrong \"buttons\" parameter format');\n }\n }\n $el[0].f7TextEditor = self;\n\n // Bind\n self.onButtonClick = self.onButtonClick.bind(self);\n self.onFocus = self.onFocus.bind(self);\n self.onBlur = self.onBlur.bind(self);\n self.onInput = self.onInput.bind(self);\n self.onPaste = self.onPaste.bind(self);\n self.onSelectionChange = self.onSelectionChange.bind(self);\n self.closeKeyboardToolbar = self.closeKeyboardToolbar.bind(self);\n\n // Handle Events\n self.attachEvents = function attachEvents() {\n if (self.params.mode === 'toolbar') {\n self.$el.find('.text-editor-toolbar').on('click', 'button', self.onButtonClick);\n }\n if (self.params.mode === 'keyboard-toolbar') {\n self.$keyboardToolbarEl.on('click', 'button', self.onButtonClick);\n self.$el.parents('.page').on('page:beforeout', self.closeKeyboardToolbar);\n }\n if (self.params.mode === 'popover' && self.popover) {\n self.popover.$el.on('click', 'button', self.onButtonClick);\n }\n self.$contentEl.on('paste', self.onPaste);\n self.$contentEl.on('focus', self.onFocus);\n self.$contentEl.on('blur', self.onBlur);\n self.$contentEl.on('input', self.onInput, true);\n $(document).on('selectionchange', self.onSelectionChange);\n };\n self.detachEvents = function detachEvents() {\n if (self.params.mode === 'toolbar') {\n self.$el.find('.text-editor-toolbar').off('click', 'button', self.onButtonClick);\n }\n if (self.params.mode === 'keyboard-toolbar') {\n self.$keyboardToolbarEl.off('click', 'button', self.onButtonClick);\n self.$el.parents('.page').off('page:beforeout', self.closeKeyboardToolbar);\n }\n if (self.params.mode === 'popover' && self.popover) {\n self.popover.$el.off('click', 'button', self.onButtonClick);\n }\n self.$contentEl.off('paste', self.onPaste);\n self.$contentEl.off('focus', self.onFocus);\n self.$contentEl.off('blur', self.onBlur);\n self.$contentEl.off('input', self.onInput, true);\n $(document).off('selectionchange', self.onSelectionChange);\n };\n\n // Install Modules\n self.useModules();\n\n // Init\n self.init();\n return self;\n }\n setValue(newValue) {\n const self = this;\n const currentValue = self.value;\n if (currentValue === newValue) return self;\n self.value = newValue;\n self.$contentEl.html(newValue);\n self.$el.trigger('texteditor:change', self.value);\n self.emit('local::change textEditorChange', self, self.value);\n return self;\n }\n getValue() {\n const self = this;\n return self.value;\n }\n clearValue() {\n const self = this;\n self.setValue('');\n if (self.params.placeholder && !self.$contentEl.html()) {\n self.insertPlaceholder();\n }\n return self;\n }\n createLink() {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n const currentSelection = window.getSelection();\n const selectedNodes = [];\n let $selectedLinks;\n if (currentSelection && currentSelection.anchorNode && $(currentSelection.anchorNode).parents(self.$el).length) {\n let anchorNode = currentSelection.anchorNode;\n while (anchorNode) {\n selectedNodes.push(anchorNode);\n if (!anchorNode.nextSibling || anchorNode === currentSelection.focusNode) {\n anchorNode = null;\n }\n if (anchorNode) {\n anchorNode = anchorNode.nextSibling;\n }\n }\n const selectedNodesLinks = [];\n const $selectedNodes = $(selectedNodes);\n for (let i = 0; i < $selectedNodes.length; i += 1) {\n const childNodes = $selectedNodes[i].children;\n if (childNodes) {\n for (let j = 0; j < childNodes.length; j += 1) {\n if ($(childNodes[j]).is('a')) {\n selectedNodesLinks.push(childNodes[j]);\n }\n }\n }\n }\n $selectedLinks = $selectedNodes.closest('a').add($(selectedNodesLinks));\n }\n if ($selectedLinks && $selectedLinks.length) {\n $selectedLinks.each(linkNode => {\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(linkNode);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('unlink', false);\n selection.removeAllRanges();\n });\n return self;\n }\n const currentRange = self.getSelectionRange();\n if (!currentRange) return self;\n const dialog = self.app.dialog.prompt('', self.params.linkUrlText, link => {\n if (link && link.trim().length) {\n self.setSelectionRange(currentRange);\n document.execCommand('createLink', false, link.trim());\n self.$el.trigger('texteditor:insertlink', {\n url: link.trim()\n });\n self.emit('local:insertLink textEditorInsertLink', self, link.trim());\n }\n });\n dialog.$el.find('input').focus();\n return self;\n }\n insertImage() {\n const self = this;\n const document = getDocument();\n const currentRange = self.getSelectionRange();\n if (!currentRange) return self;\n const dialog = self.app.dialog.prompt('', self.params.imageUrlText, imageUrl => {\n if (imageUrl && imageUrl.trim().length) {\n self.setSelectionRange(currentRange);\n document.execCommand('insertImage', false, imageUrl.trim());\n self.$el.trigger('texteditor:insertimage', {\n url: imageUrl.trim()\n });\n self.emit('local:insertImage textEditorInsertImage', self, imageUrl.trim());\n }\n });\n dialog.$el.find('input').focus();\n return self;\n }\n removePlaceholder() {\n const self = this;\n self.$contentEl.find('.text-editor-placeholder').remove();\n }\n insertPlaceholder() {\n const self = this;\n self.$contentEl.append(`${self.params.placeholder}
`);\n }\n onSelectionChange() {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n if (self.params.mode === 'toolbar') return;\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n if (self.params.mode === 'keyboard-toolbar') {\n if (!selectionIsInContent) {\n self.closeKeyboardToolbar();\n } else {\n self.openKeyboardToolbar();\n }\n return;\n }\n if (self.params.mode === 'popover') {\n const selectionIsInPopover = $(selection.anchorNode).parents(self.popover.el).length || selection.anchorNode === self.popover.el;\n if (!selectionIsInContent && !selectionIsInPopover) {\n self.closePopover();\n return;\n }\n if (!selection.isCollapsed && selection.rangeCount) {\n const range = selection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n const rootEl = self.app.$el[0] || document.body;\n self.openPopover(rect.x + (window.scrollX || 0) - rootEl.offsetLeft, rect.y + (window.scrollY || 0) - rootEl.offsetTop, rect.width, rect.height);\n } else if (selection.isCollapsed) {\n self.closePopover();\n }\n }\n }\n onPaste(e) {\n const self = this;\n const document = getDocument();\n if (self.params.clearFormattingOnPaste && e.clipboardData && e.clipboardData.getData) {\n const text = e.clipboardData.getData('text/plain');\n e.preventDefault();\n document.execCommand('insertText', false, text);\n }\n }\n onInput() {\n const self = this;\n const value = self.$contentEl.html();\n self.value = value;\n self.$el.trigger('texteditor:input');\n self.emit('local:input textEditorInput', self, self.value);\n self.$el.trigger('texteditor:change', self.value);\n self.emit('local::change textEditorChange', self, self.value);\n }\n onFocus() {\n const self = this;\n self.removePlaceholder();\n self.$contentEl.focus();\n self.$el.trigger('texteditor:focus');\n self.emit('local::focus textEditorFocus', self);\n }\n onBlur() {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n if (self.params.placeholder && self.$contentEl.html() === '') {\n self.insertPlaceholder();\n }\n if (self.params.mode === 'popover') {\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n const inPopover = document.activeElement && self.popover && $(document.activeElement).closest(self.popover.$el).length;\n if (!inPopover && !selectionIsInContent) {\n self.closePopover();\n }\n }\n if (self.params.mode === 'keyboard-toolbar') {\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n if (!selectionIsInContent) {\n self.closeKeyboardToolbar();\n }\n }\n self.$el.trigger('texteditor:blur');\n self.emit('local::blur textEditorBlur', self);\n }\n onButtonClick(e) {\n const self = this;\n const window = getWindow();\n const document = getDocument();\n const selection = window.getSelection();\n const selectionIsInContent = $(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;\n if (!selectionIsInContent) return;\n const $buttonEl = $(e.target).closest('button');\n if ($buttonEl.parents('form').length) {\n e.preventDefault();\n }\n const button = $buttonEl.attr('data-button');\n const buttonData = self.params.customButtons && self.params.customButtons[button];\n if (!button || !(textEditorButtonsMap[button] || buttonData)) return;\n $buttonEl.trigger('texteditor:buttonclick', button);\n self.emit('local::buttonClick textEditorButtonClick', self, button);\n if (buttonData) {\n if (buttonData.onClick) buttonData.onClick(self, $buttonEl[0]);\n return;\n }\n const command = textEditorButtonsMap[button][2];\n if (command === 'createLink') {\n self.createLink();\n return;\n }\n if (command === 'insertImage') {\n self.insertImage();\n return;\n }\n if (command.indexOf('formatBlock') === 0) {\n const tagName = command.split('.')[1];\n const $anchorNode = $(selection.anchorNode);\n if ($anchorNode.parents(tagName.toLowerCase()).length || $anchorNode.is(tagName)) {\n document.execCommand('formatBlock', false, 'div');\n } else {\n document.execCommand('formatBlock', false, tagName);\n }\n return;\n }\n document.execCommand(command, false);\n }\n\n // eslint-disable-next-line\n getSelectionRange() {\n const window = getWindow();\n const document = getDocument();\n if (window.getSelection) {\n const sel = window.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n return sel.getRangeAt(0);\n }\n } else if (document.selection && document.selection.createRange) {\n return document.selection.createRange();\n }\n return null;\n }\n\n // eslint-disable-next-line\n setSelectionRange(range) {\n const window = getWindow();\n const document = getDocument();\n if (range) {\n if (window.getSelection) {\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (document.selection && range.select) {\n range.select();\n }\n }\n }\n renderButtons() {\n const self = this;\n let html = '';\n function renderButton(button) {\n const iconClass = self.app.theme === 'md' ? 'material-icons' : 'f7-icons';\n if (self.params.customButtons && self.params.customButtons[button]) {\n const buttonData = self.params.customButtons[button];\n return ``;\n }\n if (!textEditorButtonsMap[button]) return '';\n const iconContent = textEditorButtonsMap[button][self.app.theme === 'md' ? 1 : 0];\n return ``.trim();\n }\n self.params.buttons.forEach((button, buttonIndex) => {\n if (Array.isArray(button)) {\n button.forEach(b => {\n html += renderButton(b);\n });\n if (buttonIndex < self.params.buttons.length - 1 && self.params.dividers) {\n html += '';\n }\n } else {\n html += renderButton(button);\n }\n });\n return html;\n }\n createToolbar() {\n const self = this;\n self.$el.prepend(`${self.renderButtons()}
`);\n }\n createKeyboardToolbar() {\n const self = this;\n self.$keyboardToolbarEl = $(``);\n }\n createPopover() {\n const self = this;\n self.popover = self.app.popover.create({\n content: `\n \n
${self.renderButtons()}
\n
\n `,\n closeByOutsideClick: false,\n backdrop: false\n });\n }\n openKeyboardToolbar() {\n const self = this;\n if (self.$keyboardToolbarEl.parent(self.app.$el).length) return;\n self.$el.trigger('texteditor:keyboardopen');\n self.emit('local::keyboardOpen textEditorKeyboardOpen', self);\n self.app.$el.append(self.$keyboardToolbarEl);\n }\n closeKeyboardToolbar() {\n const self = this;\n self.$keyboardToolbarEl.remove();\n self.$el.trigger('texteditor:keyboardclose');\n self.emit('local::keyboardClose textEditorKeyboardClose', self);\n }\n openPopover(targetX, targetY, targetWidth, targetHeight) {\n const self = this;\n if (!self.popover) return;\n Object.assign(self.popover.params, {\n targetX,\n targetY,\n targetWidth,\n targetHeight\n });\n clearTimeout(self.popoverTimeout);\n self.popoverTimeout = setTimeout(() => {\n if (!self.popover) return;\n if (self.popover.opened) {\n self.popover.resize();\n } else {\n self.$el.trigger('texteditor:popoveropen');\n self.emit('local::popoverOpen textEditorPopoverOpen', self);\n self.popover.open();\n }\n }, 400);\n }\n closePopover() {\n const self = this;\n clearTimeout(self.popoverTimeout);\n if (!self.popover || !self.popover.opened) return;\n self.popoverTimeout = setTimeout(() => {\n if (!self.popover) return;\n self.$el.trigger('texteditor:popoverclose');\n self.emit('local::popoverClose textEditorPopoverClose', self);\n self.popover.close();\n }, 400);\n }\n init() {\n const self = this;\n if (self.value) {\n self.$contentEl.html(self.value);\n } else {\n self.value = self.$contentEl.html();\n }\n if (self.params.placeholder && self.value === '') {\n self.insertPlaceholder();\n }\n if (self.params.mode === 'toolbar') {\n self.createToolbar();\n } else if (self.params.mode === 'popover') {\n self.createPopover();\n } else if (self.params.mode === 'keyboard-toolbar') {\n self.createKeyboardToolbar();\n }\n self.attachEvents();\n self.$el.trigger('texteditor:init');\n self.emit('local::init textEditorInit', self);\n return self;\n }\n destroy() {\n let self = this;\n self.$el.trigger('texteditor:beforedestroy');\n self.emit('local::beforeDestroy textEditorBeforeDestroy', self);\n self.detachEvents();\n if (self.params.mode === 'keyboard-toolbar' && self.$keyboardToolbarEl) {\n self.$keyboardToolbarEl.remove();\n }\n if (self.popover) {\n self.popover.close(false);\n self.popover.destroy();\n }\n delete self.$el[0].f7TextEditor;\n deleteProps(self);\n self = null;\n }\n}\nexport default TextEditor;", "import $ from '../../shared/dom7.js';\nimport { extend } from '../../shared/utils.js';\nimport TextEditor from './text-editor-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'textEditor',\n params: {\n textEditor: {\n el: null,\n mode: 'toolbar',\n // or 'popover'\n value: undefined,\n // will use html content\n customButtons: null,\n buttons: [['bold', 'italic', 'underline', 'strikeThrough'], ['orderedList', 'unorderedList'], ['link', 'image'], ['paragraph', 'h1', 'h2', 'h3'], ['alignLeft', 'alignCenter', 'alignRight', 'alignJustify'], ['subscript', 'superscript'], ['indent', 'outdent']],\n dividers: true,\n imageUrlText: 'Insert image URL',\n linkUrlText: 'Insert link URL',\n placeholder: null,\n clearFormattingOnPaste: true\n }\n },\n create() {\n const app = this;\n app.textEditor = extend(ConstructorMethods({\n defaultSelector: '.text-editor',\n constructor: TextEditor,\n app,\n domProp: 'f7TextEditor'\n }));\n },\n static: {\n TextEditor\n },\n on: {\n tabMounted(tabEl) {\n const app = this;\n $(tabEl).find('.text-editor-init').each(editorEl => {\n const dataset = $(editorEl).dataset();\n app.textEditor.create(extend({\n el: editorEl\n }, dataset || {}));\n });\n },\n tabBeforeRemove(tabEl) {\n $(tabEl).find('.text-editor-init').each(editorEl => {\n if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();\n });\n },\n pageInit(page) {\n const app = this;\n page.$el.find('.text-editor-init').each(editorEl => {\n const dataset = $(editorEl).dataset();\n app.textEditor.create(extend({\n el: editorEl\n }, dataset || {}));\n });\n },\n pageBeforeRemove(page) {\n page.$el.find('.text-editor-init').each(editorEl => {\n if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();\n });\n }\n },\n vnode: {\n 'text-editor-init': {\n insert(vnode) {\n const app = this;\n const editorEl = vnode.elm;\n const dataset = $(editorEl).dataset();\n app.textEditor.create(extend({\n el: editorEl\n }, dataset || {}));\n },\n destroy(vnode) {\n const editorEl = vnode.elm;\n if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();\n }\n }\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass PieChart extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n const defaults = extend({}, app.params.pieChart);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const {\n el\n } = self.params;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7PieChart) return $el[0].f7PieChart;\n extend(self, {\n app,\n $el,\n el: $el && $el[0],\n currentIndex: null,\n f7Tooltip: null\n });\n $el[0].f7PieChart = self;\n\n // Install Modules\n self.useModules();\n self.showTooltip = self.showTooltip.bind(this);\n self.hideTooltip = self.hideTooltip.bind(this);\n self.init();\n return self;\n }\n getSummValue() {\n const {\n datasets\n } = this.params;\n let summ = 0;\n datasets.map(d => d.value || 0).forEach(value => {\n summ += value;\n });\n return summ;\n }\n getPaths() {\n const {\n datasets,\n size\n } = this.params;\n const paths = [];\n let cumulativePercentage = 0;\n function getCoordinatesForPercentage(percentage) {\n const x = Math.cos(2 * Math.PI * percentage) * (size / 3);\n const y = Math.sin(2 * Math.PI * percentage) * (size / 3);\n return [x, y];\n }\n datasets.forEach(_ref => {\n let {\n value,\n label,\n color\n } = _ref;\n const percentage = value / this.getSummValue();\n const [startX, startY] = getCoordinatesForPercentage(cumulativePercentage);\n cumulativePercentage += percentage;\n const [endX, endY] = getCoordinatesForPercentage(cumulativePercentage);\n const largeArcFlag = percentage > 0.5 ? 1 : 0;\n const points = [`M ${startX} ${startY}`,\n // Move\n `A ${size / 3} ${size / 3} 0 ${largeArcFlag} 1 ${endX} ${endY}`,\n // Arc\n 'L 0 0' // Line\n ].join(' ');\n paths.push({\n points,\n label,\n color\n });\n });\n return paths;\n }\n formatTooltipText() {\n const {\n datasets\n } = this.params;\n const {\n currentIndex\n } = this;\n if (currentIndex === null) return '';\n const {\n value,\n label,\n color\n } = datasets[currentIndex];\n const percentage = value / this.getSummValue() * 100;\n const round = v => {\n if (parseInt(v, 10) === v) return v;\n return Math.round(v * 100) / 100;\n };\n if (this.params.formatTooltip) {\n return this.params.formatTooltip.call(this, {\n index: currentIndex,\n value,\n label,\n color,\n percentage\n });\n }\n const tooltipText = `${label ? `${label}: ` : ''}${round(value)} (${round(percentage)}%)`;\n return `\n \n ${tooltipText}\n
\n `;\n }\n setTooltip() {\n const self = this;\n const {\n currentIndex,\n el,\n app,\n params\n } = self;\n const {\n tooltip\n } = params;\n if (currentIndex === null && !self.f7Tooltip) return;\n if (!tooltip || !el) return;\n if (currentIndex !== null && !self.f7Tooltip) {\n self.f7Tooltip = app.tooltip.create({\n trigger: 'manual',\n containerEl: el,\n targetEl: el.querySelector(`path[data-index=\"${currentIndex}\"]`),\n text: self.formatTooltipText(),\n cssClass: 'pie-chart-tooltip'\n });\n self.f7Tooltip.show();\n return;\n }\n if (!self.f7Tooltip) return;\n if (currentIndex !== null) {\n self.f7Tooltip.setText(self.formatTooltipText());\n self.f7Tooltip.setTargetEl(el.querySelector(`path[data-index=\"${currentIndex}\"]`));\n self.f7Tooltip.show();\n } else {\n self.f7Tooltip.hide();\n }\n }\n render() {\n const self = this;\n const size = self.params.size;\n const paths = self.getPaths();\n return $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: size,\n viewBox: `-${size / 3} -${size / 3} ${size * 2 / 3} ${size * 2 / 3}`,\n style: \"transform: rotate(-90deg)\"\n }, paths.map((path, index) => $jsx(\"path\", {\n d: path.points,\n fill: path.color,\n \"data-index\": index\n })));\n }\n update(newParams) {\n if (newParams === void 0) {\n newParams = {};\n }\n const self = this;\n const {\n params\n } = self;\n Object.keys(newParams).forEach(param => {\n if (typeof newParams[param] !== 'undefined') {\n params[param] = newParams[param];\n }\n });\n if (self.$svgEl.length === 0) return self;\n self.$svgEl.remove();\n delete self.$svgEl.f7PieChart;\n const $svgEl = $(self.render()).eq(0);\n $svgEl.f7PieChart = self;\n extend(self, {\n $svgEl,\n svgEl: $svgEl && $svgEl[0]\n });\n self.$el.append($svgEl);\n return self;\n }\n setCurrentIndex(index) {\n const self = this;\n if (index === self.currentIndex) return;\n const {\n datasets\n } = self.params;\n self.currentIndex = index;\n self.$el.trigger('piechart:select', {\n index,\n dataset: datasets[index]\n });\n self.emit('local::select pieChartSelect', self, index, datasets[index]);\n }\n showTooltip(e) {\n const newIndex = parseInt(e.target.getAttribute('data-index'), 10);\n this.setCurrentIndex(newIndex);\n this.$svgEl.find('path').removeClass('pie-chart-hidden').forEach((el, index) => {\n if (index !== this.currentIndex) $(el).addClass('pie-chart-hidden');\n });\n this.setTooltip();\n }\n hideTooltip() {\n this.setCurrentIndex(null);\n this.$svgEl.find('path').removeClass('pie-chart-hidden');\n this.setTooltip();\n }\n init() {\n const self = this;\n const $svgEl = $(self.render()).eq(0);\n $svgEl.f7PieChart = self;\n extend(self, {\n $svgEl,\n svgEl: $svgEl && $svgEl[0]\n });\n self.$el.append($svgEl);\n self.$el.on('click mouseenter', 'path', self.showTooltip, true);\n self.$el.on('mouseleave', 'path', self.hideTooltip, true);\n return self;\n }\n destroy() {\n const self = this;\n if (!self.$el || self.destroyed) return;\n self.$el.trigger('piechart:beforedestroy');\n self.emit('local::beforeDestroy pieChartBeforeDestroy', self);\n self.$el.off('click mouseenter', 'path', self.showTooltip, true);\n self.$el.off('mouseleave', 'path', self.hideTooltip, true);\n self.$svgEl.remove();\n if (self.f7Tooltip && self.f7Tooltip.destroy) {\n self.f7Tooltip.destroy();\n }\n delete self.$el[0].f7PieChart;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default PieChart;", "import $ from '../../shared/dom7.js';\nimport PieChart from './pie-chart-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'pieChart',\n params: {\n pieChart: {\n el: null,\n datasets: [],\n size: 320,\n tooltip: false,\n formatTooltip: null\n }\n },\n create() {\n const app = this;\n app.pieChart = ConstructorMethods({\n defaultSelector: '.pie-chart',\n constructor: PieChart,\n app,\n domProp: 'f7PieChart'\n });\n app.pieChart.update = function update(el, newParams) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const pieChart = app.pieChart.get(el);\n if (!pieChart) return undefined;\n pieChart.update(newParams);\n return pieChart;\n };\n }\n};", "import $ from '../../shared/dom7.js';\nimport { extend, deleteProps } from '../../shared/utils.js';\nimport Framework7Class from '../../shared/class.js';\n/** @jsx $jsx */\nimport $jsx from '../../shared/$jsx.js';\nclass AreaChart extends Framework7Class {\n constructor(app, params) {\n if (params === void 0) {\n params = {};\n }\n super(params, [app]);\n const self = this;\n const defaults = extend({}, app.params.areaChart);\n\n // Extend defaults with modules params\n self.useModulesParams(defaults);\n self.params = extend(defaults, params);\n const {\n el\n } = self.params;\n if (!el) return self;\n const $el = $(el);\n if ($el.length === 0) return self;\n if ($el[0].f7AreaChart) return $el[0].f7AreaChart;\n extend(self, {\n app,\n $el,\n el: $el && $el[0],\n currentIndex: null,\n hiddenDatasets: [],\n f7Tooltip: null,\n linesOffsets: null\n });\n $el[0].f7AreaChart = self;\n\n // Install Modules\n self.useModules();\n self.onMouseEnter = self.onMouseEnter.bind(self);\n self.onMouseMove = self.onMouseMove.bind(self);\n self.onMouseLeave = self.onMouseLeave.bind(self);\n self.onLegendClick = self.onLegendClick.bind(self);\n self.init();\n return self;\n }\n getVisibleLabels() {\n const {\n maxAxisLabels,\n axisLabels\n } = this.params;\n if (!maxAxisLabels || axisLabels.length <= maxAxisLabels) return axisLabels;\n const skipStep = Math.ceil(axisLabels.length / maxAxisLabels);\n const filtered = axisLabels.filter((label, index) => index % skipStep === 0);\n return filtered;\n }\n getSummValues() {\n const {\n datasets\n } = this.params;\n const {\n hiddenDatasets\n } = this;\n const summValues = [];\n datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).forEach(_ref => {\n let {\n values\n } = _ref;\n values.forEach((value, valueIndex) => {\n if (!summValues[valueIndex]) summValues[valueIndex] = 0;\n summValues[valueIndex] += value;\n });\n });\n return summValues;\n }\n getChartData() {\n const {\n datasets,\n lineChart,\n width,\n height\n } = this.params;\n const {\n hiddenDatasets\n } = this;\n const data = [];\n if (!datasets.length) {\n return data;\n }\n const lastValues = datasets[0].values.map(() => 0);\n let maxValue = 0;\n if (lineChart) {\n datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).forEach(_ref2 => {\n let {\n values\n } = _ref2;\n const datasetMaxValue = Math.max(...values);\n if (datasetMaxValue > maxValue) maxValue = datasetMaxValue;\n });\n } else {\n maxValue = Math.max(...this.getSummValues());\n }\n datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).forEach(_ref3 => {\n let {\n label,\n values,\n color\n } = _ref3;\n const points = values.map((originalValue, valueIndex) => {\n lastValues[valueIndex] += originalValue;\n const value = lineChart ? originalValue : lastValues[valueIndex];\n const x = valueIndex / (values.length - 1) * width;\n const y = height - value / maxValue * height;\n if (lineChart) {\n return `${valueIndex === 0 ? 'M' : 'L'}${x},${y}`;\n }\n return `${x} ${y}`;\n });\n if (!lineChart) {\n points.push(`${width} ${height} 0 ${height}`);\n }\n data.push({\n label,\n points: points.join(' '),\n color\n });\n });\n return data.reverse();\n }\n getVerticalLines() {\n const {\n datasets,\n width\n } = this.params;\n const lines = [];\n if (!datasets.length) {\n return lines;\n }\n const values = datasets[0].values;\n values.forEach((value, valueIndex) => {\n const x = valueIndex / (values.length - 1) * width;\n lines.push(x);\n });\n return lines;\n }\n toggleDataset(index) {\n const {\n hiddenDatasets,\n params: {\n toggleDatasets\n }\n } = this;\n if (!toggleDatasets) return;\n if (hiddenDatasets.includes(index)) {\n hiddenDatasets.splice(hiddenDatasets.indexOf(index), 1);\n } else {\n hiddenDatasets.push(index);\n }\n if (this.$legendEl) {\n this.$legendEl.find('.area-chart-legend-item').removeClass('area-chart-legend-item-hidden');\n hiddenDatasets.forEach(i => {\n this.$legendEl.find(`.area-chart-legend-item[data-index=\"${i}\"]`).addClass('area-chart-legend-item-hidden');\n });\n }\n this.update({}, true);\n }\n formatAxisLabel(label) {\n const {\n formatAxisLabel\n } = this.params;\n if (formatAxisLabel) return formatAxisLabel.call(this, label);\n return label;\n }\n formatLegendLabel(label) {\n const {\n formatLegendLabel\n } = this.params;\n if (formatLegendLabel) return formatLegendLabel.call(this, label);\n return label;\n }\n calcLinesOffsets() {\n const lines = this.svgEl.querySelectorAll('line');\n this.linesOffsets = [];\n for (let i = 0; i < lines.length; i += 1) {\n this.linesOffsets.push(lines[i].getBoundingClientRect().left);\n }\n }\n formatTooltip() {\n const self = this;\n const {\n currentIndex,\n hiddenDatasets,\n params: {\n datasets,\n axisLabels,\n formatTooltip,\n formatTooltipTotal,\n formatTooltipAxisLabel,\n formatTooltipDataset\n }\n } = self;\n if (currentIndex === null) return '';\n let total = 0;\n const currentValues = datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).map(dataset => ({\n color: dataset.color,\n label: dataset.label,\n value: dataset.values[currentIndex]\n }));\n currentValues.forEach(dataset => {\n total += dataset.value;\n });\n if (formatTooltip) {\n return formatTooltip({\n index: currentIndex,\n total,\n datasets: currentValues\n });\n }\n let labelText = formatTooltipAxisLabel ? formatTooltipAxisLabel.call(self, axisLabels[currentIndex]) : this.formatAxisLabel(axisLabels[currentIndex]);\n if (!labelText) labelText = '';\n const totalText = formatTooltipTotal ? formatTooltipTotal.call(self, total) : total;\n // prettier-ignore\n const datasetsText = currentValues.length > 0 ? `\n ` : '';\n // prettier-ignore\n return `\n ${labelText}
\n ${totalText}
\n ${datasetsText}\n `;\n }\n setTooltip() {\n const self = this;\n const {\n app,\n el,\n svgEl,\n hiddenDatasets,\n currentIndex,\n params: {\n tooltip,\n datasets\n }\n } = self;\n if (!tooltip) return;\n const hasVisibleDataSets = datasets.filter((dataset, index) => !hiddenDatasets.includes(index)).length > 0;\n if (!hasVisibleDataSets) {\n if (self.f7Tooltip && self.f7Tooltip.hide) self.f7Tooltip.hide();\n return;\n }\n if (currentIndex !== null && !self.f7Tooltip) {\n self.f7Tooltip = app.tooltip.create({\n trigger: 'manual',\n containerEl: el,\n targetEl: svgEl.querySelector(`line[data-index=\"${currentIndex}\"]`),\n text: self.formatTooltip(),\n cssClass: 'area-chart-tooltip'\n });\n if (self.f7Tooltip && self.f7Tooltip.show) {\n self.f7Tooltip.show();\n }\n return;\n }\n if (!self.f7Tooltip || !self.f7Tooltip.hide || !self.f7Tooltip.show) {\n return;\n }\n if (currentIndex !== null) {\n self.f7Tooltip.setText(self.formatTooltip());\n self.f7Tooltip.setTargetEl(svgEl.querySelector(`line[data-index=\"${currentIndex}\"]`));\n self.f7Tooltip.show();\n } else {\n self.f7Tooltip.hide();\n }\n }\n setCurrentIndex(index) {\n if (index === this.currentIndex) return;\n this.currentIndex = index;\n this.$el.trigger('areachart:select', {\n index\n });\n this.emit('local::select areaChartSelect', this, index);\n this.$svgEl.find('line').removeClass('area-chart-current-line');\n this.$svgEl.find(`line[data-index=\"${index}\"]`).addClass('area-chart-current-line');\n this.setTooltip();\n }\n onLegendClick(e) {\n const index = parseInt($(e.target).closest('.area-chart-legend-item').attr('data-index'), 10);\n this.toggleDataset(index);\n }\n onMouseEnter() {\n this.calcLinesOffsets();\n }\n onMouseMove(e) {\n const self = this;\n if (!self.linesOffsets) {\n self.calcLinesOffsets();\n }\n let currentLeft = e.pageX;\n if (typeof currentLeft === 'undefined') currentLeft = 0;\n const distances = self.linesOffsets.map(left => Math.abs(currentLeft - left));\n const minDistance = Math.min(...distances);\n const closestIndex = distances.indexOf(minDistance);\n self.setCurrentIndex(closestIndex);\n }\n onMouseLeave() {\n this.setCurrentIndex(null);\n }\n attachEvents() {\n const {\n svgEl,\n $el\n } = this;\n if (!svgEl) return;\n svgEl.addEventListener('mouseenter', this.onMouseEnter);\n svgEl.addEventListener('mousemove', this.onMouseMove);\n svgEl.addEventListener('mouseleave', this.onMouseLeave);\n $el.on('click', '.area-chart-legend-item', this.onLegendClick);\n }\n detachEvents() {\n const {\n svgEl,\n $el\n } = this;\n if (!svgEl) return;\n svgEl.removeEventListener('mouseenter', this.onMouseEnter);\n svgEl.removeEventListener('mousemove', this.onMouseMove);\n svgEl.removeEventListener('mouseleave', this.onMouseLeave);\n $el.off('click', '.area-chart-legend-item', this.onLegendClick);\n }\n render() {\n const self = this;\n const {\n lineChart,\n toggleDatasets,\n width,\n height,\n axis,\n axisLabels,\n legend,\n datasets\n } = self.params;\n const chartData = self.getChartData();\n const verticalLines = self.getVerticalLines();\n const visibleLegends = self.getVisibleLabels();\n const LegendItemTag = toggleDatasets ? 'button' : 'span';\n return $jsx(\"div\", null, $jsx(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: width,\n height: height,\n viewBox: `0 0 ${width} ${height}`,\n preserveAspectRatio: \"none\"\n }, chartData.map(data => lineChart ? $jsx(\"path\", {\n stroke: data.color,\n \"fill-rule\": \"evenodd\",\n d: data.points\n }) : $jsx(\"polygon\", {\n fill: data.color,\n \"fill-rule\": \"evenodd\",\n points: data.points\n })), verticalLines.map((line, index) => $jsx(\"line\", {\n \"data-index\": index,\n fill: \"#000\",\n x1: line,\n y1: 0,\n x2: line,\n y2: height\n }))), axis && $jsx(\"div\", {\n class: \"area-chart-axis\"\n }, axisLabels.map(label => $jsx(\"span\", null, visibleLegends.includes(label) && $jsx(\"span\", null, self.formatAxisLabel(label))))), legend && $jsx(\"div\", {\n class: \"area-chart-legend\"\n }, datasets.map((dataset, index) => $jsx(LegendItemTag, {\n \"data-index\": index,\n class: `area-chart-legend-item ${toggleDatasets ? 'area-chart-legend-button' : ''}`,\n _type: toggleDatasets ? 'button' : undefined\n }, $jsx(\"span\", {\n style: `background-color: ${dataset.color}`\n }), self.formatLegendLabel(dataset.label)))));\n }\n update(newParams, onlySvg) {\n if (newParams === void 0) {\n newParams = {};\n }\n if (onlySvg === void 0) {\n onlySvg = false;\n }\n const self = this;\n const {\n params\n } = self;\n Object.keys(newParams).forEach(param => {\n if (typeof newParams[param] !== 'undefined') {\n params[param] = newParams[param];\n }\n });\n if (self.$svgEl.length === 0) return self;\n self.detachEvents();\n self.$svgEl.remove();\n if (!onlySvg) {\n self.$axisEl.remove();\n self.$legendEl.remove();\n }\n const $rendered = $(self.render());\n const $svgEl = $rendered.find('svg');\n extend(self, {\n svgEl: $svgEl && $svgEl[0],\n $svgEl\n });\n if (!onlySvg) {\n const $axisEl = $rendered.find('.area-chart-axis');\n const $legendEl = $rendered.find('.area-chart-legend');\n extend(self, {\n $axisEl,\n $legendEl\n });\n self.$el.append($axisEl);\n self.$el.append($legendEl);\n }\n self.$el.prepend($svgEl);\n self.attachEvents();\n return self;\n }\n init() {\n const self = this;\n const $rendered = $(self.render());\n const $svgEl = $rendered.find('svg');\n const $axisEl = $rendered.find('.area-chart-axis');\n const $legendEl = $rendered.find('.area-chart-legend');\n extend(self, {\n svgEl: $svgEl && $svgEl[0],\n $svgEl,\n $axisEl,\n $legendEl\n });\n self.$el.append($svgEl);\n self.$el.append($axisEl);\n self.$el.append($legendEl);\n self.attachEvents();\n return self;\n }\n destroy() {\n const self = this;\n if (!self.$el || self.destroyed) return;\n self.$el.trigger('piechart:beforedestroy');\n self.emit('local::beforeDestroy areaChartBeforeDestroy', self);\n self.detachEvents();\n self.$svgEl.remove();\n self.$axisEl.remove();\n self.$legendEl.remove();\n if (self.f7Tooltip && self.f7Tooltip.destroy) {\n self.f7Tooltip.destroy();\n }\n delete self.$el[0].f7AreaChart;\n deleteProps(self);\n self.destroyed = true;\n }\n}\nexport default AreaChart;", "import $ from '../../shared/dom7.js';\nimport AreaChart from './area-chart-class.js';\nimport ConstructorMethods from '../../shared/constructor-methods.js';\nexport default {\n name: 'areaChart',\n params: {\n areaChart: {\n el: null,\n lineChart: false,\n datasets: [],\n axis: false,\n axisLabels: [],\n tooltip: false,\n legend: false,\n toggleDatasets: false,\n width: 640,\n height: 320,\n maxAxisLabels: 8,\n formatAxisLabel: null,\n formatLegendLabel: null,\n formatTooltip: null,\n formatTooltipAxisLabel: null,\n formatTooltipTotal: null,\n formatTooltipDataset: null\n }\n },\n create() {\n const app = this;\n app.areaChart = ConstructorMethods({\n defaultSelector: '.area-chart',\n constructor: AreaChart,\n app,\n domProp: 'f7AreaChart'\n });\n app.areaChart.update = function update(el, newParams) {\n const $el = $(el);\n if ($el.length === 0) return undefined;\n const areaChart = app.areaChart.get(el);\n if (!areaChart) return undefined;\n areaChart.update(newParams);\n return areaChart;\n };\n }\n};", "import { bindMethods } from '../../shared/utils.js';\nconst Breadcrumbs = {};\nexport default {\n name: 'breadrumbs',\n create() {\n const app = this;\n bindMethods(app, {\n breadrumbs: Breadcrumbs\n });\n }\n};", "export default {\n name: 'typography'\n};", "/**\n * Framework7 8.3.2\n * Full featured mobile HTML framework for building iOS & Android apps\n * https://framework7.io/\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 27, 2024\n */\n\nimport $ from './shared/dom7.js';\nimport Framework7 from './components/app/app-class.js';\nimport * as utils from './shared/utils.js';\nimport { getSupport } from './shared/get-support.js';\nimport { getDevice } from './shared/get-device.js';\nimport DeviceModule from './modules/device/device.js';\nimport SupportModule from './modules/support/support.js';\nimport UtilsModule from './modules/utils/utils.js';\nimport ResizeModule from './modules/resize/resize.js';\nimport TouchModule from './modules/touch/touch.js';\nimport ClicksModule from './modules/clicks/clicks.js';\nimport RouterModule from './modules/router/router.js';\nimport RouterComponentLoaderModule from './modules/router/component-loader.js';\nimport ComponentModule, { Component, $jsx } from './modules/component/component.js';\nimport HistoryModule from './modules/history/history.js';\nimport ServiceWorkerModule from './modules/service-worker/service-worker.js';\nimport StoreModule, { createStore } from './modules/store/store.js';\nimport Statusbar from './components/statusbar/statusbar.js';\nimport View from './components/view/view.js';\nimport Navbar from './components/navbar/navbar.js';\nimport Toolbar from './components/toolbar/toolbar.js';\nimport Subnavbar from './components/subnavbar/subnavbar.js';\nimport TouchRipple from './components/touch-ripple/touch-ripple.js';\nimport Modal from './components/modal/modal.js';\nimport Router from './modules/router/router-class.js';\nimport Dialog from './components/dialog/dialog.js';\nimport Popup from './components/popup/popup.js';\nimport LoginScreen from './components/login-screen/login-screen.js';\nimport Popover from './components/popover/popover.js';\nimport Actions from './components/actions/actions.js';\nimport Sheet from './components/sheet/sheet.js';\nimport Toast from './components/toast/toast.js';\nimport Preloader from './components/preloader/preloader.js';\nimport Progressbar from './components/progressbar/progressbar.js';\nimport Sortable from './components/sortable/sortable.js';\nimport Swipeout from './components/swipeout/swipeout.js';\nimport Accordion from './components/accordion/accordion.js';\nimport ContactsList from './components/contacts-list/contacts-list.js';\nimport VirtualList from './components/virtual-list/virtual-list.js';\nimport ListIndex from './components/list-index/list-index.js';\nimport Timeline from './components/timeline/timeline.js';\nimport Tabs from './components/tabs/tabs.js';\nimport Panel from './components/panel/panel.js';\nimport Card from './components/card/card.js';\nimport Chip from './components/chip/chip.js';\nimport Form from './components/form/form.js';\nimport Input from './components/input/input.js';\nimport Checkbox from './components/checkbox/checkbox.js';\nimport Radio from './components/radio/radio.js';\nimport Toggle from './components/toggle/toggle.js';\nimport Range from './components/range/range.js';\nimport Stepper from './components/stepper/stepper.js';\nimport SmartSelect from './components/smart-select/smart-select.js';\nimport Grid from './components/grid/grid.js';\nimport Calendar from './components/calendar/calendar.js';\nimport Picker from './components/picker/picker.js';\nimport InfiniteScroll from './components/infinite-scroll/infinite-scroll.js';\nimport PullToRefresh from './components/pull-to-refresh/pull-to-refresh.js';\nimport DataTable from './components/data-table/data-table.js';\nimport Fab from './components/fab/fab.js';\nimport Searchbar from './components/searchbar/searchbar.js';\nimport Messages from './components/messages/messages.js';\nimport Messagebar from './components/messagebar/messagebar.js';\nimport Swiper from './components/swiper/swiper.js';\nimport PhotoBrowser from './components/photo-browser/photo-browser.js';\nimport Notification from './components/notification/notification.js';\nimport Autocomplete from './components/autocomplete/autocomplete.js';\nimport Tooltip from './components/tooltip/tooltip.js';\nimport Gauge from './components/gauge/gauge.js';\nimport Skeleton from './components/skeleton/skeleton.js';\nimport ColorPicker from './components/color-picker/color-picker.js';\nimport Treeview from './components/treeview/treeview.js';\nimport TextEditor from './components/text-editor/text-editor.js';\nimport PieChart from './components/pie-chart/pie-chart.js';\nimport AreaChart from './components/area-chart/area-chart.js';\nimport Breadcrumbs from './components/breadcrumbs/breadcrumbs.js';\nimport Typography from './components/typography/typography.js';\nRouter.use([RouterComponentLoaderModule]);\nFramework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar, View, Navbar, Toolbar, Subnavbar, TouchRipple, Modal, Dialog, Popup, LoginScreen, Popover, Actions, Sheet, Toast, Preloader, Progressbar, Sortable, Swipeout, Accordion, ContactsList, VirtualList, ListIndex, Timeline, Tabs, Panel, Card, Chip, Form, Input, Checkbox, Radio, Toggle, Range, Stepper, SmartSelect, Grid, Calendar, Picker, InfiniteScroll, PullToRefresh, DataTable, Fab, Searchbar, Messages, Messagebar, Swiper, PhotoBrowser, Notification, Autocomplete, Tooltip, Gauge, Skeleton, ColorPicker, Treeview, TextEditor, PieChart, AreaChart, Breadcrumbs, Typography]);\nexport { Component, $jsx, $ as Dom7, utils, getDevice, getSupport, createStore };\nexport default Framework7;\n", "/**\n * Framework7 8.3.2\n * Full featured mobile HTML framework for building iOS & Android apps\n * https://framework7.io/\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 27, 2024\n */\n\nimport $ from './shared/dom7.js';\nimport Framework7 from './components/app/app-class.js';\nimport * as utils from './shared/utils.js';\nimport { getSupport } from './shared/get-support.js';\nimport { getDevice } from './shared/get-device.js';\nimport DeviceModule from './modules/device/device.js';\nimport SupportModule from './modules/support/support.js';\nimport UtilsModule from './modules/utils/utils.js';\nimport ResizeModule from './modules/resize/resize.js';\nimport TouchModule from './modules/touch/touch.js';\nimport ClicksModule from './modules/clicks/clicks.js';\nimport RouterModule from './modules/router/router.js';\nimport RouterComponentLoaderModule from './modules/router/component-loader.js';\nimport ComponentModule, { Component, $jsx } from './modules/component/component.js';\nimport HistoryModule from './modules/history/history.js';\nimport ServiceWorkerModule from './modules/service-worker/service-worker.js';\nimport StoreModule, { createStore } from './modules/store/store.js';\nimport Statusbar from './components/statusbar/statusbar.js';\nimport View from './components/view/view.js';\nimport Navbar from './components/navbar/navbar.js';\nimport Toolbar from './components/toolbar/toolbar.js';\nimport Subnavbar from './components/subnavbar/subnavbar.js';\nimport TouchRipple from './components/touch-ripple/touch-ripple.js';\nimport Modal from './components/modal/modal.js';\nimport Router from './modules/router/router-class.js';\nRouter.use([RouterComponentLoaderModule]);\nFramework7.use([DeviceModule, SupportModule, UtilsModule, ResizeModule, TouchModule, ClicksModule, RouterModule, HistoryModule, ComponentModule, ServiceWorkerModule, StoreModule, Statusbar, View, Navbar, Toolbar, Subnavbar, TouchRipple, Modal]);\nexport { Component, $jsx, $ as Dom7, utils, getDevice, getSupport, createStore };\nexport default Framework7;\n", "import { createStore } from 'framework7';\n\nexport const setConfig = () => {\n // collect all data elements stored in body\n let config = $(document).find(\"script[data-for='app']\");\n config = JSON.parse(config.html());\n\n // always erase existing root value just in case the user changes the root.\n // This may be harmful\n config.el = \"#app\";\n\n // check if the app is intended to be a PWA\n let isPWA = $('body').attr('data-pwa') === \"true\";\n\n if (isPWA) {\n config.serviceWorker = {\n path: window.location.pathname + \"service-worker.js\",\n scope: window.location.pathname\n };\n }\n\n // Widgets cache\n config.store = createStore({\n state: {\n // any other widget type to cache ...\n popovers: [],\n tooltips: [],\n actions: []\n },\n actions: {\n //toggleDarkTheme: function() {\n // let self = this;\n // let $html = self.$(\"html\");\n // $html.toggleClass(\"theme-dark\");\n //}\n }\n });\n\n return config;\n};\n", " \n// Style for touch plugin\nconst setTouchStyle = (config) => {\n // TO DO: check whether we still need this ...\n if (config.hasOwnProperty(\"touch\")) {\n if (config.touch.tapHold) {\n $(\"