diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e97d3845f5bd353747fe665af928d33ddf904be5..a0b1049a430940c9b8240fbd93803685fe0f7544 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,10 +2,13 @@ image: gitlab.cs.wallawalla.edu:5050/elock/doorcode:latest
services:
- postgres:13-alpine
+
variables:
POSTGRES_USER: web
POSTGRES_PASSWORD: secret
POSTGRES_DB: doorcode
+ DOORCODE_IMAGE_NAME: doorcode/app:$CI_COMMIT_REF_SLUG
+ NGINX_IMAGE_NAME: doorcode/web:$CI_COMMIT_REF_SLUG
stages:
- build
@@ -81,50 +84,87 @@ generate_code_coverage:
- src/backend/cov
expire_in: 30 days
-deploy_backend_production:
+deploy application:
+ image: tiangolo/docker-with-compose
+ tags:
+ - elock
stage: deploy
- before_script:
- - eval $(ssh-agent -s)
- - ssh-add <(echo "${SSH_PRIVATE_KEY}" | base64 -d -w 0)
- - mkdir -p ~/.ssh
- - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- - SSH_COMMAND_STRING="cd doorcode"
- # get newest changes
- - SSH_COMMAND_STRING+=" && git pull"
- - SSH_COMMAND_STRING+=" && (docker-compose restart || docker-compose up -d)"
- # the -T fixes the input device is not a TTY .. see https://github.com/docker/compose/issues/5696
- - SSH_COMMAND_STRING+=" && docker-compose exec -T api ./update-prod.sh"
- - echo "$SSH_COMMAND_STRING"
- # Execute the deploy
- - ssh $SSH_USER@$SSH_HOST "${SSH_COMMAND_STRING}"
- # Make sure it is running
- - "curl --insecure --location https://${SSH_HOST}/api | grep \"Welcome to the elock API.\""
+ - docker-compose -f docker-compose.prod.yml build
+ - docker build -t $DOORCODE_IMAGE_NAME -f prod.Dockerfile .
+ - docker build -t $NGINX_IMAGE_NAME -f nginx.Dockerfile .
+ - docker-compose -f docker-compose.prod.yml down
+ - sed -i "s/\(^DB_PASSWORD=\).*/\1$(< POSTGRES_PASSWORD)/" $PROJ_DIR/.env
+ - docker-compose -f docker-compose.prod.yml up -d
+ # Give it some time to spin up...
+ - sleep 10
+ # Make sure app is running
+ - "curl --fail --insecure --location https://${DEPLOY_ADDRESS}/api"
+ - "curl --fail --insecure --location https://${DEPLOY_ADDRESS}/api/docs"
environment:
- name: production_api
+ name: production
url: https://elock.cs.wallawalla.edu/api
+ on_stop: stop-prod
when: manual
only:
- master
-deploy_api_docs:
+stop-prod:
stage: deploy
- before_script:
- - eval $(ssh-agent -s)
- - ssh-add <(echo "${SSH_PRIVATE_KEY}" | base64 -d -w 0)
- - mkdir -p ~/.ssh
- - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- # Can't use the CI job token to deploy the artifact because that's a "pRemiUm FEATurE"
- - "rsync -a --delete src/backend/public/docs $SSH_USER@$SSH_HOST:/home/$SSH_USER/doorcode/src/backend/public/"
- # Make sure it is running
- - "curl --insecure --location https://${SSH_HOST}/api/docs/ | grep \"Welcome to the generated API reference.\""
- environment:
- name: production_api_docs
- url: https://elock.cs.wallawalla.edu/api/docs/
- when: manual
+ - docker-compose -f docker-compose.prod.yml down
only:
- master
+ when: manual
+ environment:
+ name: production
+ action: stop
+
+
+#deploy_backend_production:
+# stage: deploy
+# before_script:
+# - eval $(ssh-agent -s)
+# - ssh-add <(echo "${SSH_PRIVATE_KEY}" | base64 -d -w 0)
+# - mkdir -p ~/.ssh
+# - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
+# script:
+# - SSH_COMMAND_STRING="cd doorcode"
+# # get newest changes
+# - SSH_COMMAND_STRING+=" && git pull"
+# - SSH_COMMAND_STRING+=" && (docker-compose restart || docker-compose up -d)"
+# # the -T fixes the input device is not a TTY .. see https://github.com/docker/compose/issues/5696
+# - SSH_COMMAND_STRING+=" && docker-compose exec -T api ./update-prod.sh"
+# - echo "$SSH_COMMAND_STRING"
+# # Execute the deploy
+# - ssh $SSH_USER@$SSH_HOST "${SSH_COMMAND_STRING}"
+# # Make sure it is running
+# - "curl --insecure --location https://${SSH_HOST}/api | grep \"Welcome to the elock API.\""
+# environment:
+# name: production_api
+# url: https://elock.cs.wallawalla.edu/api
+# when: manual
+# only:
+# - master
+#
+#deploy_api_docs:
+# stage: deploy
+# before_script:
+# - eval $(ssh-agent -s)
+# - ssh-add <(echo "${SSH_PRIVATE_KEY}" | base64 -d -w 0)
+# - mkdir -p ~/.ssh
+# - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
+# script:
+# # Can't use the CI job token to deploy the artifact because that's a "pRemiUm FEATurE"
+# - "rsync -a --delete src/backend/public/docs $SSH_USER@$SSH_HOST:/home/$SSH_USER/doorcode/src/backend/public/"
+# # Make sure it is running
+# - "curl --insecure --location https://${SSH_HOST}/api/docs/ | grep \"Welcome to the generated API reference.\""
+# environment:
+# name: production_api_docs
+# url: https://elock.cs.wallawalla.edu/api/docs/
+# when: manual
+# only:
+# - master
#deploy_frontend_production:
# stage: deploy
diff --git a/Dockerfile b/Dockerfile
index 513e202dd8e34026a423f95f65021fdf9bb97223..b57816aef459ca439cbdcf223408135fed6bfe05 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,10 +19,8 @@ RUN apk update && apk add --no-cache \
bash-completion \
vim \
curl \
- openssh-client \
coreutils \
- rsync \
- npm\
+ npm \
&& apk add --no-cache $PHPIZE_DEPS
# && npm install -g @vue/cli \
# && pecl install xdebug \
@@ -51,6 +49,5 @@ COPY php/dev.ini /usr/local/etc/php/conf.d/local.ini
# Change current user to www
USER www
-# Expose port 9000 and start php-fpm server
-EXPOSE 9000
+# Start php-fpm server
CMD ["php-fpm"]
diff --git a/bin/docker-entrypoint.sh b/bin/docker-entrypoint.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2bca64323f065ed5f7f3290876f1428cff18570a
--- /dev/null
+++ b/bin/docker-entrypoint.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env sh
+set -e
+
+cd ${PROJECT_DIR}/backend || exit 1
+
+# Apply new migrations
+php artisan migrate --force
+
+php-fpm
diff --git a/docker-compose.yml.prod b/docker-compose.prod.yml
similarity index 54%
rename from docker-compose.yml.prod
rename to docker-compose.prod.yml
index 0da348833d4d1c3b3bcf50517004e424ae1fed45..f2b549e8d4fa3fdb4368c94689198262508fbcf0 100644
--- a/docker-compose.yml.prod
+++ b/docker-compose.prod.yml
@@ -1,4 +1,4 @@
-version: '3.7'
+version: '3.8'
networks:
doorcode:
@@ -6,19 +6,19 @@ networks:
secrets:
webserver_cert:
- file: ./secrets/certs/webserver.cert
+ file: $WEBSERVER_CERT
webserver_key:
- file: ./secrets/certs/webserver.key
+ file: $WEBSERVER_KEY
root_cert:
- file: ./secrets/certs/root.cert
+ file: $ROOT_CERT
wwu_webserver_cert:
- file: ./secrets/certs/wwu-granted-elock-cert.cer
+ file: $WWU_WEBSERVER_CERT
wwu_webserver_key:
- file: ./secrets/certs/wwu-webserver-request-root.key
+ file: $WWU_WEBSERVER_KEY
wwu_root_cert:
- file: ./secrets/certs/wwu-webserver-intermediate.pem
+ file: $WWU_ROOT_CERT
postgres_password:
- file: ./secrets/passwords/postgres
+ file: $POSTGRES_PASSWORD
volumes:
db-data:
@@ -26,8 +26,7 @@ volumes:
services:
webserver:
- image: nginx:1.17.10-alpine
- container_name: webserver
+ image: $NGINX_IMAGE_NAME
restart: always
secrets:
- webserver_cert
@@ -41,16 +40,12 @@ services:
- "443:443"
- "80:80"
volumes:
- - ./src:/var/www
- - ./nginx/conf.d/prod.conf:/etc/nginx/conf.d/prod.conf
- - ./nginx/dhparam/:/run/dhparam
- # Saml config
- - ./simplesamlphp-1.19.0-rc1:/var/simplesamlphp
- - ./simple-saml-prod/cert:/var/simplesamlphp/cert
- - ./simple-saml-prod/config:/var/simplesamlphp/config
- - ./simple-saml-prod/metadata:/var/simplesamlphp/metadata
+ - $PROJ_DIR/simple-saml/cert:/var/simplesamlphp/cert:ro
+ - $PROJ_DIR/simple-saml/config:/var/simplesamlphp/config:ro
+ - $PROJ_DIR/simple-saml/metadata:/var/simplesamlphp/metadata
depends_on:
- dbadmin
+ - api
logging:
options:
max-size: "10m"
@@ -59,7 +54,6 @@ services:
- doorcode
postgres:
image: postgres:13-alpine
- container_name: postgres
restart: always
secrets:
- postgres_password
@@ -79,7 +73,6 @@ services:
- doorcode
dbadmin:
image: dpage/pgadmin4:4.24
- container_name: dbadmin
restart: always
depends_on:
- postgres
@@ -95,17 +88,14 @@ services:
networks:
- doorcode
api:
- image: gitlab.cs.wallawalla.edu:5050/elock/doorcode:prod
- container_name: api
+ image: $DOORCODE_IMAGE_NAME
restart: always
volumes:
- - ./src:/var/www
- - ./php/prod.ini:/usr/local/etc/php/conf.d/local.ini
- # Map saml files to the php-fpm server so it has access to them as well
- - ./simplesamlphp-1.19.0-rc1:/var/simplesamlphp
- - ./simple-saml-prod/cert:/var/simplesamlphp/cert
- - ./simple-saml-prod/config:/var/simplesamlphp/config
- - ./simple-saml-prod/metadata:/var/simplesamlphp/metadata
+ - $PROJ_DIR/.env:/var/www/backend/.env:ro
+ - $PROJ_DIR/controller-bins:/var/www/backend/storage/app/controller/binaries:ro
+ - $PROJ_DIR/simple-saml/cert:/var/simplesamlphp/cert:ro
+ - $PROJ_DIR/simple-saml/config:/var/simplesamlphp/config:ro
+ - $PROJ_DIR/simple-saml/metadata:/var/simplesamlphp/metadata
logging:
options:
max-size: "10m"
diff --git a/docker-compose.yml.bak b/docker-compose.yml.bak
new file mode 100644
index 0000000000000000000000000000000000000000..4cc1a385050eb6f44070288a451c0784be9753d7
--- /dev/null
+++ b/docker-compose.yml.bak
@@ -0,0 +1,119 @@
+version: '3.7'
+
+networks:
+ doorcode:
+ driver: bridge
+
+secrets:
+ webserver_cert:
+ file: ./secrets/certs/webserver.cert
+ webserver_key:
+ file: ./secrets/certs/webserver.key
+ root_cert:
+ file: ./secrets/certs/root.cert
+
+volumes:
+ db-data:
+ pgadmin-data:
+
+services:
+ webserver:
+ image: nginx:1-alpine
+ container_name: webserver
+ restart: unless-stopped
+ tty: true
+ secrets:
+ - webserver_cert
+ - webserver_key
+ - root_cert
+ ports:
+ - "8080:443"
+ volumes:
+ - ./src:/var/www
+ - ./nginx/conf.d/app.conf:/etc/nginx/conf.d/app.conf
+ - ./nginx/dhparam/:/run/dhparam
+ # Saml config
+ - ./simplesamlphp-1.19.0-rc1:/var/simplesamlphp
+ - ./simple-saml/cert:/var/simplesamlphp/cert
+ - ./simple-saml/config:/var/simplesamlphp/config
+ - ./simple-saml/metadata:/var/simplesamlphp/metadata
+ - ./simplesamlphp-1.19.0-rc1:/var/simplesamlphp-idp
+ - ./simple-saml-idp/cert:/var/simplesamlphp-idp/cert
+ - ./simple-saml-idp/config:/var/simplesamlphp-idp/config
+ - ./simple-saml-idp/metadata:/var/simplesamlphp-idp/metadata
+ depends_on:
+ - dbadmin
+ - api
+ logging:
+ options:
+ max-size: "10m"
+ max-file: "3"
+ networks:
+ - doorcode
+ postgres:
+ image: postgres:13-alpine
+ container_name: postgres
+ restart: unless-stopped
+ tty: true
+ ports:
+ - "5432:5432"
+ volumes:
+ - db-data:/var/lib/postgresql/data
+ environment:
+ POSTGRES_USER: web
+ POSTGRES_PASSWORD: secret
+ POSTGRES_DB: doorcode
+ logging:
+ options:
+ max-size: "10m"
+ max-file: "3"
+ networks:
+ - doorcode
+ dbadmin:
+ image: dpage/pgadmin4:latest
+ container_name: dbadmin
+ restart: unless-stopped
+ tty: true
+ ports:
+ - "8081:80"
+ depends_on:
+ - postgres
+ volumes:
+ - pgadmin-data:/var/lib/pgadmin
+ environment:
+ PGADMIN_DEFAULT_EMAIL: admin@elock
+ PGADMIN_DEFAULT_PASSWORD: secret
+ logging:
+ options:
+ max-size: "10m"
+ max-file: "3"
+ networks:
+ - doorcode
+ api:
+ build:
+ context: .
+ dockerfile: Dockerfile
+ container_name: api
+ environment:
+ XDEBUG_MODE: debug
+ volumes:
+ - ./src:/var/www
+ - ./php/dev.ini:/usr/local/etc/php/conf.d/local.ini
+ # Map saml files to the php-fpm server so it has access to them as well
+ - ./simplesamlphp-1.19.0-rc1:/var/simplesamlphp
+ - ./simple-saml/cert:/var/simplesamlphp/cert
+ - ./simple-saml/config:/var/simplesamlphp/config
+ - ./simple-saml/metadata:/var/simplesamlphp/metadata
+ - ./simplesamlphp-1.19.0-rc1:/var/simplesamlphp-idp
+ - ./simple-saml-idp/cert:/var/simplesamlphp-idp/cert
+ - ./simple-saml-idp/config:/var/simplesamlphp-idp/config
+ - ./simple-saml-idp/metadata:/var/simplesamlphp-idp/metadata
+ ports:
+ # For xdebug
+ - "9003:9003"
+ logging:
+ options:
+ max-size: "10m"
+ max-file: "3"
+ networks:
+ - doorcode
diff --git a/nginx.Dockerfile b/nginx.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..0db8cd6e4373c59192a66c7d1521d046286cc23a
--- /dev/null
+++ b/nginx.Dockerfile
@@ -0,0 +1,11 @@
+FROM nginx:1.19.5-alpine
+
+WORKDIR /var/www
+
+COPY src/ ${WORKDIR}
+COPY simplesamlphp-1.19.0-rc1/ ${WORKDIR}../simplesamlphp
+COPY simple-saml/ ${WORKDIR}../simplesamlphp
+COPY nginx/conf.d/prod.conf:/etc/nginx/conf.d/prod.conf
+COPY nginx/dhparam/ /run/dhparam
+
+CMD ["/docker-entrypoint.sh"]
diff --git a/prod.Dockerfile b/prod.Dockerfile
index 629bfbe61fbc5f62c321dc7f42f0973aaabe6d94..9d7f2a0d9530c5c521a65b38164a408f102656bd 100644
--- a/prod.Dockerfile
+++ b/prod.Dockerfile
@@ -1,3 +1,11 @@
+FROM node:15.4-alpine as frontend_assets
+
+WORKDIR /app
+
+COPY --chown=www:www src/backend .
+RUN npm install && npm run prod
+
+
FROM php:8.0-fpm-alpine
ENV PROJECT_DIR /var/www
@@ -11,10 +19,7 @@ RUN apk update && apk add --no-cache \
postgresql-dev \
zlib-dev \
libpng-dev \
- shadow \
- bash \
- bash-completion \
- vim
+ shadow
# Install PHP Extensions
RUN docker-php-ext-install pdo \
@@ -31,12 +36,24 @@ RUN groupadd -g 1000 www && \
useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory permissions
-COPY --chown=root:www src/ ${WORKDIR}
+COPY bin/docker-entrypoint.sh /
+COPY --chown=www:www src/ ${WORKDIR}
+COPY --chown=www:www simplesamlphp-1.19.0-rc1/ ${WORKDIR}../simplesamlphp
+COPY --chown=www:www --from=frontend_assets /app/public ${WORKDIR}/backend/
COPY php/prod.ini /usr/local/etc/php/conf.d/local.ini
# Change current user to www
USER www
-# Expose port 9000 and start php-fpm server
-EXPOSE 9000
-CMD ["php-fpm"]
+# exampleauth is not used for production
+RUN rm -rf backend/cov backend/vendor ../simplesamlphp/modules/exampleauth/enable backend/tests frontend install-dev.sh \
+ && cd backend \
+ && composer.phar install --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader \
+ && chmod 0755 /docker-entrypoint.sh \
+ && php artisan apidoc:generate \
+ && php artisan optimize \
+ && php artisan config:cache \
+ && php artisan route:cache \
+ && php artisan view:cache
+
+CMD ["/docker-entrypoint.sh"]
diff --git a/src/backend/public/css/app.css b/src/backend/public/css/app.css
deleted file mode 100644
index 6fb512c2b37fd1ca5b0c135df9ab25e067bdabc7..0000000000000000000000000000000000000000
--- a/src/backend/public/css/app.css
+++ /dev/null
@@ -1,12659 +0,0 @@
-@charset "UTF-8";
-
-/*!
- * Bootstrap v4.5.0 (https://getbootstrap.com/)
- * Copyright 2011-2020 The Bootstrap Authors
- * Copyright 2011-2020 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-:root {
- --blue: #007bff;
- --indigo: #6610f2;
- --purple: #6f42c1;
- --pink: #e83e8c;
- --red: #dc3545;
- --orange: #fd7e14;
- --yellow: #ffc107;
- --green: #28a745;
- --teal: #20c997;
- --cyan: #17a2b8;
- --white: #fff;
- --gray: #6c757d;
- --gray-dark: #343a40;
- --primary: #007bff;
- --secondary: #6c757d;
- --success: #28a745;
- --info: #17a2b8;
- --warning: #ffc107;
- --danger: #dc3545;
- --light: #f8f9fa;
- --dark: #343a40;
- --breakpoint-xs: 0;
- --breakpoint-sm: 576px;
- --breakpoint-md: 768px;
- --breakpoint-lg: 992px;
- --breakpoint-xl: 1200px;
- --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-}
-
-*,
-*::before,
-*::after {
- box-sizing: border-box;
-}
-
-html {
- font-family: sans-serif;
- line-height: 1.15;
- -webkit-text-size-adjust: 100%;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-article,
-aside,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-nav,
-section {
- display: block;
-}
-
-body {
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #212529;
- text-align: left;
- background-color: #fff;
-}
-
-[tabindex="-1"]:focus:not(:focus-visible) {
- outline: 0 !important;
-}
-
-hr {
- box-sizing: content-box;
- height: 0;
- overflow: visible;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin-top: 0;
- margin-bottom: 0.5rem;
-}
-
-p {
- margin-top: 0;
- margin-bottom: 1rem;
-}
-
-abbr[title],
-abbr[data-original-title] {
- text-decoration: underline;
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- cursor: help;
- border-bottom: 0;
- -webkit-text-decoration-skip-ink: none;
- text-decoration-skip-ink: none;
-}
-
-address {
- margin-bottom: 1rem;
- font-style: normal;
- line-height: inherit;
-}
-
-ol,
-ul,
-dl {
- margin-top: 0;
- margin-bottom: 1rem;
-}
-
-ol ol,
-ul ul,
-ol ul,
-ul ol {
- margin-bottom: 0;
-}
-
-dt {
- font-weight: 700;
-}
-
-dd {
- margin-bottom: 0.5rem;
- margin-left: 0;
-}
-
-blockquote {
- margin: 0 0 1rem;
-}
-
-b,
-strong {
- font-weight: bolder;
-}
-
-small {
- font-size: 80%;
-}
-
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-a {
- color: #007bff;
- text-decoration: none;
- background-color: transparent;
-}
-
-a:hover {
- color: #0056b3;
- text-decoration: underline;
-}
-
-a:not([href]) {
- color: inherit;
- text-decoration: none;
-}
-
-a:not([href]):hover {
- color: inherit;
- text-decoration: none;
-}
-
-pre,
-code,
-kbd,
-samp {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
- font-size: 1em;
-}
-
-pre {
- margin-top: 0;
- margin-bottom: 1rem;
- overflow: auto;
- -ms-overflow-style: scrollbar;
-}
-
-figure {
- margin: 0 0 1rem;
-}
-
-img {
- vertical-align: middle;
- border-style: none;
-}
-
-svg {
- overflow: hidden;
- vertical-align: middle;
-}
-
-table {
- border-collapse: collapse;
-}
-
-caption {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
- color: #6c757d;
- text-align: left;
- caption-side: bottom;
-}
-
-th {
- text-align: inherit;
-}
-
-label {
- display: inline-block;
- margin-bottom: 0.5rem;
-}
-
-button {
- border-radius: 0;
-}
-
-button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color;
-}
-
-input,
-button,
-select,
-optgroup,
-textarea {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-
-button,
-input {
- overflow: visible;
-}
-
-button,
-select {
- text-transform: none;
-}
-
-[role=button] {
- cursor: pointer;
-}
-
-select {
- word-wrap: normal;
-}
-
-button,
-[type=button],
-[type=reset],
-[type=submit] {
- -webkit-appearance: button;
-}
-
-button:not(:disabled),
-[type=button]:not(:disabled),
-[type=reset]:not(:disabled),
-[type=submit]:not(:disabled) {
- cursor: pointer;
-}
-
-button::-moz-focus-inner,
-[type=button]::-moz-focus-inner,
-[type=reset]::-moz-focus-inner,
-[type=submit]::-moz-focus-inner {
- padding: 0;
- border-style: none;
-}
-
-input[type=radio],
-input[type=checkbox] {
- box-sizing: border-box;
- padding: 0;
-}
-
-textarea {
- overflow: auto;
- resize: vertical;
-}
-
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0;
-}
-
-legend {
- display: block;
- width: 100%;
- max-width: 100%;
- padding: 0;
- margin-bottom: 0.5rem;
- font-size: 1.5rem;
- line-height: inherit;
- color: inherit;
- white-space: normal;
-}
-
-progress {
- vertical-align: baseline;
-}
-
-[type=number]::-webkit-inner-spin-button,
-[type=number]::-webkit-outer-spin-button {
- height: auto;
-}
-
-[type=search] {
- outline-offset: -2px;
- -webkit-appearance: none;
-}
-
-[type=search]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-::-webkit-file-upload-button {
- font: inherit;
- -webkit-appearance: button;
-}
-
-output {
- display: inline-block;
-}
-
-summary {
- display: list-item;
- cursor: pointer;
-}
-
-template {
- display: none;
-}
-
-[hidden] {
- display: none !important;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- margin-bottom: 0.5rem;
- font-weight: 500;
- line-height: 1.2;
-}
-
-h1,
-.h1 {
- font-size: 2.5rem;
-}
-
-h2,
-.h2 {
- font-size: 2rem;
-}
-
-h3,
-.h3 {
- font-size: 1.75rem;
-}
-
-h4,
-.h4 {
- font-size: 1.5rem;
-}
-
-h5,
-.h5 {
- font-size: 1.25rem;
-}
-
-h6,
-.h6 {
- font-size: 1rem;
-}
-
-.lead {
- font-size: 1.25rem;
- font-weight: 300;
-}
-
-.display-1 {
- font-size: 6rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-.display-2 {
- font-size: 5.5rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-.display-3 {
- font-size: 4.5rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-.display-4 {
- font-size: 3.5rem;
- font-weight: 300;
- line-height: 1.2;
-}
-
-hr {
- margin-top: 1rem;
- margin-bottom: 1rem;
- border: 0;
- border-top: 1px solid rgba(0, 0, 0, 0.1);
-}
-
-small,
-.small {
- font-size: 80%;
- font-weight: 400;
-}
-
-mark,
-.mark {
- padding: 0.2em;
- background-color: #fcf8e3;
-}
-
-.list-unstyled {
- padding-left: 0;
- list-style: none;
-}
-
-.list-inline {
- padding-left: 0;
- list-style: none;
-}
-
-.list-inline-item {
- display: inline-block;
-}
-
-.list-inline-item:not(:last-child) {
- margin-right: 0.5rem;
-}
-
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-
-.blockquote {
- margin-bottom: 1rem;
- font-size: 1.25rem;
-}
-
-.blockquote-footer {
- display: block;
- font-size: 80%;
- color: #6c757d;
-}
-
-.blockquote-footer::before {
- content: "\2014\A0";
-}
-
-.img-fluid {
- max-width: 100%;
- height: auto;
-}
-
-.img-thumbnail {
- padding: 0.25rem;
- background-color: #fff;
- border: 1px solid #dee2e6;
- border-radius: 0.25rem;
- max-width: 100%;
- height: auto;
-}
-
-.figure {
- display: inline-block;
-}
-
-.figure-img {
- margin-bottom: 0.5rem;
- line-height: 1;
-}
-
-.figure-caption {
- font-size: 90%;
- color: #6c757d;
-}
-
-code {
- font-size: 87.5%;
- color: #e83e8c;
- word-wrap: break-word;
-}
-
-a > code {
- color: inherit;
-}
-
-kbd {
- padding: 0.2rem 0.4rem;
- font-size: 87.5%;
- color: #fff;
- background-color: #212529;
- border-radius: 0.2rem;
-}
-
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: 700;
-}
-
-pre {
- display: block;
- font-size: 87.5%;
- color: #212529;
-}
-
-pre code {
- font-size: inherit;
- color: inherit;
- word-break: normal;
-}
-
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-
-.container {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-@media (min-width: 576px) {
- .container {
- max-width: 540px;
- }
-}
-
-@media (min-width: 768px) {
- .container {
- max-width: 720px;
- }
-}
-
-@media (min-width: 992px) {
- .container {
- max-width: 960px;
- }
-}
-
-@media (min-width: 1200px) {
- .container {
- max-width: 1140px;
- }
-}
-
-.container-fluid,
-.container-xl,
-.container-lg,
-.container-md,
-.container-sm {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto;
-}
-
-@media (min-width: 576px) {
- .container-sm,
- .container {
- max-width: 540px;
- }
-}
-
-@media (min-width: 768px) {
- .container-md,
- .container-sm,
- .container {
- max-width: 720px;
- }
-}
-
-@media (min-width: 992px) {
- .container-lg,
- .container-md,
- .container-sm,
- .container {
- max-width: 960px;
- }
-}
-
-@media (min-width: 1200px) {
- .container-xl,
- .container-lg,
- .container-md,
- .container-sm,
- .container {
- max-width: 1140px;
- }
-}
-
-.row {
- display: flex;
- flex-wrap: wrap;
- margin-right: -15px;
- margin-left: -15px;
-}
-
-.no-gutters {
- margin-right: 0;
- margin-left: 0;
-}
-
-.no-gutters > .col,
-.no-gutters > [class*=col-] {
- padding-right: 0;
- padding-left: 0;
-}
-
-.col-xl,
-.col-xl-auto,
-.col-xl-12,
-.col-xl-11,
-.col-xl-10,
-.col-xl-9,
-.col-xl-8,
-.col-xl-7,
-.col-xl-6,
-.col-xl-5,
-.col-xl-4,
-.col-xl-3,
-.col-xl-2,
-.col-xl-1,
-.col-lg,
-.col-lg-auto,
-.col-lg-12,
-.col-lg-11,
-.col-lg-10,
-.col-lg-9,
-.col-lg-8,
-.col-lg-7,
-.col-lg-6,
-.col-lg-5,
-.col-lg-4,
-.col-lg-3,
-.col-lg-2,
-.col-lg-1,
-.col-md,
-.col-md-auto,
-.col-md-12,
-.col-md-11,
-.col-md-10,
-.col-md-9,
-.col-md-8,
-.col-md-7,
-.col-md-6,
-.col-md-5,
-.col-md-4,
-.col-md-3,
-.col-md-2,
-.col-md-1,
-.col-sm,
-.col-sm-auto,
-.col-sm-12,
-.col-sm-11,
-.col-sm-10,
-.col-sm-9,
-.col-sm-8,
-.col-sm-7,
-.col-sm-6,
-.col-sm-5,
-.col-sm-4,
-.col-sm-3,
-.col-sm-2,
-.col-sm-1,
-.col,
-.col-auto,
-.col-12,
-.col-11,
-.col-10,
-.col-9,
-.col-8,
-.col-7,
-.col-6,
-.col-5,
-.col-4,
-.col-3,
-.col-2,
-.col-1 {
- position: relative;
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
-}
-
-.col {
- flex-basis: 0;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
-}
-
-.row-cols-1 > * {
- flex: 0 0 100%;
- max-width: 100%;
-}
-
-.row-cols-2 > * {
- flex: 0 0 50%;
- max-width: 50%;
-}
-
-.row-cols-3 > * {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
-}
-
-.row-cols-4 > * {
- flex: 0 0 25%;
- max-width: 25%;
-}
-
-.row-cols-5 > * {
- flex: 0 0 20%;
- max-width: 20%;
-}
-
-.row-cols-6 > * {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
-}
-
-.col-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
-}
-
-.col-1 {
- flex: 0 0 8.3333333333%;
- max-width: 8.3333333333%;
-}
-
-.col-2 {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
-}
-
-.col-3 {
- flex: 0 0 25%;
- max-width: 25%;
-}
-
-.col-4 {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
-}
-
-.col-5 {
- flex: 0 0 41.6666666667%;
- max-width: 41.6666666667%;
-}
-
-.col-6 {
- flex: 0 0 50%;
- max-width: 50%;
-}
-
-.col-7 {
- flex: 0 0 58.3333333333%;
- max-width: 58.3333333333%;
-}
-
-.col-8 {
- flex: 0 0 66.6666666667%;
- max-width: 66.6666666667%;
-}
-
-.col-9 {
- flex: 0 0 75%;
- max-width: 75%;
-}
-
-.col-10 {
- flex: 0 0 83.3333333333%;
- max-width: 83.3333333333%;
-}
-
-.col-11 {
- flex: 0 0 91.6666666667%;
- max-width: 91.6666666667%;
-}
-
-.col-12 {
- flex: 0 0 100%;
- max-width: 100%;
-}
-
-.order-first {
- order: -1;
-}
-
-.order-last {
- order: 13;
-}
-
-.order-0 {
- order: 0;
-}
-
-.order-1 {
- order: 1;
-}
-
-.order-2 {
- order: 2;
-}
-
-.order-3 {
- order: 3;
-}
-
-.order-4 {
- order: 4;
-}
-
-.order-5 {
- order: 5;
-}
-
-.order-6 {
- order: 6;
-}
-
-.order-7 {
- order: 7;
-}
-
-.order-8 {
- order: 8;
-}
-
-.order-9 {
- order: 9;
-}
-
-.order-10 {
- order: 10;
-}
-
-.order-11 {
- order: 11;
-}
-
-.order-12 {
- order: 12;
-}
-
-.offset-1 {
- margin-left: 8.3333333333%;
-}
-
-.offset-2 {
- margin-left: 16.6666666667%;
-}
-
-.offset-3 {
- margin-left: 25%;
-}
-
-.offset-4 {
- margin-left: 33.3333333333%;
-}
-
-.offset-5 {
- margin-left: 41.6666666667%;
-}
-
-.offset-6 {
- margin-left: 50%;
-}
-
-.offset-7 {
- margin-left: 58.3333333333%;
-}
-
-.offset-8 {
- margin-left: 66.6666666667%;
-}
-
-.offset-9 {
- margin-left: 75%;
-}
-
-.offset-10 {
- margin-left: 83.3333333333%;
-}
-
-.offset-11 {
- margin-left: 91.6666666667%;
-}
-
-@media (min-width: 576px) {
- .col-sm {
- flex-basis: 0;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
-
- .row-cols-sm-1 > * {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .row-cols-sm-2 > * {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .row-cols-sm-3 > * {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .row-cols-sm-4 > * {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .row-cols-sm-5 > * {
- flex: 0 0 20%;
- max-width: 20%;
- }
-
- .row-cols-sm-6 > * {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-sm-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
-
- .col-sm-1 {
- flex: 0 0 8.3333333333%;
- max-width: 8.3333333333%;
- }
-
- .col-sm-2 {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-sm-3 {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-sm-4 {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .col-sm-5 {
- flex: 0 0 41.6666666667%;
- max-width: 41.6666666667%;
- }
-
- .col-sm-6 {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-sm-7 {
- flex: 0 0 58.3333333333%;
- max-width: 58.3333333333%;
- }
-
- .col-sm-8 {
- flex: 0 0 66.6666666667%;
- max-width: 66.6666666667%;
- }
-
- .col-sm-9 {
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-sm-10 {
- flex: 0 0 83.3333333333%;
- max-width: 83.3333333333%;
- }
-
- .col-sm-11 {
- flex: 0 0 91.6666666667%;
- max-width: 91.6666666667%;
- }
-
- .col-sm-12 {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-sm-first {
- order: -1;
- }
-
- .order-sm-last {
- order: 13;
- }
-
- .order-sm-0 {
- order: 0;
- }
-
- .order-sm-1 {
- order: 1;
- }
-
- .order-sm-2 {
- order: 2;
- }
-
- .order-sm-3 {
- order: 3;
- }
-
- .order-sm-4 {
- order: 4;
- }
-
- .order-sm-5 {
- order: 5;
- }
-
- .order-sm-6 {
- order: 6;
- }
-
- .order-sm-7 {
- order: 7;
- }
-
- .order-sm-8 {
- order: 8;
- }
-
- .order-sm-9 {
- order: 9;
- }
-
- .order-sm-10 {
- order: 10;
- }
-
- .order-sm-11 {
- order: 11;
- }
-
- .order-sm-12 {
- order: 12;
- }
-
- .offset-sm-0 {
- margin-left: 0;
- }
-
- .offset-sm-1 {
- margin-left: 8.3333333333%;
- }
-
- .offset-sm-2 {
- margin-left: 16.6666666667%;
- }
-
- .offset-sm-3 {
- margin-left: 25%;
- }
-
- .offset-sm-4 {
- margin-left: 33.3333333333%;
- }
-
- .offset-sm-5 {
- margin-left: 41.6666666667%;
- }
-
- .offset-sm-6 {
- margin-left: 50%;
- }
-
- .offset-sm-7 {
- margin-left: 58.3333333333%;
- }
-
- .offset-sm-8 {
- margin-left: 66.6666666667%;
- }
-
- .offset-sm-9 {
- margin-left: 75%;
- }
-
- .offset-sm-10 {
- margin-left: 83.3333333333%;
- }
-
- .offset-sm-11 {
- margin-left: 91.6666666667%;
- }
-}
-
-@media (min-width: 768px) {
- .col-md {
- flex-basis: 0;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
-
- .row-cols-md-1 > * {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .row-cols-md-2 > * {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .row-cols-md-3 > * {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .row-cols-md-4 > * {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .row-cols-md-5 > * {
- flex: 0 0 20%;
- max-width: 20%;
- }
-
- .row-cols-md-6 > * {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-md-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
-
- .col-md-1 {
- flex: 0 0 8.3333333333%;
- max-width: 8.3333333333%;
- }
-
- .col-md-2 {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-md-3 {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-md-4 {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .col-md-5 {
- flex: 0 0 41.6666666667%;
- max-width: 41.6666666667%;
- }
-
- .col-md-6 {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-md-7 {
- flex: 0 0 58.3333333333%;
- max-width: 58.3333333333%;
- }
-
- .col-md-8 {
- flex: 0 0 66.6666666667%;
- max-width: 66.6666666667%;
- }
-
- .col-md-9 {
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-md-10 {
- flex: 0 0 83.3333333333%;
- max-width: 83.3333333333%;
- }
-
- .col-md-11 {
- flex: 0 0 91.6666666667%;
- max-width: 91.6666666667%;
- }
-
- .col-md-12 {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-md-first {
- order: -1;
- }
-
- .order-md-last {
- order: 13;
- }
-
- .order-md-0 {
- order: 0;
- }
-
- .order-md-1 {
- order: 1;
- }
-
- .order-md-2 {
- order: 2;
- }
-
- .order-md-3 {
- order: 3;
- }
-
- .order-md-4 {
- order: 4;
- }
-
- .order-md-5 {
- order: 5;
- }
-
- .order-md-6 {
- order: 6;
- }
-
- .order-md-7 {
- order: 7;
- }
-
- .order-md-8 {
- order: 8;
- }
-
- .order-md-9 {
- order: 9;
- }
-
- .order-md-10 {
- order: 10;
- }
-
- .order-md-11 {
- order: 11;
- }
-
- .order-md-12 {
- order: 12;
- }
-
- .offset-md-0 {
- margin-left: 0;
- }
-
- .offset-md-1 {
- margin-left: 8.3333333333%;
- }
-
- .offset-md-2 {
- margin-left: 16.6666666667%;
- }
-
- .offset-md-3 {
- margin-left: 25%;
- }
-
- .offset-md-4 {
- margin-left: 33.3333333333%;
- }
-
- .offset-md-5 {
- margin-left: 41.6666666667%;
- }
-
- .offset-md-6 {
- margin-left: 50%;
- }
-
- .offset-md-7 {
- margin-left: 58.3333333333%;
- }
-
- .offset-md-8 {
- margin-left: 66.6666666667%;
- }
-
- .offset-md-9 {
- margin-left: 75%;
- }
-
- .offset-md-10 {
- margin-left: 83.3333333333%;
- }
-
- .offset-md-11 {
- margin-left: 91.6666666667%;
- }
-}
-
-@media (min-width: 992px) {
- .col-lg {
- flex-basis: 0;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
-
- .row-cols-lg-1 > * {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .row-cols-lg-2 > * {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .row-cols-lg-3 > * {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .row-cols-lg-4 > * {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .row-cols-lg-5 > * {
- flex: 0 0 20%;
- max-width: 20%;
- }
-
- .row-cols-lg-6 > * {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-lg-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
-
- .col-lg-1 {
- flex: 0 0 8.3333333333%;
- max-width: 8.3333333333%;
- }
-
- .col-lg-2 {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-lg-3 {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-lg-4 {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .col-lg-5 {
- flex: 0 0 41.6666666667%;
- max-width: 41.6666666667%;
- }
-
- .col-lg-6 {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-lg-7 {
- flex: 0 0 58.3333333333%;
- max-width: 58.3333333333%;
- }
-
- .col-lg-8 {
- flex: 0 0 66.6666666667%;
- max-width: 66.6666666667%;
- }
-
- .col-lg-9 {
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-lg-10 {
- flex: 0 0 83.3333333333%;
- max-width: 83.3333333333%;
- }
-
- .col-lg-11 {
- flex: 0 0 91.6666666667%;
- max-width: 91.6666666667%;
- }
-
- .col-lg-12 {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-lg-first {
- order: -1;
- }
-
- .order-lg-last {
- order: 13;
- }
-
- .order-lg-0 {
- order: 0;
- }
-
- .order-lg-1 {
- order: 1;
- }
-
- .order-lg-2 {
- order: 2;
- }
-
- .order-lg-3 {
- order: 3;
- }
-
- .order-lg-4 {
- order: 4;
- }
-
- .order-lg-5 {
- order: 5;
- }
-
- .order-lg-6 {
- order: 6;
- }
-
- .order-lg-7 {
- order: 7;
- }
-
- .order-lg-8 {
- order: 8;
- }
-
- .order-lg-9 {
- order: 9;
- }
-
- .order-lg-10 {
- order: 10;
- }
-
- .order-lg-11 {
- order: 11;
- }
-
- .order-lg-12 {
- order: 12;
- }
-
- .offset-lg-0 {
- margin-left: 0;
- }
-
- .offset-lg-1 {
- margin-left: 8.3333333333%;
- }
-
- .offset-lg-2 {
- margin-left: 16.6666666667%;
- }
-
- .offset-lg-3 {
- margin-left: 25%;
- }
-
- .offset-lg-4 {
- margin-left: 33.3333333333%;
- }
-
- .offset-lg-5 {
- margin-left: 41.6666666667%;
- }
-
- .offset-lg-6 {
- margin-left: 50%;
- }
-
- .offset-lg-7 {
- margin-left: 58.3333333333%;
- }
-
- .offset-lg-8 {
- margin-left: 66.6666666667%;
- }
-
- .offset-lg-9 {
- margin-left: 75%;
- }
-
- .offset-lg-10 {
- margin-left: 83.3333333333%;
- }
-
- .offset-lg-11 {
- margin-left: 91.6666666667%;
- }
-}
-
-@media (min-width: 1200px) {
- .col-xl {
- flex-basis: 0;
- flex-grow: 1;
- min-width: 0;
- max-width: 100%;
- }
-
- .row-cols-xl-1 > * {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .row-cols-xl-2 > * {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .row-cols-xl-3 > * {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .row-cols-xl-4 > * {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .row-cols-xl-5 > * {
- flex: 0 0 20%;
- max-width: 20%;
- }
-
- .row-cols-xl-6 > * {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-xl-auto {
- flex: 0 0 auto;
- width: auto;
- max-width: 100%;
- }
-
- .col-xl-1 {
- flex: 0 0 8.3333333333%;
- max-width: 8.3333333333%;
- }
-
- .col-xl-2 {
- flex: 0 0 16.6666666667%;
- max-width: 16.6666666667%;
- }
-
- .col-xl-3 {
- flex: 0 0 25%;
- max-width: 25%;
- }
-
- .col-xl-4 {
- flex: 0 0 33.3333333333%;
- max-width: 33.3333333333%;
- }
-
- .col-xl-5 {
- flex: 0 0 41.6666666667%;
- max-width: 41.6666666667%;
- }
-
- .col-xl-6 {
- flex: 0 0 50%;
- max-width: 50%;
- }
-
- .col-xl-7 {
- flex: 0 0 58.3333333333%;
- max-width: 58.3333333333%;
- }
-
- .col-xl-8 {
- flex: 0 0 66.6666666667%;
- max-width: 66.6666666667%;
- }
-
- .col-xl-9 {
- flex: 0 0 75%;
- max-width: 75%;
- }
-
- .col-xl-10 {
- flex: 0 0 83.3333333333%;
- max-width: 83.3333333333%;
- }
-
- .col-xl-11 {
- flex: 0 0 91.6666666667%;
- max-width: 91.6666666667%;
- }
-
- .col-xl-12 {
- flex: 0 0 100%;
- max-width: 100%;
- }
-
- .order-xl-first {
- order: -1;
- }
-
- .order-xl-last {
- order: 13;
- }
-
- .order-xl-0 {
- order: 0;
- }
-
- .order-xl-1 {
- order: 1;
- }
-
- .order-xl-2 {
- order: 2;
- }
-
- .order-xl-3 {
- order: 3;
- }
-
- .order-xl-4 {
- order: 4;
- }
-
- .order-xl-5 {
- order: 5;
- }
-
- .order-xl-6 {
- order: 6;
- }
-
- .order-xl-7 {
- order: 7;
- }
-
- .order-xl-8 {
- order: 8;
- }
-
- .order-xl-9 {
- order: 9;
- }
-
- .order-xl-10 {
- order: 10;
- }
-
- .order-xl-11 {
- order: 11;
- }
-
- .order-xl-12 {
- order: 12;
- }
-
- .offset-xl-0 {
- margin-left: 0;
- }
-
- .offset-xl-1 {
- margin-left: 8.3333333333%;
- }
-
- .offset-xl-2 {
- margin-left: 16.6666666667%;
- }
-
- .offset-xl-3 {
- margin-left: 25%;
- }
-
- .offset-xl-4 {
- margin-left: 33.3333333333%;
- }
-
- .offset-xl-5 {
- margin-left: 41.6666666667%;
- }
-
- .offset-xl-6 {
- margin-left: 50%;
- }
-
- .offset-xl-7 {
- margin-left: 58.3333333333%;
- }
-
- .offset-xl-8 {
- margin-left: 66.6666666667%;
- }
-
- .offset-xl-9 {
- margin-left: 75%;
- }
-
- .offset-xl-10 {
- margin-left: 83.3333333333%;
- }
-
- .offset-xl-11 {
- margin-left: 91.6666666667%;
- }
-}
-
-.table {
- width: 100%;
- margin-bottom: 1rem;
- color: #212529;
-}
-
-.table th,
-.table td {
- padding: 0.75rem;
- vertical-align: top;
- border-top: 1px solid #dee2e6;
-}
-
-.table thead th {
- vertical-align: bottom;
- border-bottom: 2px solid #dee2e6;
-}
-
-.table tbody + tbody {
- border-top: 2px solid #dee2e6;
-}
-
-.table-sm th,
-.table-sm td {
- padding: 0.3rem;
-}
-
-.table-bordered {
- border: 1px solid #dee2e6;
-}
-
-.table-bordered th,
-.table-bordered td {
- border: 1px solid #dee2e6;
-}
-
-.table-bordered thead th,
-.table-bordered thead td {
- border-bottom-width: 2px;
-}
-
-.table-borderless th,
-.table-borderless td,
-.table-borderless thead th,
-.table-borderless tbody + tbody {
- border: 0;
-}
-
-.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(0, 0, 0, 0.05);
-}
-
-.table-hover tbody tr:hover {
- color: #212529;
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table-primary,
-.table-primary > th,
-.table-primary > td {
- background-color: #b8daff;
-}
-
-.table-primary th,
-.table-primary td,
-.table-primary thead th,
-.table-primary tbody + tbody {
- border-color: #7abaff;
-}
-
-.table-hover .table-primary:hover {
- background-color: #9fcdff;
-}
-
-.table-hover .table-primary:hover > td,
-.table-hover .table-primary:hover > th {
- background-color: #9fcdff;
-}
-
-.table-secondary,
-.table-secondary > th,
-.table-secondary > td {
- background-color: #d6d8db;
-}
-
-.table-secondary th,
-.table-secondary td,
-.table-secondary thead th,
-.table-secondary tbody + tbody {
- border-color: #b3b7bb;
-}
-
-.table-hover .table-secondary:hover {
- background-color: #c8cbcf;
-}
-
-.table-hover .table-secondary:hover > td,
-.table-hover .table-secondary:hover > th {
- background-color: #c8cbcf;
-}
-
-.table-success,
-.table-success > th,
-.table-success > td {
- background-color: #c3e6cb;
-}
-
-.table-success th,
-.table-success td,
-.table-success thead th,
-.table-success tbody + tbody {
- border-color: #8fd19e;
-}
-
-.table-hover .table-success:hover {
- background-color: #b1dfbb;
-}
-
-.table-hover .table-success:hover > td,
-.table-hover .table-success:hover > th {
- background-color: #b1dfbb;
-}
-
-.table-info,
-.table-info > th,
-.table-info > td {
- background-color: #bee5eb;
-}
-
-.table-info th,
-.table-info td,
-.table-info thead th,
-.table-info tbody + tbody {
- border-color: #86cfda;
-}
-
-.table-hover .table-info:hover {
- background-color: #abdde5;
-}
-
-.table-hover .table-info:hover > td,
-.table-hover .table-info:hover > th {
- background-color: #abdde5;
-}
-
-.table-warning,
-.table-warning > th,
-.table-warning > td {
- background-color: #ffeeba;
-}
-
-.table-warning th,
-.table-warning td,
-.table-warning thead th,
-.table-warning tbody + tbody {
- border-color: #ffdf7e;
-}
-
-.table-hover .table-warning:hover {
- background-color: #ffe8a1;
-}
-
-.table-hover .table-warning:hover > td,
-.table-hover .table-warning:hover > th {
- background-color: #ffe8a1;
-}
-
-.table-danger,
-.table-danger > th,
-.table-danger > td {
- background-color: #f5c6cb;
-}
-
-.table-danger th,
-.table-danger td,
-.table-danger thead th,
-.table-danger tbody + tbody {
- border-color: #ed969e;
-}
-
-.table-hover .table-danger:hover {
- background-color: #f1b0b7;
-}
-
-.table-hover .table-danger:hover > td,
-.table-hover .table-danger:hover > th {
- background-color: #f1b0b7;
-}
-
-.table-light,
-.table-light > th,
-.table-light > td {
- background-color: #fdfdfe;
-}
-
-.table-light th,
-.table-light td,
-.table-light thead th,
-.table-light tbody + tbody {
- border-color: #fbfcfc;
-}
-
-.table-hover .table-light:hover {
- background-color: #ececf6;
-}
-
-.table-hover .table-light:hover > td,
-.table-hover .table-light:hover > th {
- background-color: #ececf6;
-}
-
-.table-dark,
-.table-dark > th,
-.table-dark > td {
- background-color: #c6c8ca;
-}
-
-.table-dark th,
-.table-dark td,
-.table-dark thead th,
-.table-dark tbody + tbody {
- border-color: #95999c;
-}
-
-.table-hover .table-dark:hover {
- background-color: #b9bbbe;
-}
-
-.table-hover .table-dark:hover > td,
-.table-hover .table-dark:hover > th {
- background-color: #b9bbbe;
-}
-
-.table-active,
-.table-active > th,
-.table-active > td {
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table-hover .table-active:hover {
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table-hover .table-active:hover > td,
-.table-hover .table-active:hover > th {
- background-color: rgba(0, 0, 0, 0.075);
-}
-
-.table .thead-dark th {
- color: #fff;
- background-color: #343a40;
- border-color: #454d55;
-}
-
-.table .thead-light th {
- color: #495057;
- background-color: #e9ecef;
- border-color: #dee2e6;
-}
-
-.table-dark {
- color: #fff;
- background-color: #343a40;
-}
-
-.table-dark th,
-.table-dark td,
-.table-dark thead th {
- border-color: #454d55;
-}
-
-.table-dark.table-bordered {
- border: 0;
-}
-
-.table-dark.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(255, 255, 255, 0.05);
-}
-
-.table-dark.table-hover tbody tr:hover {
- color: #fff;
- background-color: rgba(255, 255, 255, 0.075);
-}
-
-@media (max-width: 575.98px) {
- .table-responsive-sm {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- }
-
- .table-responsive-sm > .table-bordered {
- border: 0;
- }
-}
-
-@media (max-width: 767.98px) {
- .table-responsive-md {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- }
-
- .table-responsive-md > .table-bordered {
- border: 0;
- }
-}
-
-@media (max-width: 991.98px) {
- .table-responsive-lg {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- }
-
- .table-responsive-lg > .table-bordered {
- border: 0;
- }
-}
-
-@media (max-width: 1199.98px) {
- .table-responsive-xl {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- }
-
- .table-responsive-xl > .table-bordered {
- border: 0;
- }
-}
-
-.table-responsive {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
-}
-
-.table-responsive > .table-bordered {
- border: 0;
-}
-
-.form-control {
- display: block;
- width: 100%;
- height: calc(1.5em + 0.75rem + 2px);
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .form-control {
- transition: none;
- }
-}
-
-.form-control::-ms-expand {
- background-color: transparent;
- border: 0;
-}
-
-.form-control:-moz-focusring {
- color: transparent;
- text-shadow: 0 0 0 #495057;
-}
-
-.form-control:focus {
- color: #495057;
- background-color: #fff;
- border-color: #80bdff;
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.form-control::-moz-placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control:-ms-input-placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control::-ms-input-placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control::placeholder {
- color: #6c757d;
- opacity: 1;
-}
-
-.form-control:disabled,
-.form-control[readonly] {
- background-color: #e9ecef;
- opacity: 1;
-}
-
-input[type=date].form-control,
-input[type=time].form-control,
-input[type=datetime-local].form-control,
-input[type=month].form-control {
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-select.form-control:focus::-ms-value {
- color: #495057;
- background-color: #fff;
-}
-
-.form-control-file,
-.form-control-range {
- display: block;
- width: 100%;
-}
-
-.col-form-label {
- padding-top: calc(0.375rem + 1px);
- padding-bottom: calc(0.375rem + 1px);
- margin-bottom: 0;
- font-size: inherit;
- line-height: 1.5;
-}
-
-.col-form-label-lg {
- padding-top: calc(0.5rem + 1px);
- padding-bottom: calc(0.5rem + 1px);
- font-size: 1.25rem;
- line-height: 1.5;
-}
-
-.col-form-label-sm {
- padding-top: calc(0.25rem + 1px);
- padding-bottom: calc(0.25rem + 1px);
- font-size: 0.875rem;
- line-height: 1.5;
-}
-
-.form-control-plaintext {
- display: block;
- width: 100%;
- padding: 0.375rem 0;
- margin-bottom: 0;
- font-size: 1rem;
- line-height: 1.5;
- color: #212529;
- background-color: transparent;
- border: solid transparent;
- border-width: 1px 0;
-}
-
-.form-control-plaintext.form-control-sm,
-.form-control-plaintext.form-control-lg {
- padding-right: 0;
- padding-left: 0;
-}
-
-.form-control-sm {
- height: calc(1.5em + 0.5rem + 2px);
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
- border-radius: 0.2rem;
-}
-
-.form-control-lg {
- height: calc(1.5em + 1rem + 2px);
- padding: 0.5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: 0.3rem;
-}
-
-select.form-control[size],
-select.form-control[multiple] {
- height: auto;
-}
-
-textarea.form-control {
- height: auto;
-}
-
-.form-group {
- margin-bottom: 1rem;
-}
-
-.form-text {
- display: block;
- margin-top: 0.25rem;
-}
-
-.form-row {
- display: flex;
- flex-wrap: wrap;
- margin-right: -5px;
- margin-left: -5px;
-}
-
-.form-row > .col,
-.form-row > [class*=col-] {
- padding-right: 5px;
- padding-left: 5px;
-}
-
-.form-check {
- position: relative;
- display: block;
- padding-left: 1.25rem;
-}
-
-.form-check-input {
- position: absolute;
- margin-top: 0.3rem;
- margin-left: -1.25rem;
-}
-
-.form-check-input[disabled] ~ .form-check-label,
-.form-check-input:disabled ~ .form-check-label {
- color: #6c757d;
-}
-
-.form-check-label {
- margin-bottom: 0;
-}
-
-.form-check-inline {
- display: inline-flex;
- align-items: center;
- padding-left: 0;
- margin-right: 0.75rem;
-}
-
-.form-check-inline .form-check-input {
- position: static;
- margin-top: 0;
- margin-right: 0.3125rem;
- margin-left: 0;
-}
-
-.valid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #28a745;
-}
-
-.valid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: 0.25rem 0.5rem;
- margin-top: 0.1rem;
- font-size: 0.875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(40, 167, 69, 0.9);
- border-radius: 0.25rem;
-}
-
-.was-validated :valid ~ .valid-feedback,
-.was-validated :valid ~ .valid-tooltip,
-.is-valid ~ .valid-feedback,
-.is-valid ~ .valid-tooltip {
- display: block;
-}
-
-.was-validated .form-control:valid,
-.form-control.is-valid {
- border-color: #28a745;
- padding-right: calc(1.5em + 0.75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
- background-repeat: no-repeat;
- background-position: right calc(0.375em + 0.1875rem) center;
- background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
-}
-
-.was-validated .form-control:valid:focus,
-.form-control.is-valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
-}
-
-.was-validated textarea.form-control:valid,
-textarea.form-control.is-valid {
- padding-right: calc(1.5em + 0.75rem);
- background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
-}
-
-.was-validated .custom-select:valid,
-.custom-select.is-valid {
- border-color: #28a745;
- padding-right: calc(0.75em + 2.3125rem);
- background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
-}
-
-.was-validated .custom-select:valid:focus,
-.custom-select.is-valid:focus {
- border-color: #28a745;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
-}
-
-.was-validated .form-check-input:valid ~ .form-check-label,
-.form-check-input.is-valid ~ .form-check-label {
- color: #28a745;
-}
-
-.was-validated .form-check-input:valid ~ .valid-feedback,
-.was-validated .form-check-input:valid ~ .valid-tooltip,
-.form-check-input.is-valid ~ .valid-feedback,
-.form-check-input.is-valid ~ .valid-tooltip {
- display: block;
-}
-
-.was-validated .custom-control-input:valid ~ .custom-control-label,
-.custom-control-input.is-valid ~ .custom-control-label {
- color: #28a745;
-}
-
-.was-validated .custom-control-input:valid ~ .custom-control-label::before,
-.custom-control-input.is-valid ~ .custom-control-label::before {
- border-color: #28a745;
-}
-
-.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,
-.custom-control-input.is-valid:checked ~ .custom-control-label::before {
- border-color: #34ce57;
- background-color: #34ce57;
-}
-
-.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,
-.custom-control-input.is-valid:focus ~ .custom-control-label::before {
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
-}
-
-.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,
-.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {
- border-color: #28a745;
-}
-
-.was-validated .custom-file-input:valid ~ .custom-file-label,
-.custom-file-input.is-valid ~ .custom-file-label {
- border-color: #28a745;
-}
-
-.was-validated .custom-file-input:valid:focus ~ .custom-file-label,
-.custom-file-input.is-valid:focus ~ .custom-file-label {
- border-color: #28a745;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
-}
-
-.invalid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #dc3545;
-}
-
-.invalid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: 0.25rem 0.5rem;
- margin-top: 0.1rem;
- font-size: 0.875rem;
- line-height: 1.5;
- color: #fff;
- background-color: rgba(220, 53, 69, 0.9);
- border-radius: 0.25rem;
-}
-
-.was-validated :invalid ~ .invalid-feedback,
-.was-validated :invalid ~ .invalid-tooltip,
-.is-invalid ~ .invalid-feedback,
-.is-invalid ~ .invalid-tooltip {
- display: block;
-}
-
-.was-validated .form-control:invalid,
-.form-control.is-invalid {
- border-color: #dc3545;
- padding-right: calc(1.5em + 0.75rem);
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
- background-repeat: no-repeat;
- background-position: right calc(0.375em + 0.1875rem) center;
- background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
-}
-
-.was-validated .form-control:invalid:focus,
-.form-control.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
-}
-
-.was-validated textarea.form-control:invalid,
-textarea.form-control.is-invalid {
- padding-right: calc(1.5em + 0.75rem);
- background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
-}
-
-.was-validated .custom-select:invalid,
-.custom-select.is-invalid {
- border-color: #dc3545;
- padding-right: calc(0.75em + 2.3125rem);
- background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
-}
-
-.was-validated .custom-select:invalid:focus,
-.custom-select.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
-}
-
-.was-validated .form-check-input:invalid ~ .form-check-label,
-.form-check-input.is-invalid ~ .form-check-label {
- color: #dc3545;
-}
-
-.was-validated .form-check-input:invalid ~ .invalid-feedback,
-.was-validated .form-check-input:invalid ~ .invalid-tooltip,
-.form-check-input.is-invalid ~ .invalid-feedback,
-.form-check-input.is-invalid ~ .invalid-tooltip {
- display: block;
-}
-
-.was-validated .custom-control-input:invalid ~ .custom-control-label,
-.custom-control-input.is-invalid ~ .custom-control-label {
- color: #dc3545;
-}
-
-.was-validated .custom-control-input:invalid ~ .custom-control-label::before,
-.custom-control-input.is-invalid ~ .custom-control-label::before {
- border-color: #dc3545;
-}
-
-.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,
-.custom-control-input.is-invalid:checked ~ .custom-control-label::before {
- border-color: #e4606d;
- background-color: #e4606d;
-}
-
-.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,
-.custom-control-input.is-invalid:focus ~ .custom-control-label::before {
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
-}
-
-.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,
-.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {
- border-color: #dc3545;
-}
-
-.was-validated .custom-file-input:invalid ~ .custom-file-label,
-.custom-file-input.is-invalid ~ .custom-file-label {
- border-color: #dc3545;
-}
-
-.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,
-.custom-file-input.is-invalid:focus ~ .custom-file-label {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
-}
-
-.form-inline {
- display: flex;
- flex-flow: row wrap;
- align-items: center;
-}
-
-.form-inline .form-check {
- width: 100%;
-}
-
-@media (min-width: 576px) {
- .form-inline label {
- display: flex;
- align-items: center;
- justify-content: center;
- margin-bottom: 0;
- }
-
- .form-inline .form-group {
- display: flex;
- flex: 0 0 auto;
- flex-flow: row wrap;
- align-items: center;
- margin-bottom: 0;
- }
-
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
-
- .form-inline .form-control-plaintext {
- display: inline-block;
- }
-
- .form-inline .input-group,
- .form-inline .custom-select {
- width: auto;
- }
-
- .form-inline .form-check {
- display: flex;
- align-items: center;
- justify-content: center;
- width: auto;
- padding-left: 0;
- }
-
- .form-inline .form-check-input {
- position: relative;
- flex-shrink: 0;
- margin-top: 0;
- margin-right: 0.25rem;
- margin-left: 0;
- }
-
- .form-inline .custom-control {
- align-items: center;
- justify-content: center;
- }
-
- .form-inline .custom-control-label {
- margin-bottom: 0;
- }
-}
-
-.btn {
- display: inline-block;
- font-weight: 400;
- color: #212529;
- text-align: center;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- line-height: 1.5;
- border-radius: 0.25rem;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .btn {
- transition: none;
- }
-}
-
-.btn:hover {
- color: #212529;
- text-decoration: none;
-}
-
-.btn:focus,
-.btn.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.btn.disabled,
-.btn:disabled {
- opacity: 0.65;
-}
-
-.btn:not(:disabled):not(.disabled) {
- cursor: pointer;
-}
-
-a.btn.disabled,
-fieldset:disabled a.btn {
- pointer-events: none;
-}
-
-.btn-primary {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-primary:hover {
- color: #fff;
- background-color: #0069d9;
- border-color: #0062cc;
-}
-
-.btn-primary:focus,
-.btn-primary.focus {
- color: #fff;
- background-color: #0069d9;
- border-color: #0062cc;
- box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
-}
-
-.btn-primary.disabled,
-.btn-primary:disabled {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-primary:not(:disabled):not(.disabled):active,
-.btn-primary:not(:disabled):not(.disabled).active,
-.show > .btn-primary.dropdown-toggle {
- color: #fff;
- background-color: #0062cc;
- border-color: #005cbf;
-}
-
-.btn-primary:not(:disabled):not(.disabled):active:focus,
-.btn-primary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);
-}
-
-.btn-secondary {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-secondary:hover {
- color: #fff;
- background-color: #5a6268;
- border-color: #545b62;
-}
-
-.btn-secondary:focus,
-.btn-secondary.focus {
- color: #fff;
- background-color: #5a6268;
- border-color: #545b62;
- box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);
-}
-
-.btn-secondary.disabled,
-.btn-secondary:disabled {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-secondary:not(:disabled):not(.disabled):active,
-.btn-secondary:not(:disabled):not(.disabled).active,
-.show > .btn-secondary.dropdown-toggle {
- color: #fff;
- background-color: #545b62;
- border-color: #4e555b;
-}
-
-.btn-secondary:not(:disabled):not(.disabled):active:focus,
-.btn-secondary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);
-}
-
-.btn-success {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-success:hover {
- color: #fff;
- background-color: #218838;
- border-color: #1e7e34;
-}
-
-.btn-success:focus,
-.btn-success.focus {
- color: #fff;
- background-color: #218838;
- border-color: #1e7e34;
- box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);
-}
-
-.btn-success.disabled,
-.btn-success:disabled {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-success:not(:disabled):not(.disabled):active,
-.btn-success:not(:disabled):not(.disabled).active,
-.show > .btn-success.dropdown-toggle {
- color: #fff;
- background-color: #1e7e34;
- border-color: #1c7430;
-}
-
-.btn-success:not(:disabled):not(.disabled):active:focus,
-.btn-success:not(:disabled):not(.disabled).active:focus,
-.show > .btn-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);
-}
-
-.btn-info {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-info:hover {
- color: #fff;
- background-color: #138496;
- border-color: #117a8b;
-}
-
-.btn-info:focus,
-.btn-info.focus {
- color: #fff;
- background-color: #138496;
- border-color: #117a8b;
- box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);
-}
-
-.btn-info.disabled,
-.btn-info:disabled {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-info:not(:disabled):not(.disabled):active,
-.btn-info:not(:disabled):not(.disabled).active,
-.show > .btn-info.dropdown-toggle {
- color: #fff;
- background-color: #117a8b;
- border-color: #10707f;
-}
-
-.btn-info:not(:disabled):not(.disabled):active:focus,
-.btn-info:not(:disabled):not(.disabled).active:focus,
-.show > .btn-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);
-}
-
-.btn-warning {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-warning:hover {
- color: #212529;
- background-color: #e0a800;
- border-color: #d39e00;
-}
-
-.btn-warning:focus,
-.btn-warning.focus {
- color: #212529;
- background-color: #e0a800;
- border-color: #d39e00;
- box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);
-}
-
-.btn-warning.disabled,
-.btn-warning:disabled {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-warning:not(:disabled):not(.disabled):active,
-.btn-warning:not(:disabled):not(.disabled).active,
-.show > .btn-warning.dropdown-toggle {
- color: #212529;
- background-color: #d39e00;
- border-color: #c69500;
-}
-
-.btn-warning:not(:disabled):not(.disabled):active:focus,
-.btn-warning:not(:disabled):not(.disabled).active:focus,
-.show > .btn-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);
-}
-
-.btn-danger {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-danger:hover {
- color: #fff;
- background-color: #c82333;
- border-color: #bd2130;
-}
-
-.btn-danger:focus,
-.btn-danger.focus {
- color: #fff;
- background-color: #c82333;
- border-color: #bd2130;
- box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);
-}
-
-.btn-danger.disabled,
-.btn-danger:disabled {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-danger:not(:disabled):not(.disabled):active,
-.btn-danger:not(:disabled):not(.disabled).active,
-.show > .btn-danger.dropdown-toggle {
- color: #fff;
- background-color: #bd2130;
- border-color: #b21f2d;
-}
-
-.btn-danger:not(:disabled):not(.disabled):active:focus,
-.btn-danger:not(:disabled):not(.disabled).active:focus,
-.show > .btn-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);
-}
-
-.btn-light {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-light:hover {
- color: #212529;
- background-color: #e2e6ea;
- border-color: #dae0e5;
-}
-
-.btn-light:focus,
-.btn-light.focus {
- color: #212529;
- background-color: #e2e6ea;
- border-color: #dae0e5;
- box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);
-}
-
-.btn-light.disabled,
-.btn-light:disabled {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-light:not(:disabled):not(.disabled):active,
-.btn-light:not(:disabled):not(.disabled).active,
-.show > .btn-light.dropdown-toggle {
- color: #212529;
- background-color: #dae0e5;
- border-color: #d3d9df;
-}
-
-.btn-light:not(:disabled):not(.disabled):active:focus,
-.btn-light:not(:disabled):not(.disabled).active:focus,
-.show > .btn-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);
-}
-
-.btn-dark {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-dark:hover {
- color: #fff;
- background-color: #23272b;
- border-color: #1d2124;
-}
-
-.btn-dark:focus,
-.btn-dark.focus {
- color: #fff;
- background-color: #23272b;
- border-color: #1d2124;
- box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);
-}
-
-.btn-dark.disabled,
-.btn-dark:disabled {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-dark:not(:disabled):not(.disabled):active,
-.btn-dark:not(:disabled):not(.disabled).active,
-.show > .btn-dark.dropdown-toggle {
- color: #fff;
- background-color: #1d2124;
- border-color: #171a1d;
-}
-
-.btn-dark:not(:disabled):not(.disabled):active:focus,
-.btn-dark:not(:disabled):not(.disabled).active:focus,
-.show > .btn-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);
-}
-
-.btn-outline-primary {
- color: #007bff;
- border-color: #007bff;
-}
-
-.btn-outline-primary:hover {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-outline-primary:focus,
-.btn-outline-primary.focus {
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.btn-outline-primary.disabled,
-.btn-outline-primary:disabled {
- color: #007bff;
- background-color: transparent;
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled):active,
-.btn-outline-primary:not(:disabled):not(.disabled).active,
-.show > .btn-outline-primary.dropdown-toggle {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.btn-outline-primary:not(:disabled):not(.disabled):active:focus,
-.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-primary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.btn-outline-secondary {
- color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-outline-secondary:hover {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-outline-secondary:focus,
-.btn-outline-secondary.focus {
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.btn-outline-secondary.disabled,
-.btn-outline-secondary:disabled {
- color: #6c757d;
- background-color: transparent;
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled):active,
-.btn-outline-secondary:not(:disabled):not(.disabled).active,
-.show > .btn-outline-secondary.dropdown-toggle {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d;
-}
-
-.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,
-.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-secondary.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.btn-outline-success {
- color: #28a745;
- border-color: #28a745;
-}
-
-.btn-outline-success:hover {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-outline-success:focus,
-.btn-outline-success.focus {
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.btn-outline-success.disabled,
-.btn-outline-success:disabled {
- color: #28a745;
- background-color: transparent;
-}
-
-.btn-outline-success:not(:disabled):not(.disabled):active,
-.btn-outline-success:not(:disabled):not(.disabled).active,
-.show > .btn-outline-success.dropdown-toggle {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745;
-}
-
-.btn-outline-success:not(:disabled):not(.disabled):active:focus,
-.btn-outline-success:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-success.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.btn-outline-info {
- color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-outline-info:hover {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-outline-info:focus,
-.btn-outline-info.focus {
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.btn-outline-info.disabled,
-.btn-outline-info:disabled {
- color: #17a2b8;
- background-color: transparent;
-}
-
-.btn-outline-info:not(:disabled):not(.disabled):active,
-.btn-outline-info:not(:disabled):not(.disabled).active,
-.show > .btn-outline-info.dropdown-toggle {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8;
-}
-
-.btn-outline-info:not(:disabled):not(.disabled):active:focus,
-.btn-outline-info:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-info.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.btn-outline-warning {
- color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-outline-warning:hover {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-outline-warning:focus,
-.btn-outline-warning.focus {
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.btn-outline-warning.disabled,
-.btn-outline-warning:disabled {
- color: #ffc107;
- background-color: transparent;
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled):active,
-.btn-outline-warning:not(:disabled):not(.disabled).active,
-.show > .btn-outline-warning.dropdown-toggle {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107;
-}
-
-.btn-outline-warning:not(:disabled):not(.disabled):active:focus,
-.btn-outline-warning:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-warning.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.btn-outline-danger {
- color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-outline-danger:hover {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-outline-danger:focus,
-.btn-outline-danger.focus {
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.btn-outline-danger.disabled,
-.btn-outline-danger:disabled {
- color: #dc3545;
- background-color: transparent;
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled):active,
-.btn-outline-danger:not(:disabled):not(.disabled).active,
-.show > .btn-outline-danger.dropdown-toggle {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545;
-}
-
-.btn-outline-danger:not(:disabled):not(.disabled):active:focus,
-.btn-outline-danger:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-danger.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.btn-outline-light {
- color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-outline-light:hover {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-outline-light:focus,
-.btn-outline-light.focus {
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.btn-outline-light.disabled,
-.btn-outline-light:disabled {
- color: #f8f9fa;
- background-color: transparent;
-}
-
-.btn-outline-light:not(:disabled):not(.disabled):active,
-.btn-outline-light:not(:disabled):not(.disabled).active,
-.show > .btn-outline-light.dropdown-toggle {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa;
-}
-
-.btn-outline-light:not(:disabled):not(.disabled):active:focus,
-.btn-outline-light:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-light.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.btn-outline-dark {
- color: #343a40;
- border-color: #343a40;
-}
-
-.btn-outline-dark:hover {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-outline-dark:focus,
-.btn-outline-dark.focus {
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.btn-outline-dark.disabled,
-.btn-outline-dark:disabled {
- color: #343a40;
- background-color: transparent;
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled):active,
-.btn-outline-dark:not(:disabled):not(.disabled).active,
-.show > .btn-outline-dark.dropdown-toggle {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40;
-}
-
-.btn-outline-dark:not(:disabled):not(.disabled):active:focus,
-.btn-outline-dark:not(:disabled):not(.disabled).active:focus,
-.show > .btn-outline-dark.dropdown-toggle:focus {
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.btn-link {
- font-weight: 400;
- color: #007bff;
- text-decoration: none;
-}
-
-.btn-link:hover {
- color: #0056b3;
- text-decoration: underline;
-}
-
-.btn-link:focus,
-.btn-link.focus {
- text-decoration: underline;
-}
-
-.btn-link:disabled,
-.btn-link.disabled {
- color: #6c757d;
- pointer-events: none;
-}
-
-.btn-lg,
-.btn-group-lg > .btn {
- padding: 0.5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: 0.3rem;
-}
-
-.btn-sm,
-.btn-group-sm > .btn {
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
- border-radius: 0.2rem;
-}
-
-.btn-block {
- display: block;
- width: 100%;
-}
-
-.btn-block + .btn-block {
- margin-top: 0.5rem;
-}
-
-input[type=submit].btn-block,
-input[type=reset].btn-block,
-input[type=button].btn-block {
- width: 100%;
-}
-
-.fade {
- transition: opacity 0.15s linear;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .fade {
- transition: none;
- }
-}
-
-.fade:not(.show) {
- opacity: 0;
-}
-
-.collapse:not(.show) {
- display: none;
-}
-
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- transition: height 0.35s ease;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .collapsing {
- transition: none;
- }
-}
-
-.dropup,
-.dropright,
-.dropdown,
-.dropleft {
- position: relative;
-}
-
-.dropdown-toggle {
- white-space: nowrap;
-}
-
-.dropdown-toggle::after {
- display: inline-block;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid;
- border-right: 0.3em solid transparent;
- border-bottom: 0;
- border-left: 0.3em solid transparent;
-}
-
-.dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 10rem;
- padding: 0.5rem 0;
- margin: 0.125rem 0 0;
- font-size: 1rem;
- color: #212529;
- text-align: left;
- list-style: none;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.15);
- border-radius: 0.25rem;
-}
-
-.dropdown-menu-left {
- right: auto;
- left: 0;
-}
-
-.dropdown-menu-right {
- right: 0;
- left: auto;
-}
-
-@media (min-width: 576px) {
- .dropdown-menu-sm-left {
- right: auto;
- left: 0;
- }
-
- .dropdown-menu-sm-right {
- right: 0;
- left: auto;
- }
-}
-
-@media (min-width: 768px) {
- .dropdown-menu-md-left {
- right: auto;
- left: 0;
- }
-
- .dropdown-menu-md-right {
- right: 0;
- left: auto;
- }
-}
-
-@media (min-width: 992px) {
- .dropdown-menu-lg-left {
- right: auto;
- left: 0;
- }
-
- .dropdown-menu-lg-right {
- right: 0;
- left: auto;
- }
-}
-
-@media (min-width: 1200px) {
- .dropdown-menu-xl-left {
- right: auto;
- left: 0;
- }
-
- .dropdown-menu-xl-right {
- right: 0;
- left: auto;
- }
-}
-
-.dropup .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-top: 0;
- margin-bottom: 0.125rem;
-}
-
-.dropup .dropdown-toggle::after {
- display: inline-block;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0;
- border-right: 0.3em solid transparent;
- border-bottom: 0.3em solid;
- border-left: 0.3em solid transparent;
-}
-
-.dropup .dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropright .dropdown-menu {
- top: 0;
- right: auto;
- left: 100%;
- margin-top: 0;
- margin-left: 0.125rem;
-}
-
-.dropright .dropdown-toggle::after {
- display: inline-block;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid transparent;
- border-right: 0;
- border-bottom: 0.3em solid transparent;
- border-left: 0.3em solid;
-}
-
-.dropright .dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropright .dropdown-toggle::after {
- vertical-align: 0;
-}
-
-.dropleft .dropdown-menu {
- top: 0;
- right: 100%;
- left: auto;
- margin-top: 0;
- margin-right: 0.125rem;
-}
-
-.dropleft .dropdown-toggle::after {
- display: inline-block;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
-}
-
-.dropleft .dropdown-toggle::after {
- display: none;
-}
-
-.dropleft .dropdown-toggle::before {
- display: inline-block;
- margin-right: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid transparent;
- border-right: 0.3em solid;
- border-bottom: 0.3em solid transparent;
-}
-
-.dropleft .dropdown-toggle:empty::after {
- margin-left: 0;
-}
-
-.dropleft .dropdown-toggle::before {
- vertical-align: 0;
-}
-
-.dropdown-menu[x-placement^=top],
-.dropdown-menu[x-placement^=right],
-.dropdown-menu[x-placement^=bottom],
-.dropdown-menu[x-placement^=left] {
- right: auto;
- bottom: auto;
-}
-
-.dropdown-divider {
- height: 0;
- margin: 0.5rem 0;
- overflow: hidden;
- border-top: 1px solid #e9ecef;
-}
-
-.dropdown-item {
- display: block;
- width: 100%;
- padding: 0.25rem 1.5rem;
- clear: both;
- font-weight: 400;
- color: #212529;
- text-align: inherit;
- white-space: nowrap;
- background-color: transparent;
- border: 0;
-}
-
-.dropdown-item:hover,
-.dropdown-item:focus {
- color: #16181b;
- text-decoration: none;
- background-color: #f8f9fa;
-}
-
-.dropdown-item.active,
-.dropdown-item:active {
- color: #fff;
- text-decoration: none;
- background-color: #007bff;
-}
-
-.dropdown-item.disabled,
-.dropdown-item:disabled {
- color: #6c757d;
- pointer-events: none;
- background-color: transparent;
-}
-
-.dropdown-menu.show {
- display: block;
-}
-
-.dropdown-header {
- display: block;
- padding: 0.5rem 1.5rem;
- margin-bottom: 0;
- font-size: 0.875rem;
- color: #6c757d;
- white-space: nowrap;
-}
-
-.dropdown-item-text {
- display: block;
- padding: 0.25rem 1.5rem;
- color: #212529;
-}
-
-.btn-group,
-.btn-group-vertical {
- position: relative;
- display: inline-flex;
- vertical-align: middle;
-}
-
-.btn-group > .btn,
-.btn-group-vertical > .btn {
- position: relative;
- flex: 1 1 auto;
-}
-
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover {
- z-index: 1;
-}
-
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn:focus,
-.btn-group-vertical > .btn:active,
-.btn-group-vertical > .btn.active {
- z-index: 1;
-}
-
-.btn-toolbar {
- display: flex;
- flex-wrap: wrap;
- justify-content: flex-start;
-}
-
-.btn-toolbar .input-group {
- width: auto;
-}
-
-.btn-group > .btn:not(:first-child),
-.btn-group > .btn-group:not(:first-child) {
- margin-left: -1px;
-}
-
-.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
-.btn-group > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.btn-group > .btn:not(:first-child),
-.btn-group > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.dropdown-toggle-split {
- padding-right: 0.5625rem;
- padding-left: 0.5625rem;
-}
-
-.dropdown-toggle-split::after,
-.dropup .dropdown-toggle-split::after,
-.dropright .dropdown-toggle-split::after {
- margin-left: 0;
-}
-
-.dropleft .dropdown-toggle-split::before {
- margin-right: 0;
-}
-
-.btn-sm + .dropdown-toggle-split,
-.btn-group-sm > .btn + .dropdown-toggle-split {
- padding-right: 0.375rem;
- padding-left: 0.375rem;
-}
-
-.btn-lg + .dropdown-toggle-split,
-.btn-group-lg > .btn + .dropdown-toggle-split {
- padding-right: 0.75rem;
- padding-left: 0.75rem;
-}
-
-.btn-group-vertical {
- flex-direction: column;
- align-items: flex-start;
- justify-content: center;
-}
-
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group {
- width: 100%;
-}
-
-.btn-group-vertical > .btn:not(:first-child),
-.btn-group-vertical > .btn-group:not(:first-child) {
- margin-top: -1px;
-}
-
-.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
-.btn-group-vertical > .btn-group:not(:last-child) > .btn {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.btn-group-vertical > .btn:not(:first-child),
-.btn-group-vertical > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.btn-group-toggle > .btn,
-.btn-group-toggle > .btn-group > .btn {
- margin-bottom: 0;
-}
-
-.btn-group-toggle > .btn input[type=radio],
-.btn-group-toggle > .btn input[type=checkbox],
-.btn-group-toggle > .btn-group > .btn input[type=radio],
-.btn-group-toggle > .btn-group > .btn input[type=checkbox] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-
-.input-group {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- align-items: stretch;
- width: 100%;
-}
-
-.input-group > .form-control,
-.input-group > .form-control-plaintext,
-.input-group > .custom-select,
-.input-group > .custom-file {
- position: relative;
- flex: 1 1 auto;
- width: 1%;
- min-width: 0;
- margin-bottom: 0;
-}
-
-.input-group > .form-control + .form-control,
-.input-group > .form-control + .custom-select,
-.input-group > .form-control + .custom-file,
-.input-group > .form-control-plaintext + .form-control,
-.input-group > .form-control-plaintext + .custom-select,
-.input-group > .form-control-plaintext + .custom-file,
-.input-group > .custom-select + .form-control,
-.input-group > .custom-select + .custom-select,
-.input-group > .custom-select + .custom-file,
-.input-group > .custom-file + .form-control,
-.input-group > .custom-file + .custom-select,
-.input-group > .custom-file + .custom-file {
- margin-left: -1px;
-}
-
-.input-group > .form-control:focus,
-.input-group > .custom-select:focus,
-.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {
- z-index: 3;
-}
-
-.input-group > .custom-file .custom-file-input:focus {
- z-index: 4;
-}
-
-.input-group > .form-control:not(:last-child),
-.input-group > .custom-select:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.input-group > .form-control:not(:first-child),
-.input-group > .custom-select:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.input-group > .custom-file {
- display: flex;
- align-items: center;
-}
-
-.input-group > .custom-file:not(:last-child) .custom-file-label,
-.input-group > .custom-file:not(:last-child) .custom-file-label::after {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.input-group > .custom-file:not(:first-child) .custom-file-label {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.input-group-prepend,
-.input-group-append {
- display: flex;
-}
-
-.input-group-prepend .btn,
-.input-group-append .btn {
- position: relative;
- z-index: 2;
-}
-
-.input-group-prepend .btn:focus,
-.input-group-append .btn:focus {
- z-index: 3;
-}
-
-.input-group-prepend .btn + .btn,
-.input-group-prepend .btn + .input-group-text,
-.input-group-prepend .input-group-text + .input-group-text,
-.input-group-prepend .input-group-text + .btn,
-.input-group-append .btn + .btn,
-.input-group-append .btn + .input-group-text,
-.input-group-append .input-group-text + .input-group-text,
-.input-group-append .input-group-text + .btn {
- margin-left: -1px;
-}
-
-.input-group-prepend {
- margin-right: -1px;
-}
-
-.input-group-append {
- margin-left: -1px;
-}
-
-.input-group-text {
- display: flex;
- align-items: center;
- padding: 0.375rem 0.75rem;
- margin-bottom: 0;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- text-align: center;
- white-space: nowrap;
- background-color: #e9ecef;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
-}
-
-.input-group-text input[type=radio],
-.input-group-text input[type=checkbox] {
- margin-top: 0;
-}
-
-.input-group-lg > .form-control:not(textarea),
-.input-group-lg > .custom-select {
- height: calc(1.5em + 1rem + 2px);
-}
-
-.input-group-lg > .form-control,
-.input-group-lg > .custom-select,
-.input-group-lg > .input-group-prepend > .input-group-text,
-.input-group-lg > .input-group-append > .input-group-text,
-.input-group-lg > .input-group-prepend > .btn,
-.input-group-lg > .input-group-append > .btn {
- padding: 0.5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: 0.3rem;
-}
-
-.input-group-sm > .form-control:not(textarea),
-.input-group-sm > .custom-select {
- height: calc(1.5em + 0.5rem + 2px);
-}
-
-.input-group-sm > .form-control,
-.input-group-sm > .custom-select,
-.input-group-sm > .input-group-prepend > .input-group-text,
-.input-group-sm > .input-group-append > .input-group-text,
-.input-group-sm > .input-group-prepend > .btn,
-.input-group-sm > .input-group-append > .btn {
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
- border-radius: 0.2rem;
-}
-
-.input-group-lg > .custom-select,
-.input-group-sm > .custom-select {
- padding-right: 1.75rem;
-}
-
-.input-group > .input-group-prepend > .btn,
-.input-group > .input-group-prepend > .input-group-text,
-.input-group > .input-group-append:not(:last-child) > .btn,
-.input-group > .input-group-append:not(:last-child) > .input-group-text,
-.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
-.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.input-group > .input-group-append > .btn,
-.input-group > .input-group-append > .input-group-text,
-.input-group > .input-group-prepend:not(:first-child) > .btn,
-.input-group > .input-group-prepend:not(:first-child) > .input-group-text,
-.input-group > .input-group-prepend:first-child > .btn:not(:first-child),
-.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.custom-control {
- position: relative;
- display: block;
- min-height: 1.5rem;
- padding-left: 1.5rem;
-}
-
-.custom-control-inline {
- display: inline-flex;
- margin-right: 1rem;
-}
-
-.custom-control-input {
- position: absolute;
- left: 0;
- z-index: -1;
- width: 1rem;
- height: 1.25rem;
- opacity: 0;
-}
-
-.custom-control-input:checked ~ .custom-control-label::before {
- color: #fff;
- border-color: #007bff;
- background-color: #007bff;
-}
-
-.custom-control-input:focus ~ .custom-control-label::before {
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {
- border-color: #80bdff;
-}
-
-.custom-control-input:not(:disabled):active ~ .custom-control-label::before {
- color: #fff;
- background-color: #b3d7ff;
- border-color: #b3d7ff;
-}
-
-.custom-control-input[disabled] ~ .custom-control-label,
-.custom-control-input:disabled ~ .custom-control-label {
- color: #6c757d;
-}
-
-.custom-control-input[disabled] ~ .custom-control-label::before,
-.custom-control-input:disabled ~ .custom-control-label::before {
- background-color: #e9ecef;
-}
-
-.custom-control-label {
- position: relative;
- margin-bottom: 0;
- vertical-align: top;
-}
-
-.custom-control-label::before {
- position: absolute;
- top: 0.25rem;
- left: -1.5rem;
- display: block;
- width: 1rem;
- height: 1rem;
- pointer-events: none;
- content: "";
- background-color: #fff;
- border: #adb5bd solid 1px;
-}
-
-.custom-control-label::after {
- position: absolute;
- top: 0.25rem;
- left: -1.5rem;
- display: block;
- width: 1rem;
- height: 1rem;
- content: "";
- background: no-repeat 50%/50% 50%;
-}
-
-.custom-checkbox .custom-control-label::before {
- border-radius: 0.25rem;
-}
-
-.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e");
-}
-
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {
- border-color: #007bff;
- background-color: #007bff;
-}
-
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e");
-}
-
-.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-
-.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-
-.custom-radio .custom-control-label::before {
- border-radius: 50%;
-}
-
-.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
-}
-
-.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-
-.custom-switch {
- padding-left: 2.25rem;
-}
-
-.custom-switch .custom-control-label::before {
- left: -2.25rem;
- width: 1.75rem;
- pointer-events: all;
- border-radius: 0.5rem;
-}
-
-.custom-switch .custom-control-label::after {
- top: calc(0.25rem + 2px);
- left: calc(-2.25rem + 2px);
- width: calc(1rem - 4px);
- height: calc(1rem - 4px);
- background-color: #adb5bd;
- border-radius: 0.5rem;
- transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .custom-switch .custom-control-label::after {
- transition: none;
- }
-}
-
-.custom-switch .custom-control-input:checked ~ .custom-control-label::after {
- background-color: #fff;
- transform: translateX(0.75rem);
-}
-
-.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5);
-}
-
-.custom-select {
- display: inline-block;
- width: 100%;
- height: calc(1.5em + 0.75rem + 2px);
- padding: 0.375rem 1.75rem 0.375rem 0.75rem;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- vertical-align: middle;
- background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-.custom-select:focus {
- border-color: #80bdff;
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-select:focus::-ms-value {
- color: #495057;
- background-color: #fff;
-}
-
-.custom-select[multiple],
-.custom-select[size]:not([size="1"]) {
- height: auto;
- padding-right: 0.75rem;
- background-image: none;
-}
-
-.custom-select:disabled {
- color: #6c757d;
- background-color: #e9ecef;
-}
-
-.custom-select::-ms-expand {
- display: none;
-}
-
-.custom-select:-moz-focusring {
- color: transparent;
- text-shadow: 0 0 0 #495057;
-}
-
-.custom-select-sm {
- height: calc(1.5em + 0.5rem + 2px);
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- padding-left: 0.5rem;
- font-size: 0.875rem;
-}
-
-.custom-select-lg {
- height: calc(1.5em + 1rem + 2px);
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- padding-left: 1rem;
- font-size: 1.25rem;
-}
-
-.custom-file {
- position: relative;
- display: inline-block;
- width: 100%;
- height: calc(1.5em + 0.75rem + 2px);
- margin-bottom: 0;
-}
-
-.custom-file-input {
- position: relative;
- z-index: 2;
- width: 100%;
- height: calc(1.5em + 0.75rem + 2px);
- margin: 0;
- opacity: 0;
-}
-
-.custom-file-input:focus ~ .custom-file-label {
- border-color: #80bdff;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-file-input[disabled] ~ .custom-file-label,
-.custom-file-input:disabled ~ .custom-file-label {
- background-color: #e9ecef;
-}
-
-.custom-file-input:lang(en) ~ .custom-file-label::after {
- content: "Browse";
-}
-
-.custom-file-input ~ .custom-file-label[data-browse]::after {
- content: attr(data-browse);
-}
-
-.custom-file-label {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1;
- height: calc(1.5em + 0.75rem + 2px);
- padding: 0.375rem 0.75rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- background-color: #fff;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
-}
-
-.custom-file-label::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- z-index: 3;
- display: block;
- height: calc(1.5em + 0.75rem);
- padding: 0.375rem 0.75rem;
- line-height: 1.5;
- color: #495057;
- content: "Browse";
- background-color: #e9ecef;
- border-left: inherit;
- border-radius: 0 0.25rem 0.25rem 0;
-}
-
-.custom-range {
- width: 100%;
- height: 1.4rem;
- padding: 0;
- background-color: transparent;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-.custom-range:focus {
- outline: none;
-}
-
-.custom-range:focus::-webkit-slider-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-range:focus::-moz-range-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-range:focus::-ms-thumb {
- box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.custom-range::-moz-focus-outer {
- border: 0;
-}
-
-.custom-range::-webkit-slider-thumb {
- width: 1rem;
- height: 1rem;
- margin-top: -0.25rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- -webkit-appearance: none;
- appearance: none;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .custom-range::-webkit-slider-thumb {
- -webkit-transition: none;
- transition: none;
- }
-}
-
-.custom-range::-webkit-slider-thumb:active {
- background-color: #b3d7ff;
-}
-
-.custom-range::-webkit-slider-runnable-track {
- width: 100%;
- height: 0.5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem;
-}
-
-.custom-range::-moz-range-thumb {
- width: 1rem;
- height: 1rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- -moz-appearance: none;
- appearance: none;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .custom-range::-moz-range-thumb {
- -moz-transition: none;
- transition: none;
- }
-}
-
-.custom-range::-moz-range-thumb:active {
- background-color: #b3d7ff;
-}
-
-.custom-range::-moz-range-track {
- width: 100%;
- height: 0.5rem;
- color: transparent;
- cursor: pointer;
- background-color: #dee2e6;
- border-color: transparent;
- border-radius: 1rem;
-}
-
-.custom-range::-ms-thumb {
- width: 1rem;
- height: 1rem;
- margin-top: 0;
- margin-right: 0.2rem;
- margin-left: 0.2rem;
- background-color: #007bff;
- border: 0;
- border-radius: 1rem;
- -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- appearance: none;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .custom-range::-ms-thumb {
- -ms-transition: none;
- transition: none;
- }
-}
-
-.custom-range::-ms-thumb:active {
- background-color: #b3d7ff;
-}
-
-.custom-range::-ms-track {
- width: 100%;
- height: 0.5rem;
- color: transparent;
- cursor: pointer;
- background-color: transparent;
- border-color: transparent;
- border-width: 0.5rem;
-}
-
-.custom-range::-ms-fill-lower {
- background-color: #dee2e6;
- border-radius: 1rem;
-}
-
-.custom-range::-ms-fill-upper {
- margin-right: 15px;
- background-color: #dee2e6;
- border-radius: 1rem;
-}
-
-.custom-range:disabled::-webkit-slider-thumb {
- background-color: #adb5bd;
-}
-
-.custom-range:disabled::-webkit-slider-runnable-track {
- cursor: default;
-}
-
-.custom-range:disabled::-moz-range-thumb {
- background-color: #adb5bd;
-}
-
-.custom-range:disabled::-moz-range-track {
- cursor: default;
-}
-
-.custom-range:disabled::-ms-thumb {
- background-color: #adb5bd;
-}
-
-.custom-control-label::before,
-.custom-file-label,
-.custom-select {
- transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .custom-control-label::before,
- .custom-file-label,
- .custom-select {
- transition: none;
- }
-}
-
-.nav {
- display: flex;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-
-.nav-link {
- display: block;
- padding: 0.5rem 1rem;
-}
-
-.nav-link:hover,
-.nav-link:focus {
- text-decoration: none;
-}
-
-.nav-link.disabled {
- color: #6c757d;
- pointer-events: none;
- cursor: default;
-}
-
-.nav-tabs {
- border-bottom: 1px solid #dee2e6;
-}
-
-.nav-tabs .nav-item {
- margin-bottom: -1px;
-}
-
-.nav-tabs .nav-link {
- border: 1px solid transparent;
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem;
-}
-
-.nav-tabs .nav-link:hover,
-.nav-tabs .nav-link:focus {
- border-color: #e9ecef #e9ecef #dee2e6;
-}
-
-.nav-tabs .nav-link.disabled {
- color: #6c757d;
- background-color: transparent;
- border-color: transparent;
-}
-
-.nav-tabs .nav-link.active,
-.nav-tabs .nav-item.show .nav-link {
- color: #495057;
- background-color: #fff;
- border-color: #dee2e6 #dee2e6 #fff;
-}
-
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.nav-pills .nav-link {
- border-radius: 0.25rem;
-}
-
-.nav-pills .nav-link.active,
-.nav-pills .show > .nav-link {
- color: #fff;
- background-color: #007bff;
-}
-
-.nav-fill .nav-item {
- flex: 1 1 auto;
- text-align: center;
-}
-
-.nav-justified .nav-item {
- flex-basis: 0;
- flex-grow: 1;
- text-align: center;
-}
-
-.tab-content > .tab-pane {
- display: none;
-}
-
-.tab-content > .active {
- display: block;
-}
-
-.navbar {
- position: relative;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
- padding: 0.5rem 1rem;
-}
-
-.navbar .container,
-.navbar .container-fluid,
-.navbar .container-sm,
-.navbar .container-md,
-.navbar .container-lg,
-.navbar .container-xl {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: space-between;
-}
-
-.navbar-brand {
- display: inline-block;
- padding-top: 0.3125rem;
- padding-bottom: 0.3125rem;
- margin-right: 1rem;
- font-size: 1.25rem;
- line-height: inherit;
- white-space: nowrap;
-}
-
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-
-.navbar-nav {
- display: flex;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none;
-}
-
-.navbar-nav .nav-link {
- padding-right: 0;
- padding-left: 0;
-}
-
-.navbar-nav .dropdown-menu {
- position: static;
- float: none;
-}
-
-.navbar-text {
- display: inline-block;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-
-.navbar-collapse {
- flex-basis: 100%;
- flex-grow: 1;
- align-items: center;
-}
-
-.navbar-toggler {
- padding: 0.25rem 0.75rem;
- font-size: 1.25rem;
- line-height: 1;
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: 0.25rem;
-}
-
-.navbar-toggler:hover,
-.navbar-toggler:focus {
- text-decoration: none;
-}
-
-.navbar-toggler-icon {
- display: inline-block;
- width: 1.5em;
- height: 1.5em;
- vertical-align: middle;
- content: "";
- background: no-repeat center center;
- background-size: 100% 100%;
-}
-
-@media (max-width: 575.98px) {
- .navbar-expand-sm > .container,
- .navbar-expand-sm > .container-fluid,
- .navbar-expand-sm > .container-sm,
- .navbar-expand-sm > .container-md,
- .navbar-expand-sm > .container-lg,
- .navbar-expand-sm > .container-xl {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 576px) {
- .navbar-expand-sm {
- flex-flow: row nowrap;
- justify-content: flex-start;
- }
-
- .navbar-expand-sm .navbar-nav {
- flex-direction: row;
- }
-
- .navbar-expand-sm .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-sm .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-sm > .container,
- .navbar-expand-sm > .container-fluid,
- .navbar-expand-sm > .container-sm,
- .navbar-expand-sm > .container-md,
- .navbar-expand-sm > .container-lg,
- .navbar-expand-sm > .container-xl {
- flex-wrap: nowrap;
- }
-
- .navbar-expand-sm .navbar-collapse {
- display: flex !important;
- flex-basis: auto;
- }
-
- .navbar-expand-sm .navbar-toggler {
- display: none;
- }
-}
-
-@media (max-width: 767.98px) {
- .navbar-expand-md > .container,
- .navbar-expand-md > .container-fluid,
- .navbar-expand-md > .container-sm,
- .navbar-expand-md > .container-md,
- .navbar-expand-md > .container-lg,
- .navbar-expand-md > .container-xl {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 768px) {
- .navbar-expand-md {
- flex-flow: row nowrap;
- justify-content: flex-start;
- }
-
- .navbar-expand-md .navbar-nav {
- flex-direction: row;
- }
-
- .navbar-expand-md .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-md .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-md > .container,
- .navbar-expand-md > .container-fluid,
- .navbar-expand-md > .container-sm,
- .navbar-expand-md > .container-md,
- .navbar-expand-md > .container-lg,
- .navbar-expand-md > .container-xl {
- flex-wrap: nowrap;
- }
-
- .navbar-expand-md .navbar-collapse {
- display: flex !important;
- flex-basis: auto;
- }
-
- .navbar-expand-md .navbar-toggler {
- display: none;
- }
-}
-
-@media (max-width: 991.98px) {
- .navbar-expand-lg > .container,
- .navbar-expand-lg > .container-fluid,
- .navbar-expand-lg > .container-sm,
- .navbar-expand-lg > .container-md,
- .navbar-expand-lg > .container-lg,
- .navbar-expand-lg > .container-xl {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 992px) {
- .navbar-expand-lg {
- flex-flow: row nowrap;
- justify-content: flex-start;
- }
-
- .navbar-expand-lg .navbar-nav {
- flex-direction: row;
- }
-
- .navbar-expand-lg .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-lg .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-lg > .container,
- .navbar-expand-lg > .container-fluid,
- .navbar-expand-lg > .container-sm,
- .navbar-expand-lg > .container-md,
- .navbar-expand-lg > .container-lg,
- .navbar-expand-lg > .container-xl {
- flex-wrap: nowrap;
- }
-
- .navbar-expand-lg .navbar-collapse {
- display: flex !important;
- flex-basis: auto;
- }
-
- .navbar-expand-lg .navbar-toggler {
- display: none;
- }
-}
-
-@media (max-width: 1199.98px) {
- .navbar-expand-xl > .container,
- .navbar-expand-xl > .container-fluid,
- .navbar-expand-xl > .container-sm,
- .navbar-expand-xl > .container-md,
- .navbar-expand-xl > .container-lg,
- .navbar-expand-xl > .container-xl {
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-@media (min-width: 1200px) {
- .navbar-expand-xl {
- flex-flow: row nowrap;
- justify-content: flex-start;
- }
-
- .navbar-expand-xl .navbar-nav {
- flex-direction: row;
- }
-
- .navbar-expand-xl .navbar-nav .dropdown-menu {
- position: absolute;
- }
-
- .navbar-expand-xl .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- }
-
- .navbar-expand-xl > .container,
- .navbar-expand-xl > .container-fluid,
- .navbar-expand-xl > .container-sm,
- .navbar-expand-xl > .container-md,
- .navbar-expand-xl > .container-lg,
- .navbar-expand-xl > .container-xl {
- flex-wrap: nowrap;
- }
-
- .navbar-expand-xl .navbar-collapse {
- display: flex !important;
- flex-basis: auto;
- }
-
- .navbar-expand-xl .navbar-toggler {
- display: none;
- }
-}
-
-.navbar-expand {
- flex-flow: row nowrap;
- justify-content: flex-start;
-}
-
-.navbar-expand > .container,
-.navbar-expand > .container-fluid,
-.navbar-expand > .container-sm,
-.navbar-expand > .container-md,
-.navbar-expand > .container-lg,
-.navbar-expand > .container-xl {
- padding-right: 0;
- padding-left: 0;
-}
-
-.navbar-expand .navbar-nav {
- flex-direction: row;
-}
-
-.navbar-expand .navbar-nav .dropdown-menu {
- position: absolute;
-}
-
-.navbar-expand .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem;
-}
-
-.navbar-expand > .container,
-.navbar-expand > .container-fluid,
-.navbar-expand > .container-sm,
-.navbar-expand > .container-md,
-.navbar-expand > .container-lg,
-.navbar-expand > .container-xl {
- flex-wrap: nowrap;
-}
-
-.navbar-expand .navbar-collapse {
- display: flex !important;
- flex-basis: auto;
-}
-
-.navbar-expand .navbar-toggler {
- display: none;
-}
-
-.navbar-light .navbar-brand {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-brand:hover,
-.navbar-light .navbar-brand:focus {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-nav .nav-link {
- color: rgba(0, 0, 0, 0.5);
-}
-
-.navbar-light .navbar-nav .nav-link:hover,
-.navbar-light .navbar-nav .nav-link:focus {
- color: rgba(0, 0, 0, 0.7);
-}
-
-.navbar-light .navbar-nav .nav-link.disabled {
- color: rgba(0, 0, 0, 0.3);
-}
-
-.navbar-light .navbar-nav .show > .nav-link,
-.navbar-light .navbar-nav .active > .nav-link,
-.navbar-light .navbar-nav .nav-link.show,
-.navbar-light .navbar-nav .nav-link.active {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-toggler {
- color: rgba(0, 0, 0, 0.5);
- border-color: rgba(0, 0, 0, 0.1);
-}
-
-.navbar-light .navbar-toggler-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
-}
-
-.navbar-light .navbar-text {
- color: rgba(0, 0, 0, 0.5);
-}
-
-.navbar-light .navbar-text a {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-light .navbar-text a:hover,
-.navbar-light .navbar-text a:focus {
- color: rgba(0, 0, 0, 0.9);
-}
-
-.navbar-dark .navbar-brand {
- color: #fff;
-}
-
-.navbar-dark .navbar-brand:hover,
-.navbar-dark .navbar-brand:focus {
- color: #fff;
-}
-
-.navbar-dark .navbar-nav .nav-link {
- color: rgba(255, 255, 255, 0.5);
-}
-
-.navbar-dark .navbar-nav .nav-link:hover,
-.navbar-dark .navbar-nav .nav-link:focus {
- color: rgba(255, 255, 255, 0.75);
-}
-
-.navbar-dark .navbar-nav .nav-link.disabled {
- color: rgba(255, 255, 255, 0.25);
-}
-
-.navbar-dark .navbar-nav .show > .nav-link,
-.navbar-dark .navbar-nav .active > .nav-link,
-.navbar-dark .navbar-nav .nav-link.show,
-.navbar-dark .navbar-nav .nav-link.active {
- color: #fff;
-}
-
-.navbar-dark .navbar-toggler {
- color: rgba(255, 255, 255, 0.5);
- border-color: rgba(255, 255, 255, 0.1);
-}
-
-.navbar-dark .navbar-toggler-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
-}
-
-.navbar-dark .navbar-text {
- color: rgba(255, 255, 255, 0.5);
-}
-
-.navbar-dark .navbar-text a {
- color: #fff;
-}
-
-.navbar-dark .navbar-text a:hover,
-.navbar-dark .navbar-text a:focus {
- color: #fff;
-}
-
-.card {
- position: relative;
- display: flex;
- flex-direction: column;
- min-width: 0;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: border-box;
- border: 1px solid rgba(0, 0, 0, 0.125);
- border-radius: 0.25rem;
-}
-
-.card > hr {
- margin-right: 0;
- margin-left: 0;
-}
-
-.card > .list-group {
- border-top: inherit;
- border-bottom: inherit;
-}
-
-.card > .list-group:first-child {
- border-top-width: 0;
- border-top-left-radius: calc(0.25rem - 1px);
- border-top-right-radius: calc(0.25rem - 1px);
-}
-
-.card > .list-group:last-child {
- border-bottom-width: 0;
- border-bottom-right-radius: calc(0.25rem - 1px);
- border-bottom-left-radius: calc(0.25rem - 1px);
-}
-
-.card-body {
- flex: 1 1 auto;
- min-height: 1px;
- padding: 1.25rem;
-}
-
-.card-title {
- margin-bottom: 0.75rem;
-}
-
-.card-subtitle {
- margin-top: -0.375rem;
- margin-bottom: 0;
-}
-
-.card-text:last-child {
- margin-bottom: 0;
-}
-
-.card-link:hover {
- text-decoration: none;
-}
-
-.card-link + .card-link {
- margin-left: 1.25rem;
-}
-
-.card-header {
- padding: 0.75rem 1.25rem;
- margin-bottom: 0;
- background-color: rgba(0, 0, 0, 0.03);
- border-bottom: 1px solid rgba(0, 0, 0, 0.125);
-}
-
-.card-header:first-child {
- border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;
-}
-
-.card-header + .list-group .list-group-item:first-child {
- border-top: 0;
-}
-
-.card-footer {
- padding: 0.75rem 1.25rem;
- background-color: rgba(0, 0, 0, 0.03);
- border-top: 1px solid rgba(0, 0, 0, 0.125);
-}
-
-.card-footer:last-child {
- border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);
-}
-
-.card-header-tabs {
- margin-right: -0.625rem;
- margin-bottom: -0.75rem;
- margin-left: -0.625rem;
- border-bottom: 0;
-}
-
-.card-header-pills {
- margin-right: -0.625rem;
- margin-left: -0.625rem;
-}
-
-.card-img-overlay {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1.25rem;
-}
-
-.card-img,
-.card-img-top,
-.card-img-bottom {
- flex-shrink: 0;
- width: 100%;
-}
-
-.card-img,
-.card-img-top {
- border-top-left-radius: calc(0.25rem - 1px);
- border-top-right-radius: calc(0.25rem - 1px);
-}
-
-.card-img,
-.card-img-bottom {
- border-bottom-right-radius: calc(0.25rem - 1px);
- border-bottom-left-radius: calc(0.25rem - 1px);
-}
-
-.card-deck .card {
- margin-bottom: 15px;
-}
-
-@media (min-width: 576px) {
- .card-deck {
- display: flex;
- flex-flow: row wrap;
- margin-right: -15px;
- margin-left: -15px;
- }
-
- .card-deck .card {
- flex: 1 0 0%;
- margin-right: 15px;
- margin-bottom: 0;
- margin-left: 15px;
- }
-}
-
-.card-group > .card {
- margin-bottom: 15px;
-}
-
-@media (min-width: 576px) {
- .card-group {
- display: flex;
- flex-flow: row wrap;
- }
-
- .card-group > .card {
- flex: 1 0 0%;
- margin-bottom: 0;
- }
-
- .card-group > .card + .card {
- margin-left: 0;
- border-left: 0;
- }
-
- .card-group > .card:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- }
-
- .card-group > .card:not(:last-child) .card-img-top,
- .card-group > .card:not(:last-child) .card-header {
- border-top-right-radius: 0;
- }
-
- .card-group > .card:not(:last-child) .card-img-bottom,
- .card-group > .card:not(:last-child) .card-footer {
- border-bottom-right-radius: 0;
- }
-
- .card-group > .card:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
-
- .card-group > .card:not(:first-child) .card-img-top,
- .card-group > .card:not(:first-child) .card-header {
- border-top-left-radius: 0;
- }
-
- .card-group > .card:not(:first-child) .card-img-bottom,
- .card-group > .card:not(:first-child) .card-footer {
- border-bottom-left-radius: 0;
- }
-}
-
-.card-columns .card {
- margin-bottom: 0.75rem;
-}
-
-@media (min-width: 576px) {
- .card-columns {
- -moz-column-count: 3;
- column-count: 3;
- -moz-column-gap: 1.25rem;
- column-gap: 1.25rem;
- orphans: 1;
- widows: 1;
- }
-
- .card-columns .card {
- display: inline-block;
- width: 100%;
- }
-}
-
-.accordion > .card {
- overflow: hidden;
-}
-
-.accordion > .card:not(:last-of-type) {
- border-bottom: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.accordion > .card:not(:first-of-type) {
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.accordion > .card > .card-header {
- border-radius: 0;
- margin-bottom: -1px;
-}
-
-.breadcrumb {
- display: flex;
- flex-wrap: wrap;
- padding: 0.75rem 1rem;
- margin-bottom: 1rem;
- list-style: none;
- background-color: #e9ecef;
- border-radius: 0.25rem;
-}
-
-.breadcrumb-item {
- display: flex;
-}
-
-.breadcrumb-item + .breadcrumb-item {
- padding-left: 0.5rem;
-}
-
-.breadcrumb-item + .breadcrumb-item::before {
- display: inline-block;
- padding-right: 0.5rem;
- color: #6c757d;
- content: "/";
-}
-
-.breadcrumb-item + .breadcrumb-item:hover::before {
- text-decoration: underline;
-}
-
-.breadcrumb-item + .breadcrumb-item:hover::before {
- text-decoration: none;
-}
-
-.breadcrumb-item.active {
- color: #6c757d;
-}
-
-.pagination {
- display: flex;
- padding-left: 0;
- list-style: none;
- border-radius: 0.25rem;
-}
-
-.page-link {
- position: relative;
- display: block;
- padding: 0.5rem 0.75rem;
- margin-left: -1px;
- line-height: 1.25;
- color: #007bff;
- background-color: #fff;
- border: 1px solid #dee2e6;
-}
-
-.page-link:hover {
- z-index: 2;
- color: #0056b3;
- text-decoration: none;
- background-color: #e9ecef;
- border-color: #dee2e6;
-}
-
-.page-link:focus {
- z-index: 3;
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
-}
-
-.page-item:first-child .page-link {
- margin-left: 0;
- border-top-left-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem;
-}
-
-.page-item:last-child .page-link {
- border-top-right-radius: 0.25rem;
- border-bottom-right-radius: 0.25rem;
-}
-
-.page-item.active .page-link {
- z-index: 3;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.page-item.disabled .page-link {
- color: #6c757d;
- pointer-events: none;
- cursor: auto;
- background-color: #fff;
- border-color: #dee2e6;
-}
-
-.pagination-lg .page-link {
- padding: 0.75rem 1.5rem;
- font-size: 1.25rem;
- line-height: 1.5;
-}
-
-.pagination-lg .page-item:first-child .page-link {
- border-top-left-radius: 0.3rem;
- border-bottom-left-radius: 0.3rem;
-}
-
-.pagination-lg .page-item:last-child .page-link {
- border-top-right-radius: 0.3rem;
- border-bottom-right-radius: 0.3rem;
-}
-
-.pagination-sm .page-link {
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
-}
-
-.pagination-sm .page-item:first-child .page-link {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem;
-}
-
-.pagination-sm .page-item:last-child .page-link {
- border-top-right-radius: 0.2rem;
- border-bottom-right-radius: 0.2rem;
-}
-
-.badge {
- display: inline-block;
- padding: 0.25em 0.4em;
- font-size: 75%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .badge {
- transition: none;
- }
-}
-
-a.badge:hover,
-a.badge:focus {
- text-decoration: none;
-}
-
-.badge:empty {
- display: none;
-}
-
-.btn .badge {
- position: relative;
- top: -1px;
-}
-
-.badge-pill {
- padding-right: 0.6em;
- padding-left: 0.6em;
- border-radius: 10rem;
-}
-
-.badge-primary {
- color: #fff;
- background-color: #007bff;
-}
-
-a.badge-primary:hover,
-a.badge-primary:focus {
- color: #fff;
- background-color: #0062cc;
-}
-
-a.badge-primary:focus,
-a.badge-primary.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
-}
-
-.badge-secondary {
- color: #fff;
- background-color: #6c757d;
-}
-
-a.badge-secondary:hover,
-a.badge-secondary:focus {
- color: #fff;
- background-color: #545b62;
-}
-
-a.badge-secondary:focus,
-a.badge-secondary.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.badge-success {
- color: #fff;
- background-color: #28a745;
-}
-
-a.badge-success:hover,
-a.badge-success:focus {
- color: #fff;
- background-color: #1e7e34;
-}
-
-a.badge-success:focus,
-a.badge-success.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
-}
-
-.badge-info {
- color: #fff;
- background-color: #17a2b8;
-}
-
-a.badge-info:hover,
-a.badge-info:focus {
- color: #fff;
- background-color: #117a8b;
-}
-
-a.badge-info:focus,
-a.badge-info.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
-}
-
-.badge-warning {
- color: #212529;
- background-color: #ffc107;
-}
-
-a.badge-warning:hover,
-a.badge-warning:focus {
- color: #212529;
- background-color: #d39e00;
-}
-
-a.badge-warning:focus,
-a.badge-warning.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
-}
-
-.badge-danger {
- color: #fff;
- background-color: #dc3545;
-}
-
-a.badge-danger:hover,
-a.badge-danger:focus {
- color: #fff;
- background-color: #bd2130;
-}
-
-a.badge-danger:focus,
-a.badge-danger.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
-}
-
-.badge-light {
- color: #212529;
- background-color: #f8f9fa;
-}
-
-a.badge-light:hover,
-a.badge-light:focus {
- color: #212529;
- background-color: #dae0e5;
-}
-
-a.badge-light:focus,
-a.badge-light.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.badge-dark {
- color: #fff;
- background-color: #343a40;
-}
-
-a.badge-dark:hover,
-a.badge-dark:focus {
- color: #fff;
- background-color: #1d2124;
-}
-
-a.badge-dark:focus,
-a.badge-dark.focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.jumbotron {
- padding: 2rem 1rem;
- margin-bottom: 2rem;
- background-color: #e9ecef;
- border-radius: 0.3rem;
-}
-
-@media (min-width: 576px) {
- .jumbotron {
- padding: 4rem 2rem;
- }
-}
-
-.jumbotron-fluid {
- padding-right: 0;
- padding-left: 0;
- border-radius: 0;
-}
-
-.alert {
- position: relative;
- padding: 0.75rem 1.25rem;
- margin-bottom: 1rem;
- border: 1px solid transparent;
- border-radius: 0.25rem;
-}
-
-.alert-heading {
- color: inherit;
-}
-
-.alert-link {
- font-weight: 700;
-}
-
-.alert-dismissible {
- padding-right: 4rem;
-}
-
-.alert-dismissible .close {
- position: absolute;
- top: 0;
- right: 0;
- padding: 0.75rem 1.25rem;
- color: inherit;
-}
-
-.alert-primary {
- color: #004085;
- background-color: #cce5ff;
- border-color: #b8daff;
-}
-
-.alert-primary hr {
- border-top-color: #9fcdff;
-}
-
-.alert-primary .alert-link {
- color: #002752;
-}
-
-.alert-secondary {
- color: #383d41;
- background-color: #e2e3e5;
- border-color: #d6d8db;
-}
-
-.alert-secondary hr {
- border-top-color: #c8cbcf;
-}
-
-.alert-secondary .alert-link {
- color: #202326;
-}
-
-.alert-success {
- color: #155724;
- background-color: #d4edda;
- border-color: #c3e6cb;
-}
-
-.alert-success hr {
- border-top-color: #b1dfbb;
-}
-
-.alert-success .alert-link {
- color: #0b2e13;
-}
-
-.alert-info {
- color: #0c5460;
- background-color: #d1ecf1;
- border-color: #bee5eb;
-}
-
-.alert-info hr {
- border-top-color: #abdde5;
-}
-
-.alert-info .alert-link {
- color: #062c33;
-}
-
-.alert-warning {
- color: #856404;
- background-color: #fff3cd;
- border-color: #ffeeba;
-}
-
-.alert-warning hr {
- border-top-color: #ffe8a1;
-}
-
-.alert-warning .alert-link {
- color: #533f03;
-}
-
-.alert-danger {
- color: #721c24;
- background-color: #f8d7da;
- border-color: #f5c6cb;
-}
-
-.alert-danger hr {
- border-top-color: #f1b0b7;
-}
-
-.alert-danger .alert-link {
- color: #491217;
-}
-
-.alert-light {
- color: #818182;
- background-color: #fefefe;
- border-color: #fdfdfe;
-}
-
-.alert-light hr {
- border-top-color: #ececf6;
-}
-
-.alert-light .alert-link {
- color: #686868;
-}
-
-.alert-dark {
- color: #1b1e21;
- background-color: #d6d8d9;
- border-color: #c6c8ca;
-}
-
-.alert-dark hr {
- border-top-color: #b9bbbe;
-}
-
-.alert-dark .alert-link {
- color: #040505;
-}
-
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0;
- }
-
- to {
- background-position: 0 0;
- }
-}
-
-@keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0;
- }
-
- to {
- background-position: 0 0;
- }
-}
-
-.progress {
- display: flex;
- height: 1rem;
- overflow: hidden;
- line-height: 0;
- font-size: 0.75rem;
- background-color: #e9ecef;
- border-radius: 0.25rem;
-}
-
-.progress-bar {
- display: flex;
- flex-direction: column;
- justify-content: center;
- overflow: hidden;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- background-color: #007bff;
- transition: width 0.6s ease;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .progress-bar {
- transition: none;
- }
-}
-
-.progress-bar-striped {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-size: 1rem 1rem;
-}
-
-.progress-bar-animated {
- -webkit-animation: progress-bar-stripes 1s linear infinite;
- animation: progress-bar-stripes 1s linear infinite;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .progress-bar-animated {
- -webkit-animation: none;
- animation: none;
- }
-}
-
-.media {
- display: flex;
- align-items: flex-start;
-}
-
-.media-body {
- flex: 1;
-}
-
-.list-group {
- display: flex;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- border-radius: 0.25rem;
-}
-
-.list-group-item-action {
- width: 100%;
- color: #495057;
- text-align: inherit;
-}
-
-.list-group-item-action:hover,
-.list-group-item-action:focus {
- z-index: 1;
- color: #495057;
- text-decoration: none;
- background-color: #f8f9fa;
-}
-
-.list-group-item-action:active {
- color: #212529;
- background-color: #e9ecef;
-}
-
-.list-group-item {
- position: relative;
- display: block;
- padding: 0.75rem 1.25rem;
- background-color: #fff;
- border: 1px solid rgba(0, 0, 0, 0.125);
-}
-
-.list-group-item:first-child {
- border-top-left-radius: inherit;
- border-top-right-radius: inherit;
-}
-
-.list-group-item:last-child {
- border-bottom-right-radius: inherit;
- border-bottom-left-radius: inherit;
-}
-
-.list-group-item.disabled,
-.list-group-item:disabled {
- color: #6c757d;
- pointer-events: none;
- background-color: #fff;
-}
-
-.list-group-item.active {
- z-index: 2;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff;
-}
-
-.list-group-item + .list-group-item {
- border-top-width: 0;
-}
-
-.list-group-item + .list-group-item.active {
- margin-top: -1px;
- border-top-width: 1px;
-}
-
-.list-group-horizontal {
- flex-direction: row;
-}
-
-.list-group-horizontal > .list-group-item:first-child {
- border-bottom-left-radius: 0.25rem;
- border-top-right-radius: 0;
-}
-
-.list-group-horizontal > .list-group-item:last-child {
- border-top-right-radius: 0.25rem;
- border-bottom-left-radius: 0;
-}
-
-.list-group-horizontal > .list-group-item.active {
- margin-top: 0;
-}
-
-.list-group-horizontal > .list-group-item + .list-group-item {
- border-top-width: 1px;
- border-left-width: 0;
-}
-
-.list-group-horizontal > .list-group-item + .list-group-item.active {
- margin-left: -1px;
- border-left-width: 1px;
-}
-
-@media (min-width: 576px) {
- .list-group-horizontal-sm {
- flex-direction: row;
- }
-
- .list-group-horizontal-sm > .list-group-item:first-child {
- border-bottom-left-radius: 0.25rem;
- border-top-right-radius: 0;
- }
-
- .list-group-horizontal-sm > .list-group-item:last-child {
- border-top-right-radius: 0.25rem;
- border-bottom-left-radius: 0;
- }
-
- .list-group-horizontal-sm > .list-group-item.active {
- margin-top: 0;
- }
-
- .list-group-horizontal-sm > .list-group-item + .list-group-item {
- border-top-width: 1px;
- border-left-width: 0;
- }
-
- .list-group-horizontal-sm > .list-group-item + .list-group-item.active {
- margin-left: -1px;
- border-left-width: 1px;
- }
-}
-
-@media (min-width: 768px) {
- .list-group-horizontal-md {
- flex-direction: row;
- }
-
- .list-group-horizontal-md > .list-group-item:first-child {
- border-bottom-left-radius: 0.25rem;
- border-top-right-radius: 0;
- }
-
- .list-group-horizontal-md > .list-group-item:last-child {
- border-top-right-radius: 0.25rem;
- border-bottom-left-radius: 0;
- }
-
- .list-group-horizontal-md > .list-group-item.active {
- margin-top: 0;
- }
-
- .list-group-horizontal-md > .list-group-item + .list-group-item {
- border-top-width: 1px;
- border-left-width: 0;
- }
-
- .list-group-horizontal-md > .list-group-item + .list-group-item.active {
- margin-left: -1px;
- border-left-width: 1px;
- }
-}
-
-@media (min-width: 992px) {
- .list-group-horizontal-lg {
- flex-direction: row;
- }
-
- .list-group-horizontal-lg > .list-group-item:first-child {
- border-bottom-left-radius: 0.25rem;
- border-top-right-radius: 0;
- }
-
- .list-group-horizontal-lg > .list-group-item:last-child {
- border-top-right-radius: 0.25rem;
- border-bottom-left-radius: 0;
- }
-
- .list-group-horizontal-lg > .list-group-item.active {
- margin-top: 0;
- }
-
- .list-group-horizontal-lg > .list-group-item + .list-group-item {
- border-top-width: 1px;
- border-left-width: 0;
- }
-
- .list-group-horizontal-lg > .list-group-item + .list-group-item.active {
- margin-left: -1px;
- border-left-width: 1px;
- }
-}
-
-@media (min-width: 1200px) {
- .list-group-horizontal-xl {
- flex-direction: row;
- }
-
- .list-group-horizontal-xl > .list-group-item:first-child {
- border-bottom-left-radius: 0.25rem;
- border-top-right-radius: 0;
- }
-
- .list-group-horizontal-xl > .list-group-item:last-child {
- border-top-right-radius: 0.25rem;
- border-bottom-left-radius: 0;
- }
-
- .list-group-horizontal-xl > .list-group-item.active {
- margin-top: 0;
- }
-
- .list-group-horizontal-xl > .list-group-item + .list-group-item {
- border-top-width: 1px;
- border-left-width: 0;
- }
-
- .list-group-horizontal-xl > .list-group-item + .list-group-item.active {
- margin-left: -1px;
- border-left-width: 1px;
- }
-}
-
-.list-group-flush {
- border-radius: 0;
-}
-
-.list-group-flush > .list-group-item {
- border-width: 0 0 1px;
-}
-
-.list-group-flush > .list-group-item:last-child {
- border-bottom-width: 0;
-}
-
-.list-group-item-primary {
- color: #004085;
- background-color: #b8daff;
-}
-
-.list-group-item-primary.list-group-item-action:hover,
-.list-group-item-primary.list-group-item-action:focus {
- color: #004085;
- background-color: #9fcdff;
-}
-
-.list-group-item-primary.list-group-item-action.active {
- color: #fff;
- background-color: #004085;
- border-color: #004085;
-}
-
-.list-group-item-secondary {
- color: #383d41;
- background-color: #d6d8db;
-}
-
-.list-group-item-secondary.list-group-item-action:hover,
-.list-group-item-secondary.list-group-item-action:focus {
- color: #383d41;
- background-color: #c8cbcf;
-}
-
-.list-group-item-secondary.list-group-item-action.active {
- color: #fff;
- background-color: #383d41;
- border-color: #383d41;
-}
-
-.list-group-item-success {
- color: #155724;
- background-color: #c3e6cb;
-}
-
-.list-group-item-success.list-group-item-action:hover,
-.list-group-item-success.list-group-item-action:focus {
- color: #155724;
- background-color: #b1dfbb;
-}
-
-.list-group-item-success.list-group-item-action.active {
- color: #fff;
- background-color: #155724;
- border-color: #155724;
-}
-
-.list-group-item-info {
- color: #0c5460;
- background-color: #bee5eb;
-}
-
-.list-group-item-info.list-group-item-action:hover,
-.list-group-item-info.list-group-item-action:focus {
- color: #0c5460;
- background-color: #abdde5;
-}
-
-.list-group-item-info.list-group-item-action.active {
- color: #fff;
- background-color: #0c5460;
- border-color: #0c5460;
-}
-
-.list-group-item-warning {
- color: #856404;
- background-color: #ffeeba;
-}
-
-.list-group-item-warning.list-group-item-action:hover,
-.list-group-item-warning.list-group-item-action:focus {
- color: #856404;
- background-color: #ffe8a1;
-}
-
-.list-group-item-warning.list-group-item-action.active {
- color: #fff;
- background-color: #856404;
- border-color: #856404;
-}
-
-.list-group-item-danger {
- color: #721c24;
- background-color: #f5c6cb;
-}
-
-.list-group-item-danger.list-group-item-action:hover,
-.list-group-item-danger.list-group-item-action:focus {
- color: #721c24;
- background-color: #f1b0b7;
-}
-
-.list-group-item-danger.list-group-item-action.active {
- color: #fff;
- background-color: #721c24;
- border-color: #721c24;
-}
-
-.list-group-item-light {
- color: #818182;
- background-color: #fdfdfe;
-}
-
-.list-group-item-light.list-group-item-action:hover,
-.list-group-item-light.list-group-item-action:focus {
- color: #818182;
- background-color: #ececf6;
-}
-
-.list-group-item-light.list-group-item-action.active {
- color: #fff;
- background-color: #818182;
- border-color: #818182;
-}
-
-.list-group-item-dark {
- color: #1b1e21;
- background-color: #c6c8ca;
-}
-
-.list-group-item-dark.list-group-item-action:hover,
-.list-group-item-dark.list-group-item-action:focus {
- color: #1b1e21;
- background-color: #b9bbbe;
-}
-
-.list-group-item-dark.list-group-item-action.active {
- color: #fff;
- background-color: #1b1e21;
- border-color: #1b1e21;
-}
-
-.close {
- float: right;
- font-size: 1.5rem;
- font-weight: 700;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- opacity: 0.5;
-}
-
-.close:hover {
- color: #000;
- text-decoration: none;
-}
-
-.close:not(:disabled):not(.disabled):hover,
-.close:not(:disabled):not(.disabled):focus {
- opacity: 0.75;
-}
-
-button.close {
- padding: 0;
- background-color: transparent;
- border: 0;
-}
-
-a.close.disabled {
- pointer-events: none;
-}
-
-.toast {
- max-width: 350px;
- overflow: hidden;
- font-size: 0.875rem;
- background-color: rgba(255, 255, 255, 0.85);
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.1);
- box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
- -webkit-backdrop-filter: blur(10px);
- backdrop-filter: blur(10px);
- opacity: 0;
- border-radius: 0.25rem;
-}
-
-.toast:not(:last-child) {
- margin-bottom: 0.75rem;
-}
-
-.toast.showing {
- opacity: 1;
-}
-
-.toast.show {
- display: block;
- opacity: 1;
-}
-
-.toast.hide {
- display: none;
-}
-
-.toast-header {
- display: flex;
- align-items: center;
- padding: 0.25rem 0.75rem;
- color: #6c757d;
- background-color: rgba(255, 255, 255, 0.85);
- background-clip: padding-box;
- border-bottom: 1px solid rgba(0, 0, 0, 0.05);
-}
-
-.toast-body {
- padding: 0.75rem;
-}
-
-.modal-open {
- overflow: hidden;
-}
-
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.modal {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 1050;
- display: none;
- width: 100%;
- height: 100%;
- overflow: hidden;
- outline: 0;
-}
-
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 0.5rem;
- pointer-events: none;
-}
-
-.modal.fade .modal-dialog {
- transition: transform 0.3s ease-out;
- transform: translate(0, -50px);
-}
-
-@media (prefers-reduced-motion: reduce) {
- .modal.fade .modal-dialog {
- transition: none;
- }
-}
-
-.modal.show .modal-dialog {
- transform: none;
-}
-
-.modal.modal-static .modal-dialog {
- transform: scale(1.02);
-}
-
-.modal-dialog-scrollable {
- display: flex;
- max-height: calc(100% - 1rem);
-}
-
-.modal-dialog-scrollable .modal-content {
- max-height: calc(100vh - 1rem);
- overflow: hidden;
-}
-
-.modal-dialog-scrollable .modal-header,
-.modal-dialog-scrollable .modal-footer {
- flex-shrink: 0;
-}
-
-.modal-dialog-scrollable .modal-body {
- overflow-y: auto;
-}
-
-.modal-dialog-centered {
- display: flex;
- align-items: center;
- min-height: calc(100% - 1rem);
-}
-
-.modal-dialog-centered::before {
- display: block;
- height: calc(100vh - 1rem);
- height: -webkit-min-content;
- height: -moz-min-content;
- height: min-content;
- content: "";
-}
-
-.modal-dialog-centered.modal-dialog-scrollable {
- flex-direction: column;
- justify-content: center;
- height: 100%;
-}
-
-.modal-dialog-centered.modal-dialog-scrollable .modal-content {
- max-height: none;
-}
-
-.modal-dialog-centered.modal-dialog-scrollable::before {
- content: none;
-}
-
-.modal-content {
- position: relative;
- display: flex;
- flex-direction: column;
- width: 100%;
- pointer-events: auto;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 0.3rem;
- outline: 0;
-}
-
-.modal-backdrop {
- position: fixed;
- top: 0;
- left: 0;
- z-index: 1040;
- width: 100vw;
- height: 100vh;
- background-color: #000;
-}
-
-.modal-backdrop.fade {
- opacity: 0;
-}
-
-.modal-backdrop.show {
- opacity: 0.5;
-}
-
-.modal-header {
- display: flex;
- align-items: flex-start;
- justify-content: space-between;
- padding: 1rem 1rem;
- border-bottom: 1px solid #dee2e6;
- border-top-left-radius: calc(0.3rem - 1px);
- border-top-right-radius: calc(0.3rem - 1px);
-}
-
-.modal-header .close {
- padding: 1rem 1rem;
- margin: -1rem -1rem -1rem auto;
-}
-
-.modal-title {
- margin-bottom: 0;
- line-height: 1.5;
-}
-
-.modal-body {
- position: relative;
- flex: 1 1 auto;
- padding: 1rem;
-}
-
-.modal-footer {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: flex-end;
- padding: 0.75rem;
- border-top: 1px solid #dee2e6;
- border-bottom-right-radius: calc(0.3rem - 1px);
- border-bottom-left-radius: calc(0.3rem - 1px);
-}
-
-.modal-footer > * {
- margin: 0.25rem;
-}
-
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-
-@media (min-width: 576px) {
- .modal-dialog {
- max-width: 500px;
- margin: 1.75rem auto;
- }
-
- .modal-dialog-scrollable {
- max-height: calc(100% - 3.5rem);
- }
-
- .modal-dialog-scrollable .modal-content {
- max-height: calc(100vh - 3.5rem);
- }
-
- .modal-dialog-centered {
- min-height: calc(100% - 3.5rem);
- }
-
- .modal-dialog-centered::before {
- height: calc(100vh - 3.5rem);
- height: -webkit-min-content;
- height: -moz-min-content;
- height: min-content;
- }
-
- .modal-sm {
- max-width: 300px;
- }
-}
-
-@media (min-width: 992px) {
- .modal-lg,
- .modal-xl {
- max-width: 800px;
- }
-}
-
-@media (min-width: 1200px) {
- .modal-xl {
- max-width: 1140px;
- }
-}
-
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-style: normal;
- font-weight: 400;
- line-height: 1.5;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: 0.875rem;
- word-wrap: break-word;
- opacity: 0;
-}
-
-.tooltip.show {
- opacity: 0.9;
-}
-
-.tooltip .arrow {
- position: absolute;
- display: block;
- width: 0.8rem;
- height: 0.4rem;
-}
-
-.tooltip .arrow::before {
- position: absolute;
- content: "";
- border-color: transparent;
- border-style: solid;
-}
-
-.bs-tooltip-top,
-.bs-tooltip-auto[x-placement^=top] {
- padding: 0.4rem 0;
-}
-
-.bs-tooltip-top .arrow,
-.bs-tooltip-auto[x-placement^=top] .arrow {
- bottom: 0;
-}
-
-.bs-tooltip-top .arrow::before,
-.bs-tooltip-auto[x-placement^=top] .arrow::before {
- top: 0;
- border-width: 0.4rem 0.4rem 0;
- border-top-color: #000;
-}
-
-.bs-tooltip-right,
-.bs-tooltip-auto[x-placement^=right] {
- padding: 0 0.4rem;
-}
-
-.bs-tooltip-right .arrow,
-.bs-tooltip-auto[x-placement^=right] .arrow {
- left: 0;
- width: 0.4rem;
- height: 0.8rem;
-}
-
-.bs-tooltip-right .arrow::before,
-.bs-tooltip-auto[x-placement^=right] .arrow::before {
- right: 0;
- border-width: 0.4rem 0.4rem 0.4rem 0;
- border-right-color: #000;
-}
-
-.bs-tooltip-bottom,
-.bs-tooltip-auto[x-placement^=bottom] {
- padding: 0.4rem 0;
-}
-
-.bs-tooltip-bottom .arrow,
-.bs-tooltip-auto[x-placement^=bottom] .arrow {
- top: 0;
-}
-
-.bs-tooltip-bottom .arrow::before,
-.bs-tooltip-auto[x-placement^=bottom] .arrow::before {
- bottom: 0;
- border-width: 0 0.4rem 0.4rem;
- border-bottom-color: #000;
-}
-
-.bs-tooltip-left,
-.bs-tooltip-auto[x-placement^=left] {
- padding: 0 0.4rem;
-}
-
-.bs-tooltip-left .arrow,
-.bs-tooltip-auto[x-placement^=left] .arrow {
- right: 0;
- width: 0.4rem;
- height: 0.8rem;
-}
-
-.bs-tooltip-left .arrow::before,
-.bs-tooltip-auto[x-placement^=left] .arrow::before {
- left: 0;
- border-width: 0.4rem 0 0.4rem 0.4rem;
- border-left-color: #000;
-}
-
-.tooltip-inner {
- max-width: 200px;
- padding: 0.25rem 0.5rem;
- color: #fff;
- text-align: center;
- background-color: #000;
- border-radius: 0.25rem;
-}
-
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: block;
- max-width: 276px;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- font-style: normal;
- font-weight: 400;
- line-height: 1.5;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: 0.875rem;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 0.3rem;
-}
-
-.popover .arrow {
- position: absolute;
- display: block;
- width: 1rem;
- height: 0.5rem;
- margin: 0 0.3rem;
-}
-
-.popover .arrow::before,
-.popover .arrow::after {
- position: absolute;
- display: block;
- content: "";
- border-color: transparent;
- border-style: solid;
-}
-
-.bs-popover-top,
-.bs-popover-auto[x-placement^=top] {
- margin-bottom: 0.5rem;
-}
-
-.bs-popover-top > .arrow,
-.bs-popover-auto[x-placement^=top] > .arrow {
- bottom: calc(-0.5rem - 1px);
-}
-
-.bs-popover-top > .arrow::before,
-.bs-popover-auto[x-placement^=top] > .arrow::before {
- bottom: 0;
- border-width: 0.5rem 0.5rem 0;
- border-top-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-top > .arrow::after,
-.bs-popover-auto[x-placement^=top] > .arrow::after {
- bottom: 1px;
- border-width: 0.5rem 0.5rem 0;
- border-top-color: #fff;
-}
-
-.bs-popover-right,
-.bs-popover-auto[x-placement^=right] {
- margin-left: 0.5rem;
-}
-
-.bs-popover-right > .arrow,
-.bs-popover-auto[x-placement^=right] > .arrow {
- left: calc(-0.5rem - 1px);
- width: 0.5rem;
- height: 1rem;
- margin: 0.3rem 0;
-}
-
-.bs-popover-right > .arrow::before,
-.bs-popover-auto[x-placement^=right] > .arrow::before {
- left: 0;
- border-width: 0.5rem 0.5rem 0.5rem 0;
- border-right-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-right > .arrow::after,
-.bs-popover-auto[x-placement^=right] > .arrow::after {
- left: 1px;
- border-width: 0.5rem 0.5rem 0.5rem 0;
- border-right-color: #fff;
-}
-
-.bs-popover-bottom,
-.bs-popover-auto[x-placement^=bottom] {
- margin-top: 0.5rem;
-}
-
-.bs-popover-bottom > .arrow,
-.bs-popover-auto[x-placement^=bottom] > .arrow {
- top: calc(-0.5rem - 1px);
-}
-
-.bs-popover-bottom > .arrow::before,
-.bs-popover-auto[x-placement^=bottom] > .arrow::before {
- top: 0;
- border-width: 0 0.5rem 0.5rem 0.5rem;
- border-bottom-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-bottom > .arrow::after,
-.bs-popover-auto[x-placement^=bottom] > .arrow::after {
- top: 1px;
- border-width: 0 0.5rem 0.5rem 0.5rem;
- border-bottom-color: #fff;
-}
-
-.bs-popover-bottom .popover-header::before,
-.bs-popover-auto[x-placement^=bottom] .popover-header::before {
- position: absolute;
- top: 0;
- left: 50%;
- display: block;
- width: 1rem;
- margin-left: -0.5rem;
- content: "";
- border-bottom: 1px solid #f7f7f7;
-}
-
-.bs-popover-left,
-.bs-popover-auto[x-placement^=left] {
- margin-right: 0.5rem;
-}
-
-.bs-popover-left > .arrow,
-.bs-popover-auto[x-placement^=left] > .arrow {
- right: calc(-0.5rem - 1px);
- width: 0.5rem;
- height: 1rem;
- margin: 0.3rem 0;
-}
-
-.bs-popover-left > .arrow::before,
-.bs-popover-auto[x-placement^=left] > .arrow::before {
- right: 0;
- border-width: 0.5rem 0 0.5rem 0.5rem;
- border-left-color: rgba(0, 0, 0, 0.25);
-}
-
-.bs-popover-left > .arrow::after,
-.bs-popover-auto[x-placement^=left] > .arrow::after {
- right: 1px;
- border-width: 0.5rem 0 0.5rem 0.5rem;
- border-left-color: #fff;
-}
-
-.popover-header {
- padding: 0.5rem 0.75rem;
- margin-bottom: 0;
- font-size: 1rem;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-top-left-radius: calc(0.3rem - 1px);
- border-top-right-radius: calc(0.3rem - 1px);
-}
-
-.popover-header:empty {
- display: none;
-}
-
-.popover-body {
- padding: 0.5rem 0.75rem;
- color: #212529;
-}
-
-.carousel {
- position: relative;
-}
-
-.carousel.pointer-event {
- touch-action: pan-y;
-}
-
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden;
-}
-
-.carousel-inner::after {
- display: block;
- clear: both;
- content: "";
-}
-
-.carousel-item {
- position: relative;
- display: none;
- float: left;
- width: 100%;
- margin-right: -100%;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- transition: transform 0.6s ease-in-out;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .carousel-item {
- transition: none;
- }
-}
-
-.carousel-item.active,
-.carousel-item-next,
-.carousel-item-prev {
- display: block;
-}
-
-.carousel-item-next:not(.carousel-item-left),
-.active.carousel-item-right {
- transform: translateX(100%);
-}
-
-.carousel-item-prev:not(.carousel-item-right),
-.active.carousel-item-left {
- transform: translateX(-100%);
-}
-
-.carousel-fade .carousel-item {
- opacity: 0;
- transition-property: opacity;
- transform: none;
-}
-
-.carousel-fade .carousel-item.active,
-.carousel-fade .carousel-item-next.carousel-item-left,
-.carousel-fade .carousel-item-prev.carousel-item-right {
- z-index: 1;
- opacity: 1;
-}
-
-.carousel-fade .active.carousel-item-left,
-.carousel-fade .active.carousel-item-right {
- z-index: 0;
- opacity: 0;
- transition: opacity 0s 0.6s;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .carousel-fade .active.carousel-item-left,
- .carousel-fade .active.carousel-item-right {
- transition: none;
- }
-}
-
-.carousel-control-prev,
-.carousel-control-next {
- position: absolute;
- top: 0;
- bottom: 0;
- z-index: 1;
- display: flex;
- align-items: center;
- justify-content: center;
- width: 15%;
- color: #fff;
- text-align: center;
- opacity: 0.5;
- transition: opacity 0.15s ease;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .carousel-control-prev,
- .carousel-control-next {
- transition: none;
- }
-}
-
-.carousel-control-prev:hover,
-.carousel-control-prev:focus,
-.carousel-control-next:hover,
-.carousel-control-next:focus {
- color: #fff;
- text-decoration: none;
- outline: 0;
- opacity: 0.9;
-}
-
-.carousel-control-prev {
- left: 0;
-}
-
-.carousel-control-next {
- right: 0;
-}
-
-.carousel-control-prev-icon,
-.carousel-control-next-icon {
- display: inline-block;
- width: 20px;
- height: 20px;
- background: no-repeat 50%/100% 100%;
-}
-
-.carousel-control-prev-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e");
-}
-
-.carousel-control-next-icon {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e");
-}
-
-.carousel-indicators {
- position: absolute;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 15;
- display: flex;
- justify-content: center;
- padding-left: 0;
- margin-right: 15%;
- margin-left: 15%;
- list-style: none;
-}
-
-.carousel-indicators li {
- box-sizing: content-box;
- flex: 0 1 auto;
- width: 30px;
- height: 3px;
- margin-right: 3px;
- margin-left: 3px;
- text-indent: -999px;
- cursor: pointer;
- background-color: #fff;
- background-clip: padding-box;
- border-top: 10px solid transparent;
- border-bottom: 10px solid transparent;
- opacity: 0.5;
- transition: opacity 0.6s ease;
-}
-
-@media (prefers-reduced-motion: reduce) {
- .carousel-indicators li {
- transition: none;
- }
-}
-
-.carousel-indicators .active {
- opacity: 1;
-}
-
-.carousel-caption {
- position: absolute;
- right: 15%;
- bottom: 20px;
- left: 15%;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
-}
-
-@-webkit-keyframes spinner-border {
- to {
- transform: rotate(360deg);
- }
-}
-
-@keyframes spinner-border {
- to {
- transform: rotate(360deg);
- }
-}
-
-.spinner-border {
- display: inline-block;
- width: 2rem;
- height: 2rem;
- vertical-align: text-bottom;
- border: 0.25em solid currentColor;
- border-right-color: transparent;
- border-radius: 50%;
- -webkit-animation: spinner-border 0.75s linear infinite;
- animation: spinner-border 0.75s linear infinite;
-}
-
-.spinner-border-sm {
- width: 1rem;
- height: 1rem;
- border-width: 0.2em;
-}
-
-@-webkit-keyframes spinner-grow {
- 0% {
- transform: scale(0);
- }
-
- 50% {
- opacity: 1;
- transform: none;
- }
-}
-
-@keyframes spinner-grow {
- 0% {
- transform: scale(0);
- }
-
- 50% {
- opacity: 1;
- transform: none;
- }
-}
-
-.spinner-grow {
- display: inline-block;
- width: 2rem;
- height: 2rem;
- vertical-align: text-bottom;
- background-color: currentColor;
- border-radius: 50%;
- opacity: 0;
- -webkit-animation: spinner-grow 0.75s linear infinite;
- animation: spinner-grow 0.75s linear infinite;
-}
-
-.spinner-grow-sm {
- width: 1rem;
- height: 1rem;
-}
-
-.align-baseline {
- vertical-align: baseline !important;
-}
-
-.align-top {
- vertical-align: top !important;
-}
-
-.align-middle {
- vertical-align: middle !important;
-}
-
-.align-bottom {
- vertical-align: bottom !important;
-}
-
-.align-text-bottom {
- vertical-align: text-bottom !important;
-}
-
-.align-text-top {
- vertical-align: text-top !important;
-}
-
-.bg-primary {
- background-color: #007bff !important;
-}
-
-a.bg-primary:hover,
-a.bg-primary:focus,
-button.bg-primary:hover,
-button.bg-primary:focus {
- background-color: #0062cc !important;
-}
-
-.bg-secondary {
- background-color: #6c757d !important;
-}
-
-a.bg-secondary:hover,
-a.bg-secondary:focus,
-button.bg-secondary:hover,
-button.bg-secondary:focus {
- background-color: #545b62 !important;
-}
-
-.bg-success {
- background-color: #28a745 !important;
-}
-
-a.bg-success:hover,
-a.bg-success:focus,
-button.bg-success:hover,
-button.bg-success:focus {
- background-color: #1e7e34 !important;
-}
-
-.bg-info {
- background-color: #17a2b8 !important;
-}
-
-a.bg-info:hover,
-a.bg-info:focus,
-button.bg-info:hover,
-button.bg-info:focus {
- background-color: #117a8b !important;
-}
-
-.bg-warning {
- background-color: #ffc107 !important;
-}
-
-a.bg-warning:hover,
-a.bg-warning:focus,
-button.bg-warning:hover,
-button.bg-warning:focus {
- background-color: #d39e00 !important;
-}
-
-.bg-danger {
- background-color: #dc3545 !important;
-}
-
-a.bg-danger:hover,
-a.bg-danger:focus,
-button.bg-danger:hover,
-button.bg-danger:focus {
- background-color: #bd2130 !important;
-}
-
-.bg-light {
- background-color: #f8f9fa !important;
-}
-
-a.bg-light:hover,
-a.bg-light:focus,
-button.bg-light:hover,
-button.bg-light:focus {
- background-color: #dae0e5 !important;
-}
-
-.bg-dark {
- background-color: #343a40 !important;
-}
-
-a.bg-dark:hover,
-a.bg-dark:focus,
-button.bg-dark:hover,
-button.bg-dark:focus {
- background-color: #1d2124 !important;
-}
-
-.bg-white {
- background-color: #fff !important;
-}
-
-.bg-transparent {
- background-color: transparent !important;
-}
-
-.border {
- border: 1px solid #dee2e6 !important;
-}
-
-.border-top {
- border-top: 1px solid #dee2e6 !important;
-}
-
-.border-right {
- border-right: 1px solid #dee2e6 !important;
-}
-
-.border-bottom {
- border-bottom: 1px solid #dee2e6 !important;
-}
-
-.border-left {
- border-left: 1px solid #dee2e6 !important;
-}
-
-.border-0 {
- border: 0 !important;
-}
-
-.border-top-0 {
- border-top: 0 !important;
-}
-
-.border-right-0 {
- border-right: 0 !important;
-}
-
-.border-bottom-0 {
- border-bottom: 0 !important;
-}
-
-.border-left-0 {
- border-left: 0 !important;
-}
-
-.border-primary {
- border-color: #007bff !important;
-}
-
-.border-secondary {
- border-color: #6c757d !important;
-}
-
-.border-success {
- border-color: #28a745 !important;
-}
-
-.border-info {
- border-color: #17a2b8 !important;
-}
-
-.border-warning {
- border-color: #ffc107 !important;
-}
-
-.border-danger {
- border-color: #dc3545 !important;
-}
-
-.border-light {
- border-color: #f8f9fa !important;
-}
-
-.border-dark {
- border-color: #343a40 !important;
-}
-
-.border-white {
- border-color: #fff !important;
-}
-
-.rounded-sm {
- border-radius: 0.2rem !important;
-}
-
-.rounded {
- border-radius: 0.25rem !important;
-}
-
-.rounded-top {
- border-top-left-radius: 0.25rem !important;
- border-top-right-radius: 0.25rem !important;
-}
-
-.rounded-right {
- border-top-right-radius: 0.25rem !important;
- border-bottom-right-radius: 0.25rem !important;
-}
-
-.rounded-bottom {
- border-bottom-right-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important;
-}
-
-.rounded-left {
- border-top-left-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important;
-}
-
-.rounded-lg {
- border-radius: 0.3rem !important;
-}
-
-.rounded-circle {
- border-radius: 50% !important;
-}
-
-.rounded-pill {
- border-radius: 50rem !important;
-}
-
-.rounded-0 {
- border-radius: 0 !important;
-}
-
-.clearfix::after {
- display: block;
- clear: both;
- content: "";
-}
-
-.d-none {
- display: none !important;
-}
-
-.d-inline {
- display: inline !important;
-}
-
-.d-inline-block {
- display: inline-block !important;
-}
-
-.d-block {
- display: block !important;
-}
-
-.d-table {
- display: table !important;
-}
-
-.d-table-row {
- display: table-row !important;
-}
-
-.d-table-cell {
- display: table-cell !important;
-}
-
-.d-flex {
- display: flex !important;
-}
-
-.d-inline-flex {
- display: inline-flex !important;
-}
-
-@media (min-width: 576px) {
- .d-sm-none {
- display: none !important;
- }
-
- .d-sm-inline {
- display: inline !important;
- }
-
- .d-sm-inline-block {
- display: inline-block !important;
- }
-
- .d-sm-block {
- display: block !important;
- }
-
- .d-sm-table {
- display: table !important;
- }
-
- .d-sm-table-row {
- display: table-row !important;
- }
-
- .d-sm-table-cell {
- display: table-cell !important;
- }
-
- .d-sm-flex {
- display: flex !important;
- }
-
- .d-sm-inline-flex {
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 768px) {
- .d-md-none {
- display: none !important;
- }
-
- .d-md-inline {
- display: inline !important;
- }
-
- .d-md-inline-block {
- display: inline-block !important;
- }
-
- .d-md-block {
- display: block !important;
- }
-
- .d-md-table {
- display: table !important;
- }
-
- .d-md-table-row {
- display: table-row !important;
- }
-
- .d-md-table-cell {
- display: table-cell !important;
- }
-
- .d-md-flex {
- display: flex !important;
- }
-
- .d-md-inline-flex {
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 992px) {
- .d-lg-none {
- display: none !important;
- }
-
- .d-lg-inline {
- display: inline !important;
- }
-
- .d-lg-inline-block {
- display: inline-block !important;
- }
-
- .d-lg-block {
- display: block !important;
- }
-
- .d-lg-table {
- display: table !important;
- }
-
- .d-lg-table-row {
- display: table-row !important;
- }
-
- .d-lg-table-cell {
- display: table-cell !important;
- }
-
- .d-lg-flex {
- display: flex !important;
- }
-
- .d-lg-inline-flex {
- display: inline-flex !important;
- }
-}
-
-@media (min-width: 1200px) {
- .d-xl-none {
- display: none !important;
- }
-
- .d-xl-inline {
- display: inline !important;
- }
-
- .d-xl-inline-block {
- display: inline-block !important;
- }
-
- .d-xl-block {
- display: block !important;
- }
-
- .d-xl-table {
- display: table !important;
- }
-
- .d-xl-table-row {
- display: table-row !important;
- }
-
- .d-xl-table-cell {
- display: table-cell !important;
- }
-
- .d-xl-flex {
- display: flex !important;
- }
-
- .d-xl-inline-flex {
- display: inline-flex !important;
- }
-}
-
-@media print {
- .d-print-none {
- display: none !important;
- }
-
- .d-print-inline {
- display: inline !important;
- }
-
- .d-print-inline-block {
- display: inline-block !important;
- }
-
- .d-print-block {
- display: block !important;
- }
-
- .d-print-table {
- display: table !important;
- }
-
- .d-print-table-row {
- display: table-row !important;
- }
-
- .d-print-table-cell {
- display: table-cell !important;
- }
-
- .d-print-flex {
- display: flex !important;
- }
-
- .d-print-inline-flex {
- display: inline-flex !important;
- }
-}
-
-.embed-responsive {
- position: relative;
- display: block;
- width: 100%;
- padding: 0;
- overflow: hidden;
-}
-
-.embed-responsive::before {
- display: block;
- content: "";
-}
-
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
-}
-
-.embed-responsive-21by9::before {
- padding-top: 42.8571428571%;
-}
-
-.embed-responsive-16by9::before {
- padding-top: 56.25%;
-}
-
-.embed-responsive-4by3::before {
- padding-top: 75%;
-}
-
-.embed-responsive-1by1::before {
- padding-top: 100%;
-}
-
-.flex-row {
- flex-direction: row !important;
-}
-
-.flex-column {
- flex-direction: column !important;
-}
-
-.flex-row-reverse {
- flex-direction: row-reverse !important;
-}
-
-.flex-column-reverse {
- flex-direction: column-reverse !important;
-}
-
-.flex-wrap {
- flex-wrap: wrap !important;
-}
-
-.flex-nowrap {
- flex-wrap: nowrap !important;
-}
-
-.flex-wrap-reverse {
- flex-wrap: wrap-reverse !important;
-}
-
-.flex-fill {
- flex: 1 1 auto !important;
-}
-
-.flex-grow-0 {
- flex-grow: 0 !important;
-}
-
-.flex-grow-1 {
- flex-grow: 1 !important;
-}
-
-.flex-shrink-0 {
- flex-shrink: 0 !important;
-}
-
-.flex-shrink-1 {
- flex-shrink: 1 !important;
-}
-
-.justify-content-start {
- justify-content: flex-start !important;
-}
-
-.justify-content-end {
- justify-content: flex-end !important;
-}
-
-.justify-content-center {
- justify-content: center !important;
-}
-
-.justify-content-between {
- justify-content: space-between !important;
-}
-
-.justify-content-around {
- justify-content: space-around !important;
-}
-
-.align-items-start {
- align-items: flex-start !important;
-}
-
-.align-items-end {
- align-items: flex-end !important;
-}
-
-.align-items-center {
- align-items: center !important;
-}
-
-.align-items-baseline {
- align-items: baseline !important;
-}
-
-.align-items-stretch {
- align-items: stretch !important;
-}
-
-.align-content-start {
- align-content: flex-start !important;
-}
-
-.align-content-end {
- align-content: flex-end !important;
-}
-
-.align-content-center {
- align-content: center !important;
-}
-
-.align-content-between {
- align-content: space-between !important;
-}
-
-.align-content-around {
- align-content: space-around !important;
-}
-
-.align-content-stretch {
- align-content: stretch !important;
-}
-
-.align-self-auto {
- align-self: auto !important;
-}
-
-.align-self-start {
- align-self: flex-start !important;
-}
-
-.align-self-end {
- align-self: flex-end !important;
-}
-
-.align-self-center {
- align-self: center !important;
-}
-
-.align-self-baseline {
- align-self: baseline !important;
-}
-
-.align-self-stretch {
- align-self: stretch !important;
-}
-
-@media (min-width: 576px) {
- .flex-sm-row {
- flex-direction: row !important;
- }
-
- .flex-sm-column {
- flex-direction: column !important;
- }
-
- .flex-sm-row-reverse {
- flex-direction: row-reverse !important;
- }
-
- .flex-sm-column-reverse {
- flex-direction: column-reverse !important;
- }
-
- .flex-sm-wrap {
- flex-wrap: wrap !important;
- }
-
- .flex-sm-nowrap {
- flex-wrap: nowrap !important;
- }
-
- .flex-sm-wrap-reverse {
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-sm-fill {
- flex: 1 1 auto !important;
- }
-
- .flex-sm-grow-0 {
- flex-grow: 0 !important;
- }
-
- .flex-sm-grow-1 {
- flex-grow: 1 !important;
- }
-
- .flex-sm-shrink-0 {
- flex-shrink: 0 !important;
- }
-
- .flex-sm-shrink-1 {
- flex-shrink: 1 !important;
- }
-
- .justify-content-sm-start {
- justify-content: flex-start !important;
- }
-
- .justify-content-sm-end {
- justify-content: flex-end !important;
- }
-
- .justify-content-sm-center {
- justify-content: center !important;
- }
-
- .justify-content-sm-between {
- justify-content: space-between !important;
- }
-
- .justify-content-sm-around {
- justify-content: space-around !important;
- }
-
- .align-items-sm-start {
- align-items: flex-start !important;
- }
-
- .align-items-sm-end {
- align-items: flex-end !important;
- }
-
- .align-items-sm-center {
- align-items: center !important;
- }
-
- .align-items-sm-baseline {
- align-items: baseline !important;
- }
-
- .align-items-sm-stretch {
- align-items: stretch !important;
- }
-
- .align-content-sm-start {
- align-content: flex-start !important;
- }
-
- .align-content-sm-end {
- align-content: flex-end !important;
- }
-
- .align-content-sm-center {
- align-content: center !important;
- }
-
- .align-content-sm-between {
- align-content: space-between !important;
- }
-
- .align-content-sm-around {
- align-content: space-around !important;
- }
-
- .align-content-sm-stretch {
- align-content: stretch !important;
- }
-
- .align-self-sm-auto {
- align-self: auto !important;
- }
-
- .align-self-sm-start {
- align-self: flex-start !important;
- }
-
- .align-self-sm-end {
- align-self: flex-end !important;
- }
-
- .align-self-sm-center {
- align-self: center !important;
- }
-
- .align-self-sm-baseline {
- align-self: baseline !important;
- }
-
- .align-self-sm-stretch {
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 768px) {
- .flex-md-row {
- flex-direction: row !important;
- }
-
- .flex-md-column {
- flex-direction: column !important;
- }
-
- .flex-md-row-reverse {
- flex-direction: row-reverse !important;
- }
-
- .flex-md-column-reverse {
- flex-direction: column-reverse !important;
- }
-
- .flex-md-wrap {
- flex-wrap: wrap !important;
- }
-
- .flex-md-nowrap {
- flex-wrap: nowrap !important;
- }
-
- .flex-md-wrap-reverse {
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-md-fill {
- flex: 1 1 auto !important;
- }
-
- .flex-md-grow-0 {
- flex-grow: 0 !important;
- }
-
- .flex-md-grow-1 {
- flex-grow: 1 !important;
- }
-
- .flex-md-shrink-0 {
- flex-shrink: 0 !important;
- }
-
- .flex-md-shrink-1 {
- flex-shrink: 1 !important;
- }
-
- .justify-content-md-start {
- justify-content: flex-start !important;
- }
-
- .justify-content-md-end {
- justify-content: flex-end !important;
- }
-
- .justify-content-md-center {
- justify-content: center !important;
- }
-
- .justify-content-md-between {
- justify-content: space-between !important;
- }
-
- .justify-content-md-around {
- justify-content: space-around !important;
- }
-
- .align-items-md-start {
- align-items: flex-start !important;
- }
-
- .align-items-md-end {
- align-items: flex-end !important;
- }
-
- .align-items-md-center {
- align-items: center !important;
- }
-
- .align-items-md-baseline {
- align-items: baseline !important;
- }
-
- .align-items-md-stretch {
- align-items: stretch !important;
- }
-
- .align-content-md-start {
- align-content: flex-start !important;
- }
-
- .align-content-md-end {
- align-content: flex-end !important;
- }
-
- .align-content-md-center {
- align-content: center !important;
- }
-
- .align-content-md-between {
- align-content: space-between !important;
- }
-
- .align-content-md-around {
- align-content: space-around !important;
- }
-
- .align-content-md-stretch {
- align-content: stretch !important;
- }
-
- .align-self-md-auto {
- align-self: auto !important;
- }
-
- .align-self-md-start {
- align-self: flex-start !important;
- }
-
- .align-self-md-end {
- align-self: flex-end !important;
- }
-
- .align-self-md-center {
- align-self: center !important;
- }
-
- .align-self-md-baseline {
- align-self: baseline !important;
- }
-
- .align-self-md-stretch {
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 992px) {
- .flex-lg-row {
- flex-direction: row !important;
- }
-
- .flex-lg-column {
- flex-direction: column !important;
- }
-
- .flex-lg-row-reverse {
- flex-direction: row-reverse !important;
- }
-
- .flex-lg-column-reverse {
- flex-direction: column-reverse !important;
- }
-
- .flex-lg-wrap {
- flex-wrap: wrap !important;
- }
-
- .flex-lg-nowrap {
- flex-wrap: nowrap !important;
- }
-
- .flex-lg-wrap-reverse {
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-lg-fill {
- flex: 1 1 auto !important;
- }
-
- .flex-lg-grow-0 {
- flex-grow: 0 !important;
- }
-
- .flex-lg-grow-1 {
- flex-grow: 1 !important;
- }
-
- .flex-lg-shrink-0 {
- flex-shrink: 0 !important;
- }
-
- .flex-lg-shrink-1 {
- flex-shrink: 1 !important;
- }
-
- .justify-content-lg-start {
- justify-content: flex-start !important;
- }
-
- .justify-content-lg-end {
- justify-content: flex-end !important;
- }
-
- .justify-content-lg-center {
- justify-content: center !important;
- }
-
- .justify-content-lg-between {
- justify-content: space-between !important;
- }
-
- .justify-content-lg-around {
- justify-content: space-around !important;
- }
-
- .align-items-lg-start {
- align-items: flex-start !important;
- }
-
- .align-items-lg-end {
- align-items: flex-end !important;
- }
-
- .align-items-lg-center {
- align-items: center !important;
- }
-
- .align-items-lg-baseline {
- align-items: baseline !important;
- }
-
- .align-items-lg-stretch {
- align-items: stretch !important;
- }
-
- .align-content-lg-start {
- align-content: flex-start !important;
- }
-
- .align-content-lg-end {
- align-content: flex-end !important;
- }
-
- .align-content-lg-center {
- align-content: center !important;
- }
-
- .align-content-lg-between {
- align-content: space-between !important;
- }
-
- .align-content-lg-around {
- align-content: space-around !important;
- }
-
- .align-content-lg-stretch {
- align-content: stretch !important;
- }
-
- .align-self-lg-auto {
- align-self: auto !important;
- }
-
- .align-self-lg-start {
- align-self: flex-start !important;
- }
-
- .align-self-lg-end {
- align-self: flex-end !important;
- }
-
- .align-self-lg-center {
- align-self: center !important;
- }
-
- .align-self-lg-baseline {
- align-self: baseline !important;
- }
-
- .align-self-lg-stretch {
- align-self: stretch !important;
- }
-}
-
-@media (min-width: 1200px) {
- .flex-xl-row {
- flex-direction: row !important;
- }
-
- .flex-xl-column {
- flex-direction: column !important;
- }
-
- .flex-xl-row-reverse {
- flex-direction: row-reverse !important;
- }
-
- .flex-xl-column-reverse {
- flex-direction: column-reverse !important;
- }
-
- .flex-xl-wrap {
- flex-wrap: wrap !important;
- }
-
- .flex-xl-nowrap {
- flex-wrap: nowrap !important;
- }
-
- .flex-xl-wrap-reverse {
- flex-wrap: wrap-reverse !important;
- }
-
- .flex-xl-fill {
- flex: 1 1 auto !important;
- }
-
- .flex-xl-grow-0 {
- flex-grow: 0 !important;
- }
-
- .flex-xl-grow-1 {
- flex-grow: 1 !important;
- }
-
- .flex-xl-shrink-0 {
- flex-shrink: 0 !important;
- }
-
- .flex-xl-shrink-1 {
- flex-shrink: 1 !important;
- }
-
- .justify-content-xl-start {
- justify-content: flex-start !important;
- }
-
- .justify-content-xl-end {
- justify-content: flex-end !important;
- }
-
- .justify-content-xl-center {
- justify-content: center !important;
- }
-
- .justify-content-xl-between {
- justify-content: space-between !important;
- }
-
- .justify-content-xl-around {
- justify-content: space-around !important;
- }
-
- .align-items-xl-start {
- align-items: flex-start !important;
- }
-
- .align-items-xl-end {
- align-items: flex-end !important;
- }
-
- .align-items-xl-center {
- align-items: center !important;
- }
-
- .align-items-xl-baseline {
- align-items: baseline !important;
- }
-
- .align-items-xl-stretch {
- align-items: stretch !important;
- }
-
- .align-content-xl-start {
- align-content: flex-start !important;
- }
-
- .align-content-xl-end {
- align-content: flex-end !important;
- }
-
- .align-content-xl-center {
- align-content: center !important;
- }
-
- .align-content-xl-between {
- align-content: space-between !important;
- }
-
- .align-content-xl-around {
- align-content: space-around !important;
- }
-
- .align-content-xl-stretch {
- align-content: stretch !important;
- }
-
- .align-self-xl-auto {
- align-self: auto !important;
- }
-
- .align-self-xl-start {
- align-self: flex-start !important;
- }
-
- .align-self-xl-end {
- align-self: flex-end !important;
- }
-
- .align-self-xl-center {
- align-self: center !important;
- }
-
- .align-self-xl-baseline {
- align-self: baseline !important;
- }
-
- .align-self-xl-stretch {
- align-self: stretch !important;
- }
-}
-
-.float-left {
- float: left !important;
-}
-
-.float-right {
- float: right !important;
-}
-
-.float-none {
- float: none !important;
-}
-
-@media (min-width: 576px) {
- .float-sm-left {
- float: left !important;
- }
-
- .float-sm-right {
- float: right !important;
- }
-
- .float-sm-none {
- float: none !important;
- }
-}
-
-@media (min-width: 768px) {
- .float-md-left {
- float: left !important;
- }
-
- .float-md-right {
- float: right !important;
- }
-
- .float-md-none {
- float: none !important;
- }
-}
-
-@media (min-width: 992px) {
- .float-lg-left {
- float: left !important;
- }
-
- .float-lg-right {
- float: right !important;
- }
-
- .float-lg-none {
- float: none !important;
- }
-}
-
-@media (min-width: 1200px) {
- .float-xl-left {
- float: left !important;
- }
-
- .float-xl-right {
- float: right !important;
- }
-
- .float-xl-none {
- float: none !important;
- }
-}
-
-.user-select-all {
- -webkit-user-select: all !important;
- -moz-user-select: all !important;
- -ms-user-select: all !important;
- user-select: all !important;
-}
-
-.user-select-auto {
- -webkit-user-select: auto !important;
- -moz-user-select: auto !important;
- -ms-user-select: auto !important;
- user-select: auto !important;
-}
-
-.user-select-none {
- -webkit-user-select: none !important;
- -moz-user-select: none !important;
- -ms-user-select: none !important;
- user-select: none !important;
-}
-
-.overflow-auto {
- overflow: auto !important;
-}
-
-.overflow-hidden {
- overflow: hidden !important;
-}
-
-.position-static {
- position: static !important;
-}
-
-.position-relative {
- position: relative !important;
-}
-
-.position-absolute {
- position: absolute !important;
-}
-
-.position-fixed {
- position: fixed !important;
-}
-
-.position-sticky {
- position: -webkit-sticky !important;
- position: sticky !important;
-}
-
-.fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030;
-}
-
-.fixed-bottom {
- position: fixed;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1030;
-}
-
-@supports ((position: -webkit-sticky) or (position: sticky)) {
- .sticky-top {
- position: -webkit-sticky;
- position: sticky;
- top: 0;
- z-index: 1020;
- }
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- margin: -1px;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border: 0;
-}
-
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto;
- white-space: normal;
-}
-
-.shadow-sm {
- box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
-}
-
-.shadow {
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
-}
-
-.shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
-}
-
-.shadow-none {
- box-shadow: none !important;
-}
-
-.w-25 {
- width: 25% !important;
-}
-
-.w-50 {
- width: 50% !important;
-}
-
-.w-75 {
- width: 75% !important;
-}
-
-.w-100 {
- width: 100% !important;
-}
-
-.w-auto {
- width: auto !important;
-}
-
-.h-25 {
- height: 25% !important;
-}
-
-.h-50 {
- height: 50% !important;
-}
-
-.h-75 {
- height: 75% !important;
-}
-
-.h-100 {
- height: 100% !important;
-}
-
-.h-auto {
- height: auto !important;
-}
-
-.mw-100 {
- max-width: 100% !important;
-}
-
-.mh-100 {
- max-height: 100% !important;
-}
-
-.min-vw-100 {
- min-width: 100vw !important;
-}
-
-.min-vh-100 {
- min-height: 100vh !important;
-}
-
-.vw-100 {
- width: 100vw !important;
-}
-
-.vh-100 {
- height: 100vh !important;
-}
-
-.m-0 {
- margin: 0 !important;
-}
-
-.mt-0,
-.my-0 {
- margin-top: 0 !important;
-}
-
-.mr-0,
-.mx-0 {
- margin-right: 0 !important;
-}
-
-.mb-0,
-.my-0 {
- margin-bottom: 0 !important;
-}
-
-.ml-0,
-.mx-0 {
- margin-left: 0 !important;
-}
-
-.m-1 {
- margin: 0.25rem !important;
-}
-
-.mt-1,
-.my-1 {
- margin-top: 0.25rem !important;
-}
-
-.mr-1,
-.mx-1 {
- margin-right: 0.25rem !important;
-}
-
-.mb-1,
-.my-1 {
- margin-bottom: 0.25rem !important;
-}
-
-.ml-1,
-.mx-1 {
- margin-left: 0.25rem !important;
-}
-
-.m-2 {
- margin: 0.5rem !important;
-}
-
-.mt-2,
-.my-2 {
- margin-top: 0.5rem !important;
-}
-
-.mr-2,
-.mx-2 {
- margin-right: 0.5rem !important;
-}
-
-.mb-2,
-.my-2 {
- margin-bottom: 0.5rem !important;
-}
-
-.ml-2,
-.mx-2 {
- margin-left: 0.5rem !important;
-}
-
-.m-3 {
- margin: 1rem !important;
-}
-
-.mt-3,
-.my-3 {
- margin-top: 1rem !important;
-}
-
-.mr-3,
-.mx-3 {
- margin-right: 1rem !important;
-}
-
-.mb-3,
-.my-3 {
- margin-bottom: 1rem !important;
-}
-
-.ml-3,
-.mx-3 {
- margin-left: 1rem !important;
-}
-
-.m-4 {
- margin: 1.5rem !important;
-}
-
-.mt-4,
-.my-4 {
- margin-top: 1.5rem !important;
-}
-
-.mr-4,
-.mx-4 {
- margin-right: 1.5rem !important;
-}
-
-.mb-4,
-.my-4 {
- margin-bottom: 1.5rem !important;
-}
-
-.ml-4,
-.mx-4 {
- margin-left: 1.5rem !important;
-}
-
-.m-5 {
- margin: 3rem !important;
-}
-
-.mt-5,
-.my-5 {
- margin-top: 3rem !important;
-}
-
-.mr-5,
-.mx-5 {
- margin-right: 3rem !important;
-}
-
-.mb-5,
-.my-5 {
- margin-bottom: 3rem !important;
-}
-
-.ml-5,
-.mx-5 {
- margin-left: 3rem !important;
-}
-
-.p-0 {
- padding: 0 !important;
-}
-
-.pt-0,
-.py-0 {
- padding-top: 0 !important;
-}
-
-.pr-0,
-.px-0 {
- padding-right: 0 !important;
-}
-
-.pb-0,
-.py-0 {
- padding-bottom: 0 !important;
-}
-
-.pl-0,
-.px-0 {
- padding-left: 0 !important;
-}
-
-.p-1 {
- padding: 0.25rem !important;
-}
-
-.pt-1,
-.py-1 {
- padding-top: 0.25rem !important;
-}
-
-.pr-1,
-.px-1 {
- padding-right: 0.25rem !important;
-}
-
-.pb-1,
-.py-1 {
- padding-bottom: 0.25rem !important;
-}
-
-.pl-1,
-.px-1 {
- padding-left: 0.25rem !important;
-}
-
-.p-2 {
- padding: 0.5rem !important;
-}
-
-.pt-2,
-.py-2 {
- padding-top: 0.5rem !important;
-}
-
-.pr-2,
-.px-2 {
- padding-right: 0.5rem !important;
-}
-
-.pb-2,
-.py-2 {
- padding-bottom: 0.5rem !important;
-}
-
-.pl-2,
-.px-2 {
- padding-left: 0.5rem !important;
-}
-
-.p-3 {
- padding: 1rem !important;
-}
-
-.pt-3,
-.py-3 {
- padding-top: 1rem !important;
-}
-
-.pr-3,
-.px-3 {
- padding-right: 1rem !important;
-}
-
-.pb-3,
-.py-3 {
- padding-bottom: 1rem !important;
-}
-
-.pl-3,
-.px-3 {
- padding-left: 1rem !important;
-}
-
-.p-4 {
- padding: 1.5rem !important;
-}
-
-.pt-4,
-.py-4 {
- padding-top: 1.5rem !important;
-}
-
-.pr-4,
-.px-4 {
- padding-right: 1.5rem !important;
-}
-
-.pb-4,
-.py-4 {
- padding-bottom: 1.5rem !important;
-}
-
-.pl-4,
-.px-4 {
- padding-left: 1.5rem !important;
-}
-
-.p-5 {
- padding: 3rem !important;
-}
-
-.pt-5,
-.py-5 {
- padding-top: 3rem !important;
-}
-
-.pr-5,
-.px-5 {
- padding-right: 3rem !important;
-}
-
-.pb-5,
-.py-5 {
- padding-bottom: 3rem !important;
-}
-
-.pl-5,
-.px-5 {
- padding-left: 3rem !important;
-}
-
-.m-n1 {
- margin: -0.25rem !important;
-}
-
-.mt-n1,
-.my-n1 {
- margin-top: -0.25rem !important;
-}
-
-.mr-n1,
-.mx-n1 {
- margin-right: -0.25rem !important;
-}
-
-.mb-n1,
-.my-n1 {
- margin-bottom: -0.25rem !important;
-}
-
-.ml-n1,
-.mx-n1 {
- margin-left: -0.25rem !important;
-}
-
-.m-n2 {
- margin: -0.5rem !important;
-}
-
-.mt-n2,
-.my-n2 {
- margin-top: -0.5rem !important;
-}
-
-.mr-n2,
-.mx-n2 {
- margin-right: -0.5rem !important;
-}
-
-.mb-n2,
-.my-n2 {
- margin-bottom: -0.5rem !important;
-}
-
-.ml-n2,
-.mx-n2 {
- margin-left: -0.5rem !important;
-}
-
-.m-n3 {
- margin: -1rem !important;
-}
-
-.mt-n3,
-.my-n3 {
- margin-top: -1rem !important;
-}
-
-.mr-n3,
-.mx-n3 {
- margin-right: -1rem !important;
-}
-
-.mb-n3,
-.my-n3 {
- margin-bottom: -1rem !important;
-}
-
-.ml-n3,
-.mx-n3 {
- margin-left: -1rem !important;
-}
-
-.m-n4 {
- margin: -1.5rem !important;
-}
-
-.mt-n4,
-.my-n4 {
- margin-top: -1.5rem !important;
-}
-
-.mr-n4,
-.mx-n4 {
- margin-right: -1.5rem !important;
-}
-
-.mb-n4,
-.my-n4 {
- margin-bottom: -1.5rem !important;
-}
-
-.ml-n4,
-.mx-n4 {
- margin-left: -1.5rem !important;
-}
-
-.m-n5 {
- margin: -3rem !important;
-}
-
-.mt-n5,
-.my-n5 {
- margin-top: -3rem !important;
-}
-
-.mr-n5,
-.mx-n5 {
- margin-right: -3rem !important;
-}
-
-.mb-n5,
-.my-n5 {
- margin-bottom: -3rem !important;
-}
-
-.ml-n5,
-.mx-n5 {
- margin-left: -3rem !important;
-}
-
-.m-auto {
- margin: auto !important;
-}
-
-.mt-auto,
-.my-auto {
- margin-top: auto !important;
-}
-
-.mr-auto,
-.mx-auto {
- margin-right: auto !important;
-}
-
-.mb-auto,
-.my-auto {
- margin-bottom: auto !important;
-}
-
-.ml-auto,
-.mx-auto {
- margin-left: auto !important;
-}
-
-@media (min-width: 576px) {
- .m-sm-0 {
- margin: 0 !important;
- }
-
- .mt-sm-0,
- .my-sm-0 {
- margin-top: 0 !important;
- }
-
- .mr-sm-0,
- .mx-sm-0 {
- margin-right: 0 !important;
- }
-
- .mb-sm-0,
- .my-sm-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-sm-0,
- .mx-sm-0 {
- margin-left: 0 !important;
- }
-
- .m-sm-1 {
- margin: 0.25rem !important;
- }
-
- .mt-sm-1,
- .my-sm-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-sm-1,
- .mx-sm-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-sm-1,
- .my-sm-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-sm-1,
- .mx-sm-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-sm-2 {
- margin: 0.5rem !important;
- }
-
- .mt-sm-2,
- .my-sm-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-sm-2,
- .mx-sm-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-sm-2,
- .my-sm-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-sm-2,
- .mx-sm-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-sm-3 {
- margin: 1rem !important;
- }
-
- .mt-sm-3,
- .my-sm-3 {
- margin-top: 1rem !important;
- }
-
- .mr-sm-3,
- .mx-sm-3 {
- margin-right: 1rem !important;
- }
-
- .mb-sm-3,
- .my-sm-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-sm-3,
- .mx-sm-3 {
- margin-left: 1rem !important;
- }
-
- .m-sm-4 {
- margin: 1.5rem !important;
- }
-
- .mt-sm-4,
- .my-sm-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-sm-4,
- .mx-sm-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-sm-4,
- .my-sm-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-sm-4,
- .mx-sm-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-sm-5 {
- margin: 3rem !important;
- }
-
- .mt-sm-5,
- .my-sm-5 {
- margin-top: 3rem !important;
- }
-
- .mr-sm-5,
- .mx-sm-5 {
- margin-right: 3rem !important;
- }
-
- .mb-sm-5,
- .my-sm-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-sm-5,
- .mx-sm-5 {
- margin-left: 3rem !important;
- }
-
- .p-sm-0 {
- padding: 0 !important;
- }
-
- .pt-sm-0,
- .py-sm-0 {
- padding-top: 0 !important;
- }
-
- .pr-sm-0,
- .px-sm-0 {
- padding-right: 0 !important;
- }
-
- .pb-sm-0,
- .py-sm-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-sm-0,
- .px-sm-0 {
- padding-left: 0 !important;
- }
-
- .p-sm-1 {
- padding: 0.25rem !important;
- }
-
- .pt-sm-1,
- .py-sm-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-sm-1,
- .px-sm-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-sm-1,
- .py-sm-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-sm-1,
- .px-sm-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-sm-2 {
- padding: 0.5rem !important;
- }
-
- .pt-sm-2,
- .py-sm-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-sm-2,
- .px-sm-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-sm-2,
- .py-sm-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-sm-2,
- .px-sm-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-sm-3 {
- padding: 1rem !important;
- }
-
- .pt-sm-3,
- .py-sm-3 {
- padding-top: 1rem !important;
- }
-
- .pr-sm-3,
- .px-sm-3 {
- padding-right: 1rem !important;
- }
-
- .pb-sm-3,
- .py-sm-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-sm-3,
- .px-sm-3 {
- padding-left: 1rem !important;
- }
-
- .p-sm-4 {
- padding: 1.5rem !important;
- }
-
- .pt-sm-4,
- .py-sm-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-sm-4,
- .px-sm-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-sm-4,
- .py-sm-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-sm-4,
- .px-sm-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-sm-5 {
- padding: 3rem !important;
- }
-
- .pt-sm-5,
- .py-sm-5 {
- padding-top: 3rem !important;
- }
-
- .pr-sm-5,
- .px-sm-5 {
- padding-right: 3rem !important;
- }
-
- .pb-sm-5,
- .py-sm-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-sm-5,
- .px-sm-5 {
- padding-left: 3rem !important;
- }
-
- .m-sm-n1 {
- margin: -0.25rem !important;
- }
-
- .mt-sm-n1,
- .my-sm-n1 {
- margin-top: -0.25rem !important;
- }
-
- .mr-sm-n1,
- .mx-sm-n1 {
- margin-right: -0.25rem !important;
- }
-
- .mb-sm-n1,
- .my-sm-n1 {
- margin-bottom: -0.25rem !important;
- }
-
- .ml-sm-n1,
- .mx-sm-n1 {
- margin-left: -0.25rem !important;
- }
-
- .m-sm-n2 {
- margin: -0.5rem !important;
- }
-
- .mt-sm-n2,
- .my-sm-n2 {
- margin-top: -0.5rem !important;
- }
-
- .mr-sm-n2,
- .mx-sm-n2 {
- margin-right: -0.5rem !important;
- }
-
- .mb-sm-n2,
- .my-sm-n2 {
- margin-bottom: -0.5rem !important;
- }
-
- .ml-sm-n2,
- .mx-sm-n2 {
- margin-left: -0.5rem !important;
- }
-
- .m-sm-n3 {
- margin: -1rem !important;
- }
-
- .mt-sm-n3,
- .my-sm-n3 {
- margin-top: -1rem !important;
- }
-
- .mr-sm-n3,
- .mx-sm-n3 {
- margin-right: -1rem !important;
- }
-
- .mb-sm-n3,
- .my-sm-n3 {
- margin-bottom: -1rem !important;
- }
-
- .ml-sm-n3,
- .mx-sm-n3 {
- margin-left: -1rem !important;
- }
-
- .m-sm-n4 {
- margin: -1.5rem !important;
- }
-
- .mt-sm-n4,
- .my-sm-n4 {
- margin-top: -1.5rem !important;
- }
-
- .mr-sm-n4,
- .mx-sm-n4 {
- margin-right: -1.5rem !important;
- }
-
- .mb-sm-n4,
- .my-sm-n4 {
- margin-bottom: -1.5rem !important;
- }
-
- .ml-sm-n4,
- .mx-sm-n4 {
- margin-left: -1.5rem !important;
- }
-
- .m-sm-n5 {
- margin: -3rem !important;
- }
-
- .mt-sm-n5,
- .my-sm-n5 {
- margin-top: -3rem !important;
- }
-
- .mr-sm-n5,
- .mx-sm-n5 {
- margin-right: -3rem !important;
- }
-
- .mb-sm-n5,
- .my-sm-n5 {
- margin-bottom: -3rem !important;
- }
-
- .ml-sm-n5,
- .mx-sm-n5 {
- margin-left: -3rem !important;
- }
-
- .m-sm-auto {
- margin: auto !important;
- }
-
- .mt-sm-auto,
- .my-sm-auto {
- margin-top: auto !important;
- }
-
- .mr-sm-auto,
- .mx-sm-auto {
- margin-right: auto !important;
- }
-
- .mb-sm-auto,
- .my-sm-auto {
- margin-bottom: auto !important;
- }
-
- .ml-sm-auto,
- .mx-sm-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 768px) {
- .m-md-0 {
- margin: 0 !important;
- }
-
- .mt-md-0,
- .my-md-0 {
- margin-top: 0 !important;
- }
-
- .mr-md-0,
- .mx-md-0 {
- margin-right: 0 !important;
- }
-
- .mb-md-0,
- .my-md-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-md-0,
- .mx-md-0 {
- margin-left: 0 !important;
- }
-
- .m-md-1 {
- margin: 0.25rem !important;
- }
-
- .mt-md-1,
- .my-md-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-md-1,
- .mx-md-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-md-1,
- .my-md-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-md-1,
- .mx-md-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-md-2 {
- margin: 0.5rem !important;
- }
-
- .mt-md-2,
- .my-md-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-md-2,
- .mx-md-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-md-2,
- .my-md-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-md-2,
- .mx-md-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-md-3 {
- margin: 1rem !important;
- }
-
- .mt-md-3,
- .my-md-3 {
- margin-top: 1rem !important;
- }
-
- .mr-md-3,
- .mx-md-3 {
- margin-right: 1rem !important;
- }
-
- .mb-md-3,
- .my-md-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-md-3,
- .mx-md-3 {
- margin-left: 1rem !important;
- }
-
- .m-md-4 {
- margin: 1.5rem !important;
- }
-
- .mt-md-4,
- .my-md-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-md-4,
- .mx-md-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-md-4,
- .my-md-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-md-4,
- .mx-md-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-md-5 {
- margin: 3rem !important;
- }
-
- .mt-md-5,
- .my-md-5 {
- margin-top: 3rem !important;
- }
-
- .mr-md-5,
- .mx-md-5 {
- margin-right: 3rem !important;
- }
-
- .mb-md-5,
- .my-md-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-md-5,
- .mx-md-5 {
- margin-left: 3rem !important;
- }
-
- .p-md-0 {
- padding: 0 !important;
- }
-
- .pt-md-0,
- .py-md-0 {
- padding-top: 0 !important;
- }
-
- .pr-md-0,
- .px-md-0 {
- padding-right: 0 !important;
- }
-
- .pb-md-0,
- .py-md-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-md-0,
- .px-md-0 {
- padding-left: 0 !important;
- }
-
- .p-md-1 {
- padding: 0.25rem !important;
- }
-
- .pt-md-1,
- .py-md-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-md-1,
- .px-md-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-md-1,
- .py-md-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-md-1,
- .px-md-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-md-2 {
- padding: 0.5rem !important;
- }
-
- .pt-md-2,
- .py-md-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-md-2,
- .px-md-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-md-2,
- .py-md-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-md-2,
- .px-md-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-md-3 {
- padding: 1rem !important;
- }
-
- .pt-md-3,
- .py-md-3 {
- padding-top: 1rem !important;
- }
-
- .pr-md-3,
- .px-md-3 {
- padding-right: 1rem !important;
- }
-
- .pb-md-3,
- .py-md-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-md-3,
- .px-md-3 {
- padding-left: 1rem !important;
- }
-
- .p-md-4 {
- padding: 1.5rem !important;
- }
-
- .pt-md-4,
- .py-md-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-md-4,
- .px-md-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-md-4,
- .py-md-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-md-4,
- .px-md-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-md-5 {
- padding: 3rem !important;
- }
-
- .pt-md-5,
- .py-md-5 {
- padding-top: 3rem !important;
- }
-
- .pr-md-5,
- .px-md-5 {
- padding-right: 3rem !important;
- }
-
- .pb-md-5,
- .py-md-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-md-5,
- .px-md-5 {
- padding-left: 3rem !important;
- }
-
- .m-md-n1 {
- margin: -0.25rem !important;
- }
-
- .mt-md-n1,
- .my-md-n1 {
- margin-top: -0.25rem !important;
- }
-
- .mr-md-n1,
- .mx-md-n1 {
- margin-right: -0.25rem !important;
- }
-
- .mb-md-n1,
- .my-md-n1 {
- margin-bottom: -0.25rem !important;
- }
-
- .ml-md-n1,
- .mx-md-n1 {
- margin-left: -0.25rem !important;
- }
-
- .m-md-n2 {
- margin: -0.5rem !important;
- }
-
- .mt-md-n2,
- .my-md-n2 {
- margin-top: -0.5rem !important;
- }
-
- .mr-md-n2,
- .mx-md-n2 {
- margin-right: -0.5rem !important;
- }
-
- .mb-md-n2,
- .my-md-n2 {
- margin-bottom: -0.5rem !important;
- }
-
- .ml-md-n2,
- .mx-md-n2 {
- margin-left: -0.5rem !important;
- }
-
- .m-md-n3 {
- margin: -1rem !important;
- }
-
- .mt-md-n3,
- .my-md-n3 {
- margin-top: -1rem !important;
- }
-
- .mr-md-n3,
- .mx-md-n3 {
- margin-right: -1rem !important;
- }
-
- .mb-md-n3,
- .my-md-n3 {
- margin-bottom: -1rem !important;
- }
-
- .ml-md-n3,
- .mx-md-n3 {
- margin-left: -1rem !important;
- }
-
- .m-md-n4 {
- margin: -1.5rem !important;
- }
-
- .mt-md-n4,
- .my-md-n4 {
- margin-top: -1.5rem !important;
- }
-
- .mr-md-n4,
- .mx-md-n4 {
- margin-right: -1.5rem !important;
- }
-
- .mb-md-n4,
- .my-md-n4 {
- margin-bottom: -1.5rem !important;
- }
-
- .ml-md-n4,
- .mx-md-n4 {
- margin-left: -1.5rem !important;
- }
-
- .m-md-n5 {
- margin: -3rem !important;
- }
-
- .mt-md-n5,
- .my-md-n5 {
- margin-top: -3rem !important;
- }
-
- .mr-md-n5,
- .mx-md-n5 {
- margin-right: -3rem !important;
- }
-
- .mb-md-n5,
- .my-md-n5 {
- margin-bottom: -3rem !important;
- }
-
- .ml-md-n5,
- .mx-md-n5 {
- margin-left: -3rem !important;
- }
-
- .m-md-auto {
- margin: auto !important;
- }
-
- .mt-md-auto,
- .my-md-auto {
- margin-top: auto !important;
- }
-
- .mr-md-auto,
- .mx-md-auto {
- margin-right: auto !important;
- }
-
- .mb-md-auto,
- .my-md-auto {
- margin-bottom: auto !important;
- }
-
- .ml-md-auto,
- .mx-md-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 992px) {
- .m-lg-0 {
- margin: 0 !important;
- }
-
- .mt-lg-0,
- .my-lg-0 {
- margin-top: 0 !important;
- }
-
- .mr-lg-0,
- .mx-lg-0 {
- margin-right: 0 !important;
- }
-
- .mb-lg-0,
- .my-lg-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-lg-0,
- .mx-lg-0 {
- margin-left: 0 !important;
- }
-
- .m-lg-1 {
- margin: 0.25rem !important;
- }
-
- .mt-lg-1,
- .my-lg-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-lg-1,
- .mx-lg-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-lg-1,
- .my-lg-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-lg-1,
- .mx-lg-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-lg-2 {
- margin: 0.5rem !important;
- }
-
- .mt-lg-2,
- .my-lg-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-lg-2,
- .mx-lg-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-lg-2,
- .my-lg-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-lg-2,
- .mx-lg-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-lg-3 {
- margin: 1rem !important;
- }
-
- .mt-lg-3,
- .my-lg-3 {
- margin-top: 1rem !important;
- }
-
- .mr-lg-3,
- .mx-lg-3 {
- margin-right: 1rem !important;
- }
-
- .mb-lg-3,
- .my-lg-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-lg-3,
- .mx-lg-3 {
- margin-left: 1rem !important;
- }
-
- .m-lg-4 {
- margin: 1.5rem !important;
- }
-
- .mt-lg-4,
- .my-lg-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-lg-4,
- .mx-lg-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-lg-4,
- .my-lg-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-lg-4,
- .mx-lg-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-lg-5 {
- margin: 3rem !important;
- }
-
- .mt-lg-5,
- .my-lg-5 {
- margin-top: 3rem !important;
- }
-
- .mr-lg-5,
- .mx-lg-5 {
- margin-right: 3rem !important;
- }
-
- .mb-lg-5,
- .my-lg-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-lg-5,
- .mx-lg-5 {
- margin-left: 3rem !important;
- }
-
- .p-lg-0 {
- padding: 0 !important;
- }
-
- .pt-lg-0,
- .py-lg-0 {
- padding-top: 0 !important;
- }
-
- .pr-lg-0,
- .px-lg-0 {
- padding-right: 0 !important;
- }
-
- .pb-lg-0,
- .py-lg-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-lg-0,
- .px-lg-0 {
- padding-left: 0 !important;
- }
-
- .p-lg-1 {
- padding: 0.25rem !important;
- }
-
- .pt-lg-1,
- .py-lg-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-lg-1,
- .px-lg-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-lg-1,
- .py-lg-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-lg-1,
- .px-lg-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-lg-2 {
- padding: 0.5rem !important;
- }
-
- .pt-lg-2,
- .py-lg-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-lg-2,
- .px-lg-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-lg-2,
- .py-lg-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-lg-2,
- .px-lg-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-lg-3 {
- padding: 1rem !important;
- }
-
- .pt-lg-3,
- .py-lg-3 {
- padding-top: 1rem !important;
- }
-
- .pr-lg-3,
- .px-lg-3 {
- padding-right: 1rem !important;
- }
-
- .pb-lg-3,
- .py-lg-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-lg-3,
- .px-lg-3 {
- padding-left: 1rem !important;
- }
-
- .p-lg-4 {
- padding: 1.5rem !important;
- }
-
- .pt-lg-4,
- .py-lg-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-lg-4,
- .px-lg-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-lg-4,
- .py-lg-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-lg-4,
- .px-lg-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-lg-5 {
- padding: 3rem !important;
- }
-
- .pt-lg-5,
- .py-lg-5 {
- padding-top: 3rem !important;
- }
-
- .pr-lg-5,
- .px-lg-5 {
- padding-right: 3rem !important;
- }
-
- .pb-lg-5,
- .py-lg-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-lg-5,
- .px-lg-5 {
- padding-left: 3rem !important;
- }
-
- .m-lg-n1 {
- margin: -0.25rem !important;
- }
-
- .mt-lg-n1,
- .my-lg-n1 {
- margin-top: -0.25rem !important;
- }
-
- .mr-lg-n1,
- .mx-lg-n1 {
- margin-right: -0.25rem !important;
- }
-
- .mb-lg-n1,
- .my-lg-n1 {
- margin-bottom: -0.25rem !important;
- }
-
- .ml-lg-n1,
- .mx-lg-n1 {
- margin-left: -0.25rem !important;
- }
-
- .m-lg-n2 {
- margin: -0.5rem !important;
- }
-
- .mt-lg-n2,
- .my-lg-n2 {
- margin-top: -0.5rem !important;
- }
-
- .mr-lg-n2,
- .mx-lg-n2 {
- margin-right: -0.5rem !important;
- }
-
- .mb-lg-n2,
- .my-lg-n2 {
- margin-bottom: -0.5rem !important;
- }
-
- .ml-lg-n2,
- .mx-lg-n2 {
- margin-left: -0.5rem !important;
- }
-
- .m-lg-n3 {
- margin: -1rem !important;
- }
-
- .mt-lg-n3,
- .my-lg-n3 {
- margin-top: -1rem !important;
- }
-
- .mr-lg-n3,
- .mx-lg-n3 {
- margin-right: -1rem !important;
- }
-
- .mb-lg-n3,
- .my-lg-n3 {
- margin-bottom: -1rem !important;
- }
-
- .ml-lg-n3,
- .mx-lg-n3 {
- margin-left: -1rem !important;
- }
-
- .m-lg-n4 {
- margin: -1.5rem !important;
- }
-
- .mt-lg-n4,
- .my-lg-n4 {
- margin-top: -1.5rem !important;
- }
-
- .mr-lg-n4,
- .mx-lg-n4 {
- margin-right: -1.5rem !important;
- }
-
- .mb-lg-n4,
- .my-lg-n4 {
- margin-bottom: -1.5rem !important;
- }
-
- .ml-lg-n4,
- .mx-lg-n4 {
- margin-left: -1.5rem !important;
- }
-
- .m-lg-n5 {
- margin: -3rem !important;
- }
-
- .mt-lg-n5,
- .my-lg-n5 {
- margin-top: -3rem !important;
- }
-
- .mr-lg-n5,
- .mx-lg-n5 {
- margin-right: -3rem !important;
- }
-
- .mb-lg-n5,
- .my-lg-n5 {
- margin-bottom: -3rem !important;
- }
-
- .ml-lg-n5,
- .mx-lg-n5 {
- margin-left: -3rem !important;
- }
-
- .m-lg-auto {
- margin: auto !important;
- }
-
- .mt-lg-auto,
- .my-lg-auto {
- margin-top: auto !important;
- }
-
- .mr-lg-auto,
- .mx-lg-auto {
- margin-right: auto !important;
- }
-
- .mb-lg-auto,
- .my-lg-auto {
- margin-bottom: auto !important;
- }
-
- .ml-lg-auto,
- .mx-lg-auto {
- margin-left: auto !important;
- }
-}
-
-@media (min-width: 1200px) {
- .m-xl-0 {
- margin: 0 !important;
- }
-
- .mt-xl-0,
- .my-xl-0 {
- margin-top: 0 !important;
- }
-
- .mr-xl-0,
- .mx-xl-0 {
- margin-right: 0 !important;
- }
-
- .mb-xl-0,
- .my-xl-0 {
- margin-bottom: 0 !important;
- }
-
- .ml-xl-0,
- .mx-xl-0 {
- margin-left: 0 !important;
- }
-
- .m-xl-1 {
- margin: 0.25rem !important;
- }
-
- .mt-xl-1,
- .my-xl-1 {
- margin-top: 0.25rem !important;
- }
-
- .mr-xl-1,
- .mx-xl-1 {
- margin-right: 0.25rem !important;
- }
-
- .mb-xl-1,
- .my-xl-1 {
- margin-bottom: 0.25rem !important;
- }
-
- .ml-xl-1,
- .mx-xl-1 {
- margin-left: 0.25rem !important;
- }
-
- .m-xl-2 {
- margin: 0.5rem !important;
- }
-
- .mt-xl-2,
- .my-xl-2 {
- margin-top: 0.5rem !important;
- }
-
- .mr-xl-2,
- .mx-xl-2 {
- margin-right: 0.5rem !important;
- }
-
- .mb-xl-2,
- .my-xl-2 {
- margin-bottom: 0.5rem !important;
- }
-
- .ml-xl-2,
- .mx-xl-2 {
- margin-left: 0.5rem !important;
- }
-
- .m-xl-3 {
- margin: 1rem !important;
- }
-
- .mt-xl-3,
- .my-xl-3 {
- margin-top: 1rem !important;
- }
-
- .mr-xl-3,
- .mx-xl-3 {
- margin-right: 1rem !important;
- }
-
- .mb-xl-3,
- .my-xl-3 {
- margin-bottom: 1rem !important;
- }
-
- .ml-xl-3,
- .mx-xl-3 {
- margin-left: 1rem !important;
- }
-
- .m-xl-4 {
- margin: 1.5rem !important;
- }
-
- .mt-xl-4,
- .my-xl-4 {
- margin-top: 1.5rem !important;
- }
-
- .mr-xl-4,
- .mx-xl-4 {
- margin-right: 1.5rem !important;
- }
-
- .mb-xl-4,
- .my-xl-4 {
- margin-bottom: 1.5rem !important;
- }
-
- .ml-xl-4,
- .mx-xl-4 {
- margin-left: 1.5rem !important;
- }
-
- .m-xl-5 {
- margin: 3rem !important;
- }
-
- .mt-xl-5,
- .my-xl-5 {
- margin-top: 3rem !important;
- }
-
- .mr-xl-5,
- .mx-xl-5 {
- margin-right: 3rem !important;
- }
-
- .mb-xl-5,
- .my-xl-5 {
- margin-bottom: 3rem !important;
- }
-
- .ml-xl-5,
- .mx-xl-5 {
- margin-left: 3rem !important;
- }
-
- .p-xl-0 {
- padding: 0 !important;
- }
-
- .pt-xl-0,
- .py-xl-0 {
- padding-top: 0 !important;
- }
-
- .pr-xl-0,
- .px-xl-0 {
- padding-right: 0 !important;
- }
-
- .pb-xl-0,
- .py-xl-0 {
- padding-bottom: 0 !important;
- }
-
- .pl-xl-0,
- .px-xl-0 {
- padding-left: 0 !important;
- }
-
- .p-xl-1 {
- padding: 0.25rem !important;
- }
-
- .pt-xl-1,
- .py-xl-1 {
- padding-top: 0.25rem !important;
- }
-
- .pr-xl-1,
- .px-xl-1 {
- padding-right: 0.25rem !important;
- }
-
- .pb-xl-1,
- .py-xl-1 {
- padding-bottom: 0.25rem !important;
- }
-
- .pl-xl-1,
- .px-xl-1 {
- padding-left: 0.25rem !important;
- }
-
- .p-xl-2 {
- padding: 0.5rem !important;
- }
-
- .pt-xl-2,
- .py-xl-2 {
- padding-top: 0.5rem !important;
- }
-
- .pr-xl-2,
- .px-xl-2 {
- padding-right: 0.5rem !important;
- }
-
- .pb-xl-2,
- .py-xl-2 {
- padding-bottom: 0.5rem !important;
- }
-
- .pl-xl-2,
- .px-xl-2 {
- padding-left: 0.5rem !important;
- }
-
- .p-xl-3 {
- padding: 1rem !important;
- }
-
- .pt-xl-3,
- .py-xl-3 {
- padding-top: 1rem !important;
- }
-
- .pr-xl-3,
- .px-xl-3 {
- padding-right: 1rem !important;
- }
-
- .pb-xl-3,
- .py-xl-3 {
- padding-bottom: 1rem !important;
- }
-
- .pl-xl-3,
- .px-xl-3 {
- padding-left: 1rem !important;
- }
-
- .p-xl-4 {
- padding: 1.5rem !important;
- }
-
- .pt-xl-4,
- .py-xl-4 {
- padding-top: 1.5rem !important;
- }
-
- .pr-xl-4,
- .px-xl-4 {
- padding-right: 1.5rem !important;
- }
-
- .pb-xl-4,
- .py-xl-4 {
- padding-bottom: 1.5rem !important;
- }
-
- .pl-xl-4,
- .px-xl-4 {
- padding-left: 1.5rem !important;
- }
-
- .p-xl-5 {
- padding: 3rem !important;
- }
-
- .pt-xl-5,
- .py-xl-5 {
- padding-top: 3rem !important;
- }
-
- .pr-xl-5,
- .px-xl-5 {
- padding-right: 3rem !important;
- }
-
- .pb-xl-5,
- .py-xl-5 {
- padding-bottom: 3rem !important;
- }
-
- .pl-xl-5,
- .px-xl-5 {
- padding-left: 3rem !important;
- }
-
- .m-xl-n1 {
- margin: -0.25rem !important;
- }
-
- .mt-xl-n1,
- .my-xl-n1 {
- margin-top: -0.25rem !important;
- }
-
- .mr-xl-n1,
- .mx-xl-n1 {
- margin-right: -0.25rem !important;
- }
-
- .mb-xl-n1,
- .my-xl-n1 {
- margin-bottom: -0.25rem !important;
- }
-
- .ml-xl-n1,
- .mx-xl-n1 {
- margin-left: -0.25rem !important;
- }
-
- .m-xl-n2 {
- margin: -0.5rem !important;
- }
-
- .mt-xl-n2,
- .my-xl-n2 {
- margin-top: -0.5rem !important;
- }
-
- .mr-xl-n2,
- .mx-xl-n2 {
- margin-right: -0.5rem !important;
- }
-
- .mb-xl-n2,
- .my-xl-n2 {
- margin-bottom: -0.5rem !important;
- }
-
- .ml-xl-n2,
- .mx-xl-n2 {
- margin-left: -0.5rem !important;
- }
-
- .m-xl-n3 {
- margin: -1rem !important;
- }
-
- .mt-xl-n3,
- .my-xl-n3 {
- margin-top: -1rem !important;
- }
-
- .mr-xl-n3,
- .mx-xl-n3 {
- margin-right: -1rem !important;
- }
-
- .mb-xl-n3,
- .my-xl-n3 {
- margin-bottom: -1rem !important;
- }
-
- .ml-xl-n3,
- .mx-xl-n3 {
- margin-left: -1rem !important;
- }
-
- .m-xl-n4 {
- margin: -1.5rem !important;
- }
-
- .mt-xl-n4,
- .my-xl-n4 {
- margin-top: -1.5rem !important;
- }
-
- .mr-xl-n4,
- .mx-xl-n4 {
- margin-right: -1.5rem !important;
- }
-
- .mb-xl-n4,
- .my-xl-n4 {
- margin-bottom: -1.5rem !important;
- }
-
- .ml-xl-n4,
- .mx-xl-n4 {
- margin-left: -1.5rem !important;
- }
-
- .m-xl-n5 {
- margin: -3rem !important;
- }
-
- .mt-xl-n5,
- .my-xl-n5 {
- margin-top: -3rem !important;
- }
-
- .mr-xl-n5,
- .mx-xl-n5 {
- margin-right: -3rem !important;
- }
-
- .mb-xl-n5,
- .my-xl-n5 {
- margin-bottom: -3rem !important;
- }
-
- .ml-xl-n5,
- .mx-xl-n5 {
- margin-left: -3rem !important;
- }
-
- .m-xl-auto {
- margin: auto !important;
- }
-
- .mt-xl-auto,
- .my-xl-auto {
- margin-top: auto !important;
- }
-
- .mr-xl-auto,
- .mx-xl-auto {
- margin-right: auto !important;
- }
-
- .mb-xl-auto,
- .my-xl-auto {
- margin-bottom: auto !important;
- }
-
- .ml-xl-auto,
- .mx-xl-auto {
- margin-left: auto !important;
- }
-}
-
-.stretched-link::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1;
- pointer-events: auto;
- content: "";
- background-color: rgba(0, 0, 0, 0);
-}
-
-.text-monospace {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
-}
-
-.text-justify {
- text-align: justify !important;
-}
-
-.text-wrap {
- white-space: normal !important;
-}
-
-.text-nowrap {
- white-space: nowrap !important;
-}
-
-.text-truncate {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.text-left {
- text-align: left !important;
-}
-
-.text-right {
- text-align: right !important;
-}
-
-.text-center {
- text-align: center !important;
-}
-
-@media (min-width: 576px) {
- .text-sm-left {
- text-align: left !important;
- }
-
- .text-sm-right {
- text-align: right !important;
- }
-
- .text-sm-center {
- text-align: center !important;
- }
-}
-
-@media (min-width: 768px) {
- .text-md-left {
- text-align: left !important;
- }
-
- .text-md-right {
- text-align: right !important;
- }
-
- .text-md-center {
- text-align: center !important;
- }
-}
-
-@media (min-width: 992px) {
- .text-lg-left {
- text-align: left !important;
- }
-
- .text-lg-right {
- text-align: right !important;
- }
-
- .text-lg-center {
- text-align: center !important;
- }
-}
-
-@media (min-width: 1200px) {
- .text-xl-left {
- text-align: left !important;
- }
-
- .text-xl-right {
- text-align: right !important;
- }
-
- .text-xl-center {
- text-align: center !important;
- }
-}
-
-.text-lowercase {
- text-transform: lowercase !important;
-}
-
-.text-uppercase {
- text-transform: uppercase !important;
-}
-
-.text-capitalize {
- text-transform: capitalize !important;
-}
-
-.font-weight-light {
- font-weight: 300 !important;
-}
-
-.font-weight-lighter {
- font-weight: lighter !important;
-}
-
-.font-weight-normal {
- font-weight: 400 !important;
-}
-
-.font-weight-bold {
- font-weight: 700 !important;
-}
-
-.font-weight-bolder {
- font-weight: bolder !important;
-}
-
-.font-italic {
- font-style: italic !important;
-}
-
-.text-white {
- color: #fff !important;
-}
-
-.text-primary {
- color: #007bff !important;
-}
-
-a.text-primary:hover,
-a.text-primary:focus {
- color: #0056b3 !important;
-}
-
-.text-secondary {
- color: #6c757d !important;
-}
-
-a.text-secondary:hover,
-a.text-secondary:focus {
- color: #494f54 !important;
-}
-
-.text-success {
- color: #28a745 !important;
-}
-
-a.text-success:hover,
-a.text-success:focus {
- color: #19692c !important;
-}
-
-.text-info {
- color: #17a2b8 !important;
-}
-
-a.text-info:hover,
-a.text-info:focus {
- color: #0f6674 !important;
-}
-
-.text-warning {
- color: #ffc107 !important;
-}
-
-a.text-warning:hover,
-a.text-warning:focus {
- color: #ba8b00 !important;
-}
-
-.text-danger {
- color: #dc3545 !important;
-}
-
-a.text-danger:hover,
-a.text-danger:focus {
- color: #a71d2a !important;
-}
-
-.text-light {
- color: #f8f9fa !important;
-}
-
-a.text-light:hover,
-a.text-light:focus {
- color: #cbd3da !important;
-}
-
-.text-dark {
- color: #343a40 !important;
-}
-
-a.text-dark:hover,
-a.text-dark:focus {
- color: #121416 !important;
-}
-
-.text-body {
- color: #212529 !important;
-}
-
-.text-muted {
- color: #6c757d !important;
-}
-
-.text-black-50 {
- color: rgba(0, 0, 0, 0.5) !important;
-}
-
-.text-white-50 {
- color: rgba(255, 255, 255, 0.5) !important;
-}
-
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.text-decoration-none {
- text-decoration: none !important;
-}
-
-.text-break {
- word-wrap: break-word !important;
-}
-
-.text-reset {
- color: inherit !important;
-}
-
-.visible {
- visibility: visible !important;
-}
-
-.invisible {
- visibility: hidden !important;
-}
-
-@media print {
- *,
- *::before,
- *::after {
- text-shadow: none !important;
- box-shadow: none !important;
- }
-
- a:not(.btn) {
- text-decoration: underline;
- }
-
- abbr[title]::after {
- content: " (" attr(title) ")";
- }
-
- pre {
- white-space: pre-wrap !important;
- }
-
- pre,
- blockquote {
- border: 1px solid #adb5bd;
- page-break-inside: avoid;
- }
-
- thead {
- display: table-header-group;
- }
-
- tr,
- img {
- page-break-inside: avoid;
- }
-
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
-
- h2,
- h3 {
- page-break-after: avoid;
- }
-
-@page {
- size: a3;
-}
-
- body {
- min-width: 992px !important;
- }
-
- .container {
- min-width: 992px !important;
- }
-
- .navbar {
- display: none;
- }
-
- .badge {
- border: 1px solid #000;
- }
-
- .table {
- border-collapse: collapse !important;
- }
-
- .table td,
- .table th {
- background-color: #fff !important;
- }
-
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #dee2e6 !important;
- }
-
- .table-dark {
- color: inherit;
- }
-
- .table-dark th,
- .table-dark td,
- .table-dark thead th,
- .table-dark tbody + tbody {
- border-color: #dee2e6;
- }
-
- .table .thead-dark th {
- color: inherit;
- border-color: #dee2e6;
- }
-}
-
-/*!
- * Bootstrap-select v1.13.18 (https://developer.snapappointments.com/bootstrap-select)
- *
- * Copyright 2012-2020 SnapAppointments, LLC
- * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
- */
-
-@-webkit-keyframes bs-notify-fadeOut {
- 0% {
- opacity: 0.9;
- }
-
- 100% {
- opacity: 0;
- }
-}
-
-@keyframes bs-notify-fadeOut {
- 0% {
- opacity: 0.9;
- }
-
- 100% {
- opacity: 0;
- }
-}
-
-.bootstrap-select > select.bs-select-hidden,
-select.bs-select-hidden,
-select.selectpicker {
- display: none !important;
-}
-
-.bootstrap-select {
- width: 220px\0;
- vertical-align: middle;
-}
-
-.bootstrap-select > .dropdown-toggle {
- position: relative;
- width: 100%;
- text-align: right;
- white-space: nowrap;
- display: inline-flex;
- align-items: center;
- justify-content: space-between;
-}
-
-.bootstrap-select > .dropdown-toggle:after {
- margin-top: -1px;
-}
-
-.bootstrap-select > .dropdown-toggle.bs-placeholder,
-.bootstrap-select > .dropdown-toggle.bs-placeholder:active,
-.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,
-.bootstrap-select > .dropdown-toggle.bs-placeholder:hover {
- color: #999;
-}
-
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:active,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:focus,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:hover,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:active,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:focus,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:hover,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:active,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:focus,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:hover,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:active,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:focus,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:hover,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:active,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:focus,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:hover,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:active,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:focus,
-.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:hover {
- color: rgba(255, 255, 255, 0.5);
-}
-
-.bootstrap-select > select {
- position: absolute !important;
- bottom: 0;
- left: 50%;
- display: block !important;
- width: 0.5px !important;
- height: 100% !important;
- padding: 0 !important;
- opacity: 0 !important;
- border: none;
- z-index: 0 !important;
-}
-
-.bootstrap-select > select.mobile-device {
- top: 0;
- left: 0;
- display: block !important;
- width: 100% !important;
- z-index: 2 !important;
-}
-
-.bootstrap-select.is-invalid .dropdown-toggle,
-.error .bootstrap-select .dropdown-toggle,
-.has-error .bootstrap-select .dropdown-toggle,
-.was-validated .bootstrap-select select:invalid + .dropdown-toggle {
- border-color: #b94a48;
-}
-
-.bootstrap-select.is-valid .dropdown-toggle,
-.was-validated .bootstrap-select select:valid + .dropdown-toggle {
- border-color: #28a745;
-}
-
-.bootstrap-select.fit-width {
- width: auto !important;
-}
-
-.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) {
- width: 220px;
-}
-
-.bootstrap-select .dropdown-toggle:focus,
-.bootstrap-select > select.mobile-device:focus + .dropdown-toggle {
- outline: thin dotted #333 !important;
- outline: 5px auto -webkit-focus-ring-color !important;
- outline-offset: -2px;
-}
-
-.bootstrap-select.form-control {
- margin-bottom: 0;
- padding: 0;
- border: none;
- height: auto;
-}
-
-:not(.input-group) > .bootstrap-select.form-control:not([class*=col-]) {
- width: 100%;
-}
-
-.bootstrap-select.form-control.input-group-btn {
- float: none;
- z-index: auto;
-}
-
-.form-inline .bootstrap-select,
-.form-inline .bootstrap-select.form-control:not([class*=col-]) {
- width: auto;
-}
-
-.bootstrap-select:not(.input-group-btn),
-.bootstrap-select[class*=col-] {
- float: none;
- display: inline-block;
- margin-left: 0;
-}
-
-.bootstrap-select.dropdown-menu-right,
-.bootstrap-select[class*=col-].dropdown-menu-right,
-.row .bootstrap-select[class*=col-].dropdown-menu-right {
- float: right;
-}
-
-.form-group .bootstrap-select,
-.form-horizontal .bootstrap-select,
-.form-inline .bootstrap-select {
- margin-bottom: 0;
-}
-
-.form-group-lg .bootstrap-select.form-control,
-.form-group-sm .bootstrap-select.form-control {
- padding: 0;
-}
-
-.form-group-lg .bootstrap-select.form-control .dropdown-toggle,
-.form-group-sm .bootstrap-select.form-control .dropdown-toggle {
- height: 100%;
- font-size: inherit;
- line-height: inherit;
- border-radius: inherit;
-}
-
-.bootstrap-select.form-control-lg .dropdown-toggle,
-.bootstrap-select.form-control-sm .dropdown-toggle {
- font-size: inherit;
- line-height: inherit;
- border-radius: inherit;
-}
-
-.bootstrap-select.form-control-sm .dropdown-toggle {
- padding: 0.25rem 0.5rem;
-}
-
-.bootstrap-select.form-control-lg .dropdown-toggle {
- padding: 0.5rem 1rem;
-}
-
-.form-inline .bootstrap-select .form-control {
- width: 100%;
-}
-
-.bootstrap-select.disabled,
-.bootstrap-select > .disabled {
- cursor: not-allowed;
-}
-
-.bootstrap-select.disabled:focus,
-.bootstrap-select > .disabled:focus {
- outline: 0 !important;
-}
-
-.bootstrap-select.bs-container {
- position: absolute;
- top: 0;
- left: 0;
- height: 0 !important;
- padding: 0 !important;
-}
-
-.bootstrap-select.bs-container .dropdown-menu {
- z-index: 1060;
-}
-
-.bootstrap-select .dropdown-toggle .filter-option {
- position: static;
- top: 0;
- left: 0;
- float: left;
- height: 100%;
- width: 100%;
- text-align: left;
- overflow: hidden;
- flex: 0 1 auto;
-}
-
-.bs3.bootstrap-select .dropdown-toggle .filter-option {
- padding-right: inherit;
-}
-
-.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option {
- position: absolute;
- padding-top: inherit;
- padding-bottom: inherit;
- padding-left: inherit;
- float: none;
-}
-
-.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner {
- padding-right: inherit;
-}
-
-.bootstrap-select .dropdown-toggle .filter-option-inner-inner {
- overflow: hidden;
-}
-
-.bootstrap-select .dropdown-toggle .filter-expand {
- width: 0 !important;
- float: left;
- opacity: 0 !important;
- overflow: hidden;
-}
-
-.bootstrap-select .dropdown-toggle .caret {
- position: absolute;
- top: 50%;
- right: 12px;
- margin-top: -2px;
- vertical-align: middle;
-}
-
-.input-group .bootstrap-select.form-control .dropdown-toggle {
- border-radius: inherit;
-}
-
-.bootstrap-select[class*=col-] .dropdown-toggle {
- width: 100%;
-}
-
-.bootstrap-select .dropdown-menu {
- min-width: 100%;
- box-sizing: border-box;
-}
-
-.bootstrap-select .dropdown-menu > .inner:focus {
- outline: 0 !important;
-}
-
-.bootstrap-select .dropdown-menu.inner {
- position: static;
- float: none;
- border: 0;
- padding: 0;
- margin: 0;
- border-radius: 0;
- box-shadow: none;
-}
-
-.bootstrap-select .dropdown-menu li {
- position: relative;
-}
-
-.bootstrap-select .dropdown-menu li.active small {
- color: rgba(255, 255, 255, 0.5) !important;
-}
-
-.bootstrap-select .dropdown-menu li.disabled a {
- cursor: not-allowed;
-}
-
-.bootstrap-select .dropdown-menu li a {
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.bootstrap-select .dropdown-menu li a.opt {
- position: relative;
- padding-left: 2.25em;
-}
-
-.bootstrap-select .dropdown-menu li a span.check-mark {
- display: none;
-}
-
-.bootstrap-select .dropdown-menu li a span.text {
- display: inline-block;
-}
-
-.bootstrap-select .dropdown-menu li small {
- padding-left: 0.5em;
-}
-
-.bootstrap-select .dropdown-menu .notify {
- position: absolute;
- bottom: 5px;
- width: 96%;
- margin: 0 2%;
- min-height: 26px;
- padding: 3px 5px;
- background: #f5f5f5;
- border: 1px solid #e3e3e3;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- pointer-events: none;
- opacity: 0.9;
- box-sizing: border-box;
-}
-
-.bootstrap-select .dropdown-menu .notify.fadeOut {
- -webkit-animation: 0.3s linear 750ms forwards bs-notify-fadeOut;
- animation: 0.3s linear 750ms forwards bs-notify-fadeOut;
-}
-
-.bootstrap-select .no-results {
- padding: 3px;
- background: #f5f5f5;
- margin: 0 5px;
- white-space: nowrap;
-}
-
-.bootstrap-select.fit-width .dropdown-toggle .filter-option {
- position: static;
- display: inline;
- padding: 0;
-}
-
-.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,
-.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner {
- display: inline;
-}
-
-.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before {
- content: "\A0";
-}
-
-.bootstrap-select.fit-width .dropdown-toggle .caret {
- position: static;
- top: auto;
- margin-top: -1px;
-}
-
-.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark {
- position: absolute;
- display: inline-block;
- right: 15px;
- top: 5px;
-}
-
-.bootstrap-select.show-tick .dropdown-menu li a span.text {
- margin-right: 34px;
-}
-
-.bootstrap-select .bs-ok-default:after {
- content: "";
- display: block;
- width: 0.5em;
- height: 1em;
- border-style: solid;
- border-width: 0 0.26em 0.26em 0;
- transform-style: preserve-3d;
- transform: rotate(45deg);
-}
-
-.bootstrap-select.show-menu-arrow.open > .dropdown-toggle,
-.bootstrap-select.show-menu-arrow.show > .dropdown-toggle {
- z-index: 1061;
-}
-
-.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before {
- content: "";
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-bottom: 7px solid rgba(204, 204, 204, 0.2);
- position: absolute;
- bottom: -4px;
- left: 9px;
- display: none;
-}
-
-.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after {
- content: "";
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 6px solid #fff;
- position: absolute;
- bottom: -4px;
- left: 10px;
- display: none;
-}
-
-.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before {
- bottom: auto;
- top: -4px;
- border-top: 7px solid rgba(204, 204, 204, 0.2);
- border-bottom: 0;
-}
-
-.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after {
- bottom: auto;
- top: -4px;
- border-top: 6px solid #fff;
- border-bottom: 0;
-}
-
-.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before {
- right: 12px;
- left: auto;
-}
-
-.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after {
- right: 13px;
- left: auto;
-}
-
-.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:after,
-.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:before,
-.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:after,
-.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:before {
- display: block;
-}
-
-.bs-actionsbox,
-.bs-donebutton,
-.bs-searchbox {
- padding: 4px 8px;
-}
-
-.bs-actionsbox {
- width: 100%;
- box-sizing: border-box;
-}
-
-.bs-actionsbox .btn-group button {
- width: 50%;
-}
-
-.bs-donebutton {
- float: left;
- width: 100%;
- box-sizing: border-box;
-}
-
-.bs-donebutton .btn-group button {
- width: 100%;
-}
-
-.bs-searchbox + .bs-actionsbox {
- padding: 0 8px 4px;
-}
-
-.bs-searchbox .form-control {
- margin-bottom: 0;
- width: 100%;
- float: none;
-}
-
-/* classes attached to
*/
-
-.fc-not-allowed,
-.fc-not-allowed .fc-event {
- /* override events' custom cursors */
- cursor: not-allowed;
-}
-
-.fc-unselectable {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-.fc {
- /* layout of immediate children */
- display: flex;
- flex-direction: column;
- font-size: 1em;
-}
-
-.fc,
-.fc *,
-.fc *:before,
-.fc *:after {
- box-sizing: border-box;
-}
-
-.fc table {
- border-collapse: collapse;
- border-spacing: 0;
- font-size: 1em;
- /* normalize cross-browser */
-}
-
-.fc th {
- text-align: center;
-}
-
-.fc th,
-.fc td {
- vertical-align: top;
- padding: 0;
-}
-
-.fc a[data-navlink] {
- cursor: pointer;
-}
-
-.fc a[data-navlink]:hover {
- text-decoration: underline;
-}
-
-.fc-direction-ltr {
- direction: ltr;
- text-align: left;
-}
-
-.fc-direction-rtl {
- direction: rtl;
- text-align: right;
-}
-
-.fc-theme-standard td,
-.fc-theme-standard th {
- border: 1px solid #ddd;
- border: 1px solid var(--fc-border-color, #ddd);
-}
-
-/* for FF, which doesn't expand a 100% div within a table cell. use absolute positioning */
-
-/* inner-wrappers are responsible for being absolute */
-
-/* TODO: best place for this? */
-
-.fc-liquid-hack td,
-.fc-liquid-hack th {
- position: relative;
-}
-
-@font-face {
- font-family: "fcicons";
- src: url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype");
- font-weight: normal;
- font-style: normal;
-}
-
-.fc-icon {
- /* added for fc */
- display: inline-block;
- width: 1em;
- height: 1em;
- text-align: center;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- /* use !important to prevent issues with browser extensions that change fonts */
- font-family: "fcicons" !important;
- speak: none;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.fc-icon-chevron-left:before {
- content: "\E900";
-}
-
-.fc-icon-chevron-right:before {
- content: "\E901";
-}
-
-.fc-icon-chevrons-left:before {
- content: "\E902";
-}
-
-.fc-icon-chevrons-right:before {
- content: "\E903";
-}
-
-.fc-icon-minus-square:before {
- content: "\E904";
-}
-
-.fc-icon-plus-square:before {
- content: "\E905";
-}
-
-.fc-icon-x:before {
- content: "\E906";
-}
-
-/*
-Lots taken from Flatly (MIT): https://bootswatch.com/4/flatly/bootstrap.css
-
-These styles only apply when the standard-theme is activated.
-When it's NOT activated, the fc-button classes won't even be in the DOM.
-*/
-
-.fc {
- /* reset */
-}
-
-.fc .fc-button {
- border-radius: 0;
- overflow: visible;
- text-transform: none;
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-
-.fc .fc-button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color;
-}
-
-.fc .fc-button {
- -webkit-appearance: button;
-}
-
-.fc .fc-button:not(:disabled) {
- cursor: pointer;
-}
-
-.fc .fc-button::-moz-focus-inner {
- padding: 0;
- border-style: none;
-}
-
-.fc {
- /* theme */
-}
-
-.fc .fc-button {
- display: inline-block;
- font-weight: 400;
- text-align: center;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: 0.4em 0.65em;
- font-size: 1em;
- line-height: 1.5;
- border-radius: 0.25em;
-}
-
-.fc .fc-button:hover {
- text-decoration: none;
-}
-
-.fc .fc-button:focus {
- outline: 0;
- box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25);
-}
-
-.fc .fc-button:disabled {
- opacity: 0.65;
-}
-
-.fc {
- /* "primary" coloring */
-}
-
-.fc .fc-button-primary {
- color: #fff;
- color: var(--fc-button-text-color, #fff);
- background-color: #2C3E50;
- background-color: var(--fc-button-bg-color, #2C3E50);
- border-color: #2C3E50;
- border-color: var(--fc-button-border-color, #2C3E50);
-}
-
-.fc .fc-button-primary:hover {
- color: #fff;
- color: var(--fc-button-text-color, #fff);
- background-color: #1e2b37;
- background-color: var(--fc-button-hover-bg-color, #1e2b37);
- border-color: #1a252f;
- border-color: var(--fc-button-hover-border-color, #1a252f);
-}
-
-.fc .fc-button-primary:disabled {
- /* not DRY */
- color: #fff;
- color: var(--fc-button-text-color, #fff);
- background-color: #2C3E50;
- background-color: var(--fc-button-bg-color, #2C3E50);
- border-color: #2C3E50;
- border-color: var(--fc-button-border-color, #2C3E50);
- /* overrides :hover */
-}
-
-.fc .fc-button-primary:focus {
- box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);
-}
-
-.fc .fc-button-primary:not(:disabled):active,
-.fc .fc-button-primary:not(:disabled).fc-button-active {
- color: #fff;
- color: var(--fc-button-text-color, #fff);
- background-color: #1a252f;
- background-color: var(--fc-button-active-bg-color, #1a252f);
- border-color: #151e27;
- border-color: var(--fc-button-active-border-color, #151e27);
-}
-
-.fc .fc-button-primary:not(:disabled):active:focus,
-.fc .fc-button-primary:not(:disabled).fc-button-active:focus {
- box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);
-}
-
-.fc {
- /* icons within buttons */
-}
-
-.fc .fc-button .fc-icon {
- vertical-align: middle;
- font-size: 1.5em;
- /* bump up the size (but don't make it bigger than line-height of button, which is 1.5em also) */
-}
-
-.fc .fc-button-group {
- position: relative;
- display: inline-flex;
- vertical-align: middle;
-}
-
-.fc .fc-button-group > .fc-button {
- position: relative;
- flex: 1 1 auto;
-}
-
-.fc .fc-button-group > .fc-button:hover {
- z-index: 1;
-}
-
-.fc .fc-button-group > .fc-button:focus,
-.fc .fc-button-group > .fc-button:active,
-.fc .fc-button-group > .fc-button.fc-button-active {
- z-index: 1;
-}
-
-.fc-direction-ltr .fc-button-group > .fc-button:not(:first-child) {
- margin-left: -1px;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.fc-direction-ltr .fc-button-group > .fc-button:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.fc-direction-rtl .fc-button-group > .fc-button:not(:first-child) {
- margin-right: -1px;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.fc-direction-rtl .fc-button-group > .fc-button:not(:last-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.fc .fc-toolbar {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.fc .fc-toolbar.fc-header-toolbar {
- margin-bottom: 1.5em;
-}
-
-.fc .fc-toolbar.fc-footer-toolbar {
- margin-top: 1.5em;
-}
-
-.fc .fc-toolbar-title {
- font-size: 1.75em;
- margin: 0;
-}
-
-.fc-direction-ltr .fc-toolbar > * > :not(:first-child) {
- margin-left: 0.75em;
- /* space between */
-}
-
-.fc-direction-rtl .fc-toolbar > * > :not(:first-child) {
- margin-right: 0.75em;
- /* space between */
-}
-
-.fc-direction-rtl .fc-toolbar-ltr {
- /* when the toolbar-chunk positioning system is explicitly left-to-right */
- flex-direction: row-reverse;
-}
-
-.fc .fc-scroller {
- -webkit-overflow-scrolling: touch;
- position: relative;
- /* for abs-positioned elements within */
-}
-
-.fc .fc-scroller-liquid {
- height: 100%;
-}
-
-.fc .fc-scroller-liquid-absolute {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- bottom: 0;
-}
-
-.fc .fc-scroller-harness {
- position: relative;
- overflow: hidden;
- direction: ltr;
- /* hack for chrome computing the scroller's right/left wrong for rtl. undone below... */
- /* TODO: demonstrate in codepen */
-}
-
-.fc .fc-scroller-harness-liquid {
- height: 100%;
-}
-
-.fc-direction-rtl .fc-scroller-harness > .fc-scroller {
- /* undo above hack */
- direction: rtl;
-}
-
-.fc-theme-standard .fc-scrollgrid {
- border: 1px solid #ddd;
- border: 1px solid var(--fc-border-color, #ddd);
- /* bootstrap does this. match */
-}
-
-.fc .fc-scrollgrid,
-.fc .fc-scrollgrid table {
- /* all tables (self included) */
- width: 100%;
- /* because tables don't normally do this */
- table-layout: fixed;
-}
-
-.fc .fc-scrollgrid table {
- /* inner tables */
- border-top-style: hidden;
- border-left-style: hidden;
- border-right-style: hidden;
-}
-
-.fc .fc-scrollgrid > tbody table,
-.fc .fc-scrollgrid > tfoot table {
- border-bottom-style: hidden;
- /* head keeps its bottom border tho */
-}
-
-.fc .fc-scrollgrid {
- border-collapse: separate;
- border-right-width: 0;
- border-bottom-width: 0;
-}
-
-.fc .fc-scrollgrid > * > tr > * {
- border-top-width: 0;
- border-left-width: 0;
-}
-
-.fc .fc-scrollgrid > thead > tr > *,
-.fc .fc-scrollgrid > tfoot > tr > * {
- border-bottom-width: 0;
-}
-
-.fc .fc-scrollgrid-liquid {
- height: 100%;
-}
-
-.fc .fc-scrollgrid-section {
- /* a */
- height: 0;
-}
-
-.fc .fc-scrollgrid-section > td {
- height: 0;
- /* needs a height so inner div within grow */
-}
-
-.fc .fc-scrollgrid-section table {
- height: 1px;
- /* for most browsers, if a height isn't set on the table, can't do liquid-height within cells */
- /* serves as a min-height. harmless */
-}
-
-.fc .fc-scrollgrid-section-liquid {
- height: auto;
-}
-
-.fc .fc-scrollgrid-section-liquid > td {
- height: 100%;
- /* FF needs this instead of auto */
-}
-
-.fc {
- /* stickiness */
-}
-
-.fc .fc-scrollgrid-section-sticky > * {
- background: #fff;
- background: var(--fc-page-bg-color, #fff);
- position: -webkit-sticky;
- position: sticky;
- z-index: 2;
- /* TODO: var */
- /* TODO: box-shadow when sticking */
-}
-
-.fc .fc-scrollgrid > thead > .fc-scrollgrid-section-sticky > * {
- top: 0;
- /* because border-sharing causes a gap at the top */
- /* TODO: give safari -1. has bug */
-}
-
-.fc .fc-scrollgrid > tfoot > .fc-scrollgrid-section-sticky > * {
- bottom: 0;
- /* known bug: bottom-stickiness doesn't work in safari */
-}
-
-.fc .fc-scrollgrid-sticky-shim {
- /* for horizontal scrollbar */
- height: 1px;
- /* needs height to create scrollbars */
- margin-bottom: -1px;
-}
-
-.fc .fc-sticky {
- position: -webkit-sticky;
- position: sticky;
-}
-
-.fc .fc-view-harness {
- flex-grow: 1;
- /* because this harness is WITHIN the .fc's flexbox */
- position: relative;
-}
-
-.fc {
- /* when the harness controls the height, make the view liquid */
-}
-
-.fc .fc-view-harness-active > .fc-view {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
-}
-
-.fc .fc-col-header-cell-cushion {
- display: inline-block;
- /* x-browser for when sticky (when multi-tier header) */
- padding: 2px 4px;
-}
-
-.fc .fc-bg-event,
-.fc .fc-non-business,
-.fc .fc-highlight {
- /* will always have a harness with position:relative/absolute, so absolutely expand */
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-
-.fc .fc-non-business {
- background: rgba(215, 215, 215, 0.3);
- background: var(--fc-non-business-color, rgba(215, 215, 215, 0.3));
-}
-
-.fc .fc-bg-event {
- background: rgb(143, 223, 130);
- background: var(--fc-bg-event-color, rgb(143, 223, 130));
- opacity: 0.3;
- opacity: var(--fc-bg-event-opacity, 0.3);
-}
-
-.fc .fc-bg-event .fc-event-title {
- margin: 0.5em;
- font-size: 0.85em;
- font-size: var(--fc-small-font-size, 0.85em);
- font-style: italic;
-}
-
-.fc .fc-highlight {
- background: rgba(188, 232, 241, 0.3);
- background: var(--fc-highlight-color, rgba(188, 232, 241, 0.3));
-}
-
-.fc .fc-cell-shaded,
-.fc .fc-day-disabled {
- background: rgba(208, 208, 208, 0.3);
- background: var(--fc-neutral-bg-color, rgba(208, 208, 208, 0.3));
-}
-
-/* link resets */
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-a.fc-event,
-a.fc-event:hover {
- text-decoration: none;
-}
-
-/* cursor */
-
-.fc-event[href],
-.fc-event.fc-event-draggable {
- cursor: pointer;
-}
-
-/* event text content */
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-.fc-event .fc-event-main {
- position: relative;
- z-index: 2;
-}
-
-/* dragging */
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-.fc-event-dragging:not(.fc-event-selected) {
- /* MOUSE */
- opacity: 0.75;
-}
-
-.fc-event-dragging.fc-event-selected {
- /* TOUCH */
- box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3);
-}
-
-/* resizing */
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-/* (subclasses should hone positioning for touch and non-touch) */
-
-.fc-event .fc-event-resizer {
- display: none;
- position: absolute;
- z-index: 4;
-}
-
-.fc-event:hover,
-.fc-event-selected {
- /* TOUCH */
-}
-
-.fc-event:hover .fc-event-resizer,
-.fc-event-selected .fc-event-resizer {
- display: block;
-}
-
-.fc-event-selected .fc-event-resizer {
- border-radius: 4px;
- border-radius: calc(var(--fc-event-resizer-dot-total-width, 8px) / 2);
- border-width: 1px;
- border-width: var(--fc-event-resizer-dot-border-width, 1px);
- width: 8px;
- width: var(--fc-event-resizer-dot-total-width, 8px);
- height: 8px;
- height: var(--fc-event-resizer-dot-total-width, 8px);
- border-style: solid;
- border-color: inherit;
- background: #fff;
- background: var(--fc-page-bg-color, #fff);
-}
-
-.fc-event-selected .fc-event-resizer:before {
- content: "";
- position: absolute;
- top: -20px;
- left: -20px;
- right: -20px;
- bottom: -20px;
-}
-
-/* selecting (always TOUCH) */
-
-/* ---------------------------------------------------------------------------------------------------- */
-
-.fc-event-selected {
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
-}
-
-.fc-event-selected:before {
- content: "";
- position: absolute;
- z-index: 3;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-
-.fc-event-selected {
- /* dimmer effect */
-}
-
-.fc-event-selected:after {
- content: "";
- background: rgba(0, 0, 0, 0.25);
- background: var(--fc-event-selected-overlay-color, rgba(0, 0, 0, 0.25));
- position: absolute;
- z-index: 1;
- /* assume there's a border on all sides. overcome it. */
- /* sometimes there's NOT a border, in which case the dimmer will go over */
- /* an adjacent border, which looks fine. */
- top: -1px;
- left: -1px;
- right: -1px;
- bottom: -1px;
-}
-
-/*
-A HORIZONTAL event
-*/
-
-.fc-h-event {
- /* allowed to be top-level */
- display: block;
- border: 1px solid #3788d8;
- border: 1px solid var(--fc-event-bg-color, #3788d8);
- background-color: #3788d8;
- background-color: var(--fc-event-border-color, #3788d8);
-}
-
-.fc-h-event .fc-event-main {
- color: #fff;
- color: var(--fc-event-text-color, #fff);
-}
-
-.fc-h-event .fc-event-main-frame {
- display: flex;
- /* for make fc-event-title-container expand */
-}
-
-.fc-h-event .fc-event-time {
- max-width: 100%;
- /* clip overflow on this element */
- overflow: hidden;
-}
-
-.fc-h-event .fc-event-title-container {
- /* serves as a container for the sticky cushion */
- flex-grow: 1;
- flex-shrink: 1;
- min-width: 0;
- /* important for allowing to shrink all the way */
-}
-
-.fc-h-event .fc-event-title {
- display: inline-block;
- /* need this to be sticky cross-browser */
- vertical-align: top;
- /* for not messing up line-height */
- left: 0;
- /* for sticky */
- right: 0;
- /* for sticky */
- max-width: 100%;
- /* clip overflow on this element */
- overflow: hidden;
-}
-
-.fc-h-event.fc-event-selected:before {
- /* expand hit area */
- top: -10px;
- bottom: -10px;
-}
-
-/* adjust border and border-radius (if there is any) for non-start/end */
-
-.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),
-.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- border-left-width: 0;
-}
-
-.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),
-.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-right-width: 0;
-}
-
-/* resizers */
-
-.fc-h-event:not(.fc-event-selected) .fc-event-resizer {
- top: 0;
- bottom: 0;
- width: 8px;
- width: var(--fc-event-resizer-thickness, 8px);
-}
-
-.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,
-.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end {
- cursor: w-resize;
- left: -4px;
- left: calc(var(--fc-event-resizer-thickness, 8px) / -2);
-}
-
-.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,
-.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start {
- cursor: e-resize;
- right: -4px;
- right: calc(var(--fc-event-resizer-thickness, 8px) / -2);
-}
-
-/* resizers for TOUCH */
-
-.fc-h-event.fc-event-selected .fc-event-resizer {
- top: 50%;
- margin-top: -4px;
- margin-top: calc(var(--fc-event-resizer-dot-total-width, 8px) / -2);
-}
-
-.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,
-.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end {
- left: -4px;
- left: calc(var(--fc-event-resizer-dot-total-width, 8px) / -2);
-}
-
-.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,
-.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start {
- right: -4px;
- right: calc(var(--fc-event-resizer-dot-total-width, 8px) / -2);
-}
-
-/*
-A VERTICAL event
-*/
-
-.fc-v-event {
- /* allowed to be top-level */
- display: block;
- border: 1px solid #3788d8;
- border: 1px solid var(--fc-event-border-color, #3788d8);
- background-color: #3788d8;
- background-color: var(--fc-event-bg-color, #3788d8);
-}
-
-.fc-v-event .fc-event-main {
- color: #fff;
- color: var(--fc-event-text-color, #fff);
- height: 100%;
-}
-
-.fc-v-event .fc-event-main-frame {
- height: 100%;
- display: flex;
- flex-direction: column;
-}
-
-.fc-v-event .fc-event-time {
- flex-grow: 0;
- flex-shrink: 0;
- max-height: 100%;
- overflow: hidden;
-}
-
-.fc-v-event .fc-event-title-container {
- /* a container for the sticky cushion */
- flex-grow: 1;
- flex-shrink: 1;
- min-height: 0;
- /* important for allowing to shrink all the way */
-}
-
-.fc-v-event .fc-event-title {
- /* will have fc-sticky on it */
- top: 0;
- bottom: 0;
- max-height: 100%;
- /* clip overflow */
- overflow: hidden;
-}
-
-.fc-v-event:not(.fc-event-start) {
- border-top-width: 0;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.fc-v-event:not(.fc-event-end) {
- border-bottom-width: 0;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.fc-v-event.fc-event-selected:before {
- /* expand hit area */
- left: -10px;
- right: -10px;
-}
-
-.fc-v-event {
- /* resizer (mouse AND touch) */
-}
-
-.fc-v-event .fc-event-resizer-start {
- cursor: n-resize;
-}
-
-.fc-v-event .fc-event-resizer-end {
- cursor: s-resize;
-}
-
-.fc-v-event {
- /* resizer for MOUSE */
-}
-
-.fc-v-event:not(.fc-event-selected) .fc-event-resizer {
- height: 8px;
- height: var(--fc-event-resizer-thickness, 8px);
- left: 0;
- right: 0;
-}
-
-.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start {
- top: -4px;
- top: calc(var(--fc-event-resizer-thickness, 8px) / -2);
-}
-
-.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end {
- bottom: -4px;
- bottom: calc(var(--fc-event-resizer-thickness, 8px) / -2);
-}
-
-.fc-v-event {
- /* resizer for TOUCH (when event is "selected") */
-}
-
-.fc-v-event.fc-event-selected .fc-event-resizer {
- left: 50%;
- margin-left: -4px;
- margin-left: calc(var(--fc-event-resizer-dot-total-width, 8px) / -2);
-}
-
-.fc-v-event.fc-event-selected .fc-event-resizer-start {
- top: -4px;
- top: calc(var(--fc-event-resizer-dot-total-width, 8px) / -2);
-}
-
-.fc-v-event.fc-event-selected .fc-event-resizer-end {
- bottom: -4px;
- bottom: calc(var(--fc-event-resizer-dot-total-width, 8px) / -2);
-}
-
-.fc .fc-timegrid .fc-daygrid-body {
- /* the all-day daygrid within the timegrid view */
- z-index: 2;
- /* put above the timegrid-body so that more-popover is above everything. TODO: better solution */
-}
-
-.fc .fc-timegrid-divider {
- padding: 0 0 2px;
- /* browsers get confused when you set height. use padding instead */
-}
-
-.fc .fc-timegrid-body {
- position: relative;
- z-index: 1;
- /* scope the z-indexes of slots and cols */
- min-height: 100%;
- /* fill height always, even when slat table doesn't grow */
-}
-
-.fc .fc-timegrid-axis-chunk {
- /* for advanced ScrollGrid */
- position: relative;
-}
-
-.fc .fc-timegrid-axis-chunk > table {
- position: relative;
- z-index: 1;
- /* above the now-indicator-container */
-}
-
-.fc .fc-timegrid-slots {
- position: relative;
- z-index: 2;
-}
-
-.fc .fc-timegrid-slot {
- /* a */
- height: 1.5em;
- border-bottom: 0;
- /* each cell owns its top border */
-}
-
-.fc .fc-timegrid-slot-minor {
- border-top-style: dotted;
-}
-
-.fc .fc-timegrid-slot-label-cushion {
- display: inline-block;
- white-space: nowrap;
-}
-
-.fc .fc-timegrid-slot-label {
- vertical-align: middle;
- /* vertical align the slots */
-}
-
-.fc {
- /* slots AND axis cells (top-left corner of view including the "all-day" text) */
-}
-
-.fc .fc-timegrid-axis-cushion,
-.fc .fc-timegrid-slot-label-cushion {
- padding: 0 4px;
-}
-
-.fc {
- /* axis cells (top-left corner of view including the "all-day" text) */
- /* vertical align is more complicated, uses flexbox */
-}
-
-.fc .fc-timegrid-axis-frame-liquid {
- height: 100%;
- /* will need liquid-hack in FF */
-}
-
-.fc .fc-timegrid-axis-frame {
- overflow: hidden;
- display: flex;
- align-items: center;
- /* vertical align */
- justify-content: flex-end;
- /* horizontal align. matches text-align below */
-}
-
-.fc .fc-timegrid-axis-cushion {
- max-width: 60px;
- /* limits the width of the "all-day" text */
- flex-shrink: 0;
- /* allows text to expand how it normally would, regardless of constrained width */
-}
-
-.fc-direction-ltr .fc-timegrid-slot-label-frame {
- text-align: right;
-}
-
-.fc-direction-rtl .fc-timegrid-slot-label-frame {
- text-align: left;
-}
-
-.fc-liquid-hack .fc-timegrid-axis-frame-liquid {
- height: auto;
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
-}
-
-.fc .fc-timegrid-col.fc-day-today {
- background-color: rgba(255, 220, 40, 0.15);
- background-color: var(--fc-today-bg-color, rgba(255, 220, 40, 0.15));
-}
-
-.fc .fc-timegrid-col-frame {
- min-height: 100%;
- /* liquid-hack is below */
- position: relative;
-}
-
-.fc-liquid-hack .fc-timegrid-col-frame {
- height: auto;
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
-}
-
-.fc-media-screen .fc-timegrid-cols {
- position: absolute;
- /* no z-index. children will decide and go above slots */
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-
-.fc-media-screen .fc-timegrid-cols > table {
- height: 100%;
-}
-
-.fc-media-screen .fc-timegrid-col-bg,
-.fc-media-screen .fc-timegrid-col-events,
-.fc-media-screen .fc-timegrid-now-indicator-container {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
-}
-
-.fc-media-screen .fc-timegrid-event-harness {
- position: absolute;
- /* top/left/right/bottom will all be set by JS */
-}
-
-.fc {
- /* bg */
-}
-
-.fc .fc-timegrid-col-bg {
- z-index: 1;
- /* TODO: kill */
-}
-
-.fc .fc-timegrid-col-bg .fc-non-business {
- z-index: 1;
-}
-
-.fc .fc-timegrid-col-bg .fc-bg-event {
- z-index: 2;
-}
-
-.fc .fc-timegrid-col-bg .fc-highlight {
- z-index: 3;
-}
-
-.fc .fc-timegrid-bg-harness {
- position: absolute;
- /* top/bottom will be set by JS */
- left: 0;
- right: 0;
-}
-
-.fc {
- /* fg events */
- /* (the mirror segs are put into a separate container with same classname, */
- /* and they must be after the normal seg container to appear at a higher z-index) */
-}
-
-.fc .fc-timegrid-col-events {
- z-index: 3;
- /* child event segs have z-indexes that are scoped within this div */
-}
-
-.fc {
- /* now indicator */
-}
-
-.fc .fc-timegrid-now-indicator-container {
- bottom: 0;
- overflow: hidden;
- /* don't let overflow of lines/arrows cause unnecessary scrolling */
- /* z-index is set on the individual elements */
-}
-
-.fc-direction-ltr .fc-timegrid-col-events {
- margin: 0 2.5% 0 2px;
-}
-
-.fc-direction-rtl .fc-timegrid-col-events {
- margin: 0 2px 0 2.5%;
-}
-
-.fc-timegrid-event-harness-inset .fc-timegrid-event,
-.fc-timegrid-event.fc-event-mirror {
- box-shadow: 0px 0px 0px 1px #fff;
- box-shadow: 0px 0px 0px 1px var(--fc-page-bg-color, #fff);
-}
-
-.fc-timegrid-event {
- /* events need to be root */
- font-size: 0.85em;
- font-size: var(--fc-small-font-size, 0.85em);
- border-radius: 3px;
-}
-
-.fc-timegrid-event .fc-event-main {
- padding: 1px 1px 0;
-}
-
-.fc-timegrid-event .fc-event-time {
- white-space: nowrap;
- font-size: 0.85em;
- font-size: var(--fc-small-font-size, 0.85em);
- margin-bottom: 1px;
-}
-
-.fc-timegrid-event-condensed .fc-event-main-frame {
- flex-direction: row;
- overflow: hidden;
-}
-
-.fc-timegrid-event-condensed .fc-event-time:after {
- content: "\A0-\A0";
- /* dash surrounded by non-breaking spaces */
-}
-
-.fc-timegrid-event-condensed .fc-event-title {
- font-size: 0.85em;
- font-size: var(--fc-small-font-size, 0.85em);
-}
-
-.fc-media-screen .fc-timegrid-event {
- position: absolute;
- /* absolute WITHIN the harness */
- top: 0;
- bottom: 1px;
- /* stay away from bottom slot line */
- left: 0;
- right: 0;
-}
-
-.fc {
- /* line */
-}
-
-.fc .fc-timegrid-now-indicator-line {
- position: absolute;
- z-index: 4;
- left: 0;
- right: 0;
- border-style: solid;
- border-color: red;
- border-color: var(--fc-now-indicator-color, red);
- border-width: 1px 0 0;
-}
-
-.fc {
- /* arrow */
-}
-
-.fc .fc-timegrid-now-indicator-arrow {
- position: absolute;
- z-index: 4;
- margin-top: -5px;
- /* vertically center on top coordinate */
- border-style: solid;
- border-color: red;
- border-color: var(--fc-now-indicator-color, red);
-}
-
-.fc-direction-ltr .fc-timegrid-now-indicator-arrow {
- left: 0;
- /* triangle pointing right. TODO: mixin */
- border-width: 5px 0 5px 6px;
- border-top-color: transparent;
- border-bottom-color: transparent;
-}
-
-.fc-direction-rtl .fc-timegrid-now-indicator-arrow {
- right: 0;
- /* triangle pointing left. TODO: mixin */
- border-width: 5px 6px 5px 0;
- border-top-color: transparent;
- border-bottom-color: transparent;
-}
-
diff --git a/src/backend/public/js/app.js b/src/backend/public/js/app.js
deleted file mode 100644
index cf836113ed119cc275b170ff6e28bd04573803da..0000000000000000000000000000000000000000
--- a/src/backend/public/js/app.js
+++ /dev/null
@@ -1,54674 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "/";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./node_modules/@fullcalendar/common/main.css":
-/*!****************************************************!*\
- !*** ./node_modules/@fullcalendar/common/main.css ***!
- \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-
-var content = __webpack_require__(/*! !../../css-loader??ref--6-1!../../postcss-loader/src??ref--6-2!./main.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/@fullcalendar/common/main.css");
-
-if(typeof content === 'string') content = [[module.i, content, '']];
-
-var transform;
-var insertInto;
-
-
-
-var options = {"hmr":true}
-
-options.transform = transform
-options.insertInto = undefined;
-
-var update = __webpack_require__(/*! ../../style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
-
-if(content.locals) module.exports = content.locals;
-
-if(false) {}
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/common/main.js":
-/*!***************************************************!*\
- !*** ./node_modules/@fullcalendar/common/main.js ***!
- \***************************************************/
-/*! exports provided: Component, createElement, render, createRef, Fragment, createContext, flushToDom, BASE_OPTION_DEFAULTS, BASE_OPTION_REFINERS, BaseComponent, BgEvent, CalendarApi, CalendarContent, CalendarDataManager, CalendarDataProvider, CalendarRoot, ContentHook, CustomContentRenderContext, DateComponent, DateEnv, DateProfileGenerator, DayCellContent, DayCellRoot, DayHeader, DaySeriesModel, DayTableModel, DelayedRunner, ElementDragging, ElementScrollController, Emitter, EventApi, EventRoot, EventSourceApi, Interaction, MountHook, NamedTimeZoneImpl, NowIndicatorRoot, NowTimer, PositionCache, RefMap, RenderHook, ScrollController, ScrollResponder, Scroller, SimpleScrollGrid, Slicer, Splitter, StandardEvent, TableDateCell, TableDowCell, Theme, ViewApi, ViewContextType, ViewRoot, WeekNumberRoot, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildClassNameNormalizer, buildEventApis, buildEventRangeKey, buildHashFromArray, buildNavLinkData, buildSegCompareObj, buildSegTimeText, collectFromHash, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compareObjs, computeEdges, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeSegDraggable, computeSegEndResizable, computeSegStartResizable, computeShrinkWidth, computeSmallestCellWidth, computeVisibleDayRange, config, constrainPoint, createDuration, createEmptyEventStore, createEventInstance, createEventUi, createFormatter, createPlugin, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findDirectChildren, findElements, flexibleCompare, formatDate, formatDayString, formatIsoTimeString, formatRange, getAllowYScrolling, getClippingParents, getDateMeta, getDayClassNames, getDefaultEventEnd, getElSeg, getEventClassNames, getIsRtlScrollbarOnLeft, getRectCenter, getRelevantEvents, getScrollGridClassNames, getScrollbarWidths, getSectionClassNames, getSectionHasLiquidHeight, getSegMeta, getSlotClassNames, getStickyFooterScrollbar, getStickyHeaderDates, getUnequalProps, globalLocales, globalPlugins, greatestDurationDenominator, guid, hasBgRendering, hasShrinkWidth, htmlToElement, identity, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isColPropsEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, memoize, memoizeArraylike, memoizeHashlike, memoizeObjArg, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseClassNames, parseDragMeta, parseEventDef, parseFieldSpecs, parseMarker, pointInsideRect, preventContextMenu, preventDefault, preventSelection, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineEventDef, refineProps, removeElement, removeExact, renderChunkContent, renderFill, renderMicroColGroup, renderScrollShim, requestJson, sanitizeShrinkWidth, setElSeg, setRef, sliceEventStore, sliceEvents, sortEventSegs, startOfDay, translateRect, triggerDateSelect, unpromisify, version, whenTransitionDone, wholeDivideDurations */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BASE_OPTION_DEFAULTS", function() { return BASE_OPTION_DEFAULTS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BASE_OPTION_REFINERS", function() { return BASE_OPTION_REFINERS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseComponent", function() { return BaseComponent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BgEvent", function() { return BgEvent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CalendarApi", function() { return CalendarApi; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CalendarContent", function() { return CalendarContent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CalendarDataManager", function() { return CalendarDataManager; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CalendarDataProvider", function() { return CalendarDataProvider; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CalendarRoot", function() { return CalendarRoot; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ContentHook", function() { return ContentHook; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CustomContentRenderContext", function() { return CustomContentRenderContext; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateComponent", function() { return DateComponent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateEnv", function() { return DateEnv; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateProfileGenerator", function() { return DateProfileGenerator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayCellContent", function() { return DayCellContent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayCellRoot", function() { return DayCellRoot; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayHeader", function() { return DayHeader; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DaySeriesModel", function() { return DaySeriesModel; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayTableModel", function() { return DayTableModel; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DelayedRunner", function() { return DelayedRunner; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ElementDragging", function() { return ElementDragging; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ElementScrollController", function() { return ElementScrollController; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Emitter", function() { return Emitter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventApi", function() { return EventApi; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventRoot", function() { return EventRoot; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventSourceApi", function() { return EventSourceApi; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Interaction", function() { return Interaction; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MountHook", function() { return MountHook; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NamedTimeZoneImpl", function() { return NamedTimeZoneImpl; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NowIndicatorRoot", function() { return NowIndicatorRoot; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NowTimer", function() { return NowTimer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PositionCache", function() { return PositionCache; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RefMap", function() { return RefMap; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RenderHook", function() { return RenderHook; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScrollController", function() { return ScrollController; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScrollResponder", function() { return ScrollResponder; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scroller", function() { return Scroller; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SimpleScrollGrid", function() { return SimpleScrollGrid; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Slicer", function() { return Slicer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Splitter", function() { return Splitter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StandardEvent", function() { return StandardEvent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TableDateCell", function() { return TableDateCell; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TableDowCell", function() { return TableDowCell; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Theme", function() { return Theme; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewApi", function() { return ViewApi; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewContextType", function() { return ViewContextType; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ViewRoot", function() { return ViewRoot; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WeekNumberRoot", function() { return WeekNumberRoot; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WindowScrollController", function() { return WindowScrollController; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addDays", function() { return addDays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addDurations", function() { return addDurations; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addMs", function() { return addMs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addWeeks", function() { return addWeeks; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "allowContextMenu", function() { return allowContextMenu; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "allowSelection", function() { return allowSelection; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyMutationToEventStore", function() { return applyMutationToEventStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyStyle", function() { return applyStyle; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "applyStyleProp", function() { return applyStyleProp; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asRoughMinutes", function() { return asRoughMinutes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asRoughMs", function() { return asRoughMs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asRoughSeconds", function() { return asRoughSeconds; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildClassNameNormalizer", function() { return buildClassNameNormalizer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildEventApis", function() { return buildEventApis; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildEventRangeKey", function() { return buildEventRangeKey; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildHashFromArray", function() { return buildHashFromArray; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildNavLinkData", function() { return buildNavLinkData; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildSegCompareObj", function() { return buildSegCompareObj; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildSegTimeText", function() { return buildSegTimeText; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "collectFromHash", function() { return collectFromHash; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineEventUis", function() { return combineEventUis; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compareByFieldSpec", function() { return compareByFieldSpec; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compareByFieldSpecs", function() { return compareByFieldSpecs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compareNumbers", function() { return compareNumbers; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "compareObjs", function() { return compareObjs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeEdges", function() { return computeEdges; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeFallbackHeaderFormat", function() { return computeFallbackHeaderFormat; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeHeightAndMargins", function() { return computeHeightAndMargins; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeInnerRect", function() { return computeInnerRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeRect", function() { return computeRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeSegDraggable", function() { return computeSegDraggable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeSegEndResizable", function() { return computeSegEndResizable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeSegStartResizable", function() { return computeSegStartResizable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeShrinkWidth", function() { return computeShrinkWidth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeSmallestCellWidth", function() { return computeSmallestCellWidth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "computeVisibleDayRange", function() { return computeVisibleDayRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "constrainPoint", function() { return constrainPoint; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDuration", function() { return createDuration; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEmptyEventStore", function() { return createEmptyEventStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEventInstance", function() { return createEventInstance; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createEventUi", function() { return createEventUi; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createFormatter", function() { return createFormatter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createPlugin", function() { return createPlugin; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffDates", function() { return diffDates; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffDayAndTime", function() { return diffDayAndTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffDays", function() { return diffDays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffPoints", function() { return diffPoints; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffWeeks", function() { return diffWeeks; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffWholeDays", function() { return diffWholeDays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffWholeWeeks", function() { return diffWholeWeeks; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "disableCursor", function() { return disableCursor; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementClosest", function() { return elementClosest; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementMatches", function() { return elementMatches; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "enableCursor", function() { return enableCursor; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eventTupleToStore", function() { return eventTupleToStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterEventStoreDefs", function() { return filterEventStoreDefs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterHash", function() { return filterHash; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findDirectChildren", function() { return findDirectChildren; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findElements", function() { return findElements; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "flexibleCompare", function() { return flexibleCompare; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatDate", function() { return formatDate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatDayString", function() { return formatDayString; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatIsoTimeString", function() { return formatIsoTimeString; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatRange", function() { return formatRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAllowYScrolling", function() { return getAllowYScrolling; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getClippingParents", function() { return getClippingParents; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDateMeta", function() { return getDateMeta; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDayClassNames", function() { return getDayClassNames; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDefaultEventEnd", function() { return getDefaultEventEnd; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getElSeg", function() { return getElSeg; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEventClassNames", function() { return getEventClassNames; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getIsRtlScrollbarOnLeft", function() { return getIsRtlScrollbarOnLeft; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRectCenter", function() { return getRectCenter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRelevantEvents", function() { return getRelevantEvents; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScrollGridClassNames", function() { return getScrollGridClassNames; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getScrollbarWidths", function() { return getScrollbarWidths; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSectionClassNames", function() { return getSectionClassNames; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSectionHasLiquidHeight", function() { return getSectionHasLiquidHeight; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSegMeta", function() { return getSegMeta; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSlotClassNames", function() { return getSlotClassNames; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getStickyFooterScrollbar", function() { return getStickyFooterScrollbar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getStickyHeaderDates", function() { return getStickyHeaderDates; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUnequalProps", function() { return getUnequalProps; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "globalLocales", function() { return globalLocales; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "globalPlugins", function() { return globalPlugins; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "greatestDurationDenominator", function() { return greatestDurationDenominator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "guid", function() { return guid; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasBgRendering", function() { return hasBgRendering; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasShrinkWidth", function() { return hasShrinkWidth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "htmlToElement", function() { return htmlToElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interactionSettingsStore", function() { return interactionSettingsStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interactionSettingsToStore", function() { return interactionSettingsToStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "intersectRanges", function() { return intersectRanges; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "intersectRects", function() { return intersectRects; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArraysEqual", function() { return isArraysEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isColPropsEqual", function() { return isColPropsEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDateSpansEqual", function() { return isDateSpansEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInt", function() { return isInt; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInteractionValid", function() { return isInteractionValid; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isMultiDayRange", function() { return isMultiDayRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPropsEqual", function() { return isPropsEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPropsValid", function() { return isPropsValid; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isSingleDay", function() { return isSingleDay; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isValidDate", function() { return isValidDate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "listenBySelector", function() { return listenBySelector; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapHash", function() { return mapHash; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memoize", function() { return memoize; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memoizeArraylike", function() { return memoizeArraylike; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memoizeHashlike", function() { return memoizeHashlike; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "memoizeObjArg", function() { return memoizeObjArg; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeEventStores", function() { return mergeEventStores; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multiplyDuration", function() { return multiplyDuration; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "padStart", function() { return padStart; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseBusinessHours", function() { return parseBusinessHours; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseClassNames", function() { return parseClassNames; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseDragMeta", function() { return parseDragMeta; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseEventDef", function() { return parseEventDef; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseFieldSpecs", function() { return parseFieldSpecs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseMarker", function() { return parse; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pointInsideRect", function() { return pointInsideRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preventContextMenu", function() { return preventContextMenu; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preventDefault", function() { return preventDefault; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preventSelection", function() { return preventSelection; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangeContainsMarker", function() { return rangeContainsMarker; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangeContainsRange", function() { return rangeContainsRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangesEqual", function() { return rangesEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rangesIntersect", function() { return rangesIntersect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "refineEventDef", function() { return refineEventDef; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "refineProps", function() { return refineProps; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeElement", function() { return removeElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeExact", function() { return removeExact; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderChunkContent", function() { return renderChunkContent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderFill", function() { return renderFill; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderMicroColGroup", function() { return renderMicroColGroup; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "renderScrollShim", function() { return renderScrollShim; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "requestJson", function() { return requestJson; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sanitizeShrinkWidth", function() { return sanitizeShrinkWidth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setElSeg", function() { return setElSeg; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setRef", function() { return setRef; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sliceEventStore", function() { return sliceEventStore; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sliceEvents", function() { return sliceEvents; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sortEventSegs", function() { return sortEventSegs; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startOfDay", function() { return startOfDay; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translateRect", function() { return translateRect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "triggerDateSelect", function() { return triggerDateSelect; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unpromisify", function() { return unpromisify; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "version", function() { return version; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "whenTransitionDone", function() { return whenTransitionDone; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wholeDivideDurations", function() { return wholeDivideDurations; });
-/* harmony import */ var _main_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main.css */ "./node_modules/@fullcalendar/common/main.css");
-/* harmony import */ var _main_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_main_css__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "./node_modules/@fullcalendar/common/node_modules/tslib/tslib.es6.js");
-/* harmony import */ var _vdom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vdom */ "./node_modules/@fullcalendar/common/vdom.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return _vdom__WEBPACK_IMPORTED_MODULE_2__["Component"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _vdom__WEBPACK_IMPORTED_MODULE_2__["render"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return _vdom__WEBPACK_IMPORTED_MODULE_2__["createRef"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Fragment", function() { return _vdom__WEBPACK_IMPORTED_MODULE_2__["Fragment"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createContext", function() { return _vdom__WEBPACK_IMPORTED_MODULE_2__["createContext"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flushToDom", function() { return _vdom__WEBPACK_IMPORTED_MODULE_2__["flushToDom"]; });
-
-/*!
-FullCalendar v5.1.0
-Docs & License: https://fullcalendar.io/
-(c) 2020 Adam Shaw
-*/
-
-
-
-
-
-
-// no public types yet. when there are, export from:
-// import {} from './api-type-deps'
-var EventSourceApi = /** @class */ (function () {
- function EventSourceApi(context, internalEventSource // rename?
- ) {
- this.context = context;
- this.internalEventSource = internalEventSource;
- }
- EventSourceApi.prototype.remove = function () {
- this.context.dispatch({
- type: 'REMOVE_EVENT_SOURCE',
- sourceId: this.internalEventSource.sourceId
- });
- };
- EventSourceApi.prototype.refetch = function () {
- this.context.dispatch({
- type: 'FETCH_EVENT_SOURCES',
- sourceIds: [this.internalEventSource.sourceId]
- });
- };
- Object.defineProperty(EventSourceApi.prototype, "id", {
- get: function () {
- return this.internalEventSource.publicId;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventSourceApi.prototype, "url", {
- // only relevant to json-feed event sources
- get: function () {
- return this.internalEventSource.meta.url;
- },
- enumerable: false,
- configurable: true
- });
- return EventSourceApi;
-}());
-
-// TODO: new util arrayify?
-function removeExact(array, exactVal) {
- var removeCnt = 0;
- var i = 0;
- while (i < array.length) {
- if (array[i] === exactVal) {
- array.splice(i, 1);
- removeCnt++;
- }
- else {
- i++;
- }
- }
- return removeCnt;
-}
-function isArraysEqual(a0, a1, equalityFunc) {
- if (a0 === a1) {
- return true;
- }
- var len = a0.length;
- var i;
- if (len !== a1.length) { // not array? or not same length?
- return false;
- }
- for (i = 0; i < len; i++) {
- if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {
- return false;
- }
- }
- return true;
-}
-
-function htmlToElement(html) {
- html = html.trim();
- var container = document.createElement('div');
- container.innerHTML = html;
- return container.firstChild;
-}
-function removeElement(el) {
- if (el.parentNode) {
- el.parentNode.removeChild(el);
- }
-}
-function injectHtml(el, html) {
- el.innerHTML = html;
-}
-function injectDomNodes(el, domNodes) {
- var oldNodes = Array.prototype.slice.call(el.childNodes); // TODO: use array util
- var newNodes = Array.prototype.slice.call(domNodes); // TODO: use array util
- if (!isArraysEqual(oldNodes, newNodes)) {
- for (var _i = 0, newNodes_1 = newNodes; _i < newNodes_1.length; _i++) {
- var newNode = newNodes_1[_i];
- el.appendChild(newNode);
- }
- oldNodes.forEach(removeElement);
- }
-}
-// Querying
-// ----------------------------------------------------------------------------------------------------------------
-// from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
-var matchesMethod = Element.prototype.matches ||
- Element.prototype.matchesSelector ||
- Element.prototype.msMatchesSelector;
-var closestMethod = Element.prototype.closest || function (selector) {
- // polyfill
- var el = this;
- if (!document.documentElement.contains(el)) {
- return null;
- }
- do {
- if (elementMatches(el, selector)) {
- return el;
- }
- el = el.parentElement || el.parentNode;
- } while (el !== null && el.nodeType === 1);
- return null;
-};
-function elementClosest(el, selector) {
- return closestMethod.call(el, selector);
-}
-function elementMatches(el, selector) {
- return matchesMethod.call(el, selector);
-}
-// accepts multiple subject els
-// returns a real array. good for methods like forEach
-// TODO: accept the document
-function findElements(container, selector) {
- var containers = container instanceof HTMLElement ? [container] : container;
- var allMatches = [];
- for (var i = 0; i < containers.length; i++) {
- var matches = containers[i].querySelectorAll(selector);
- for (var j = 0; j < matches.length; j++) {
- allMatches.push(matches[j]);
- }
- }
- return allMatches;
-}
-// accepts multiple subject els
-// only queries direct child elements // TODO: rename to findDirectChildren!
-function findDirectChildren(parent, selector) {
- var parents = parent instanceof HTMLElement ? [parent] : parent;
- var allMatches = [];
- for (var i = 0; i < parents.length; i++) {
- var childNodes = parents[i].children; // only ever elements
- for (var j = 0; j < childNodes.length; j++) {
- var childNode = childNodes[j];
- if (!selector || elementMatches(childNode, selector)) {
- allMatches.push(childNode);
- }
- }
- }
- return allMatches;
-}
-// Style
-// ----------------------------------------------------------------------------------------------------------------
-var PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
-function applyStyle(el, props) {
- for (var propName in props) {
- applyStyleProp(el, propName, props[propName]);
- }
-}
-function applyStyleProp(el, name, val) {
- if (val == null) {
- el.style[name] = '';
- }
- else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
- el.style[name] = val + 'px';
- }
- else {
- el.style[name] = val;
- }
-}
-
-// Stops a mouse/touch event from doing it's native browser action
-function preventDefault(ev) {
- ev.preventDefault();
-}
-// Event Delegation
-// ----------------------------------------------------------------------------------------------------------------
-function buildDelegationHandler(selector, handler) {
- return function (ev) {
- var matchedChild = elementClosest(ev.target, selector);
- if (matchedChild) {
- handler.call(matchedChild, ev, matchedChild);
- }
- };
-}
-function listenBySelector(container, eventType, selector, handler) {
- var attachedHandler = buildDelegationHandler(selector, handler);
- container.addEventListener(eventType, attachedHandler);
- return function () {
- container.removeEventListener(eventType, attachedHandler);
- };
-}
-function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {
- var currentMatchedChild;
- return listenBySelector(container, 'mouseover', selector, function (ev, matchedChild) {
- if (matchedChild !== currentMatchedChild) {
- currentMatchedChild = matchedChild;
- onMouseEnter(ev, matchedChild);
- var realOnMouseLeave_1 = function (ev) {
- currentMatchedChild = null;
- onMouseLeave(ev, matchedChild);
- matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1);
- };
- // listen to the next mouseleave, and then unattach
- matchedChild.addEventListener('mouseleave', realOnMouseLeave_1);
- }
- });
-}
-// Animation
-// ----------------------------------------------------------------------------------------------------------------
-var transitionEventNames = [
- 'webkitTransitionEnd',
- 'otransitionend',
- 'oTransitionEnd',
- 'msTransitionEnd',
- 'transitionend'
-];
-// triggered only when the next single subsequent transition finishes
-function whenTransitionDone(el, callback) {
- var realCallback = function (ev) {
- callback(ev);
- transitionEventNames.forEach(function (eventName) {
- el.removeEventListener(eventName, realCallback);
- });
- };
- transitionEventNames.forEach(function (eventName) {
- el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes
- });
-}
-
-var guidNumber = 0;
-function guid() {
- return String(guidNumber++);
-}
-/* FullCalendar-specific DOM Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-// Make the mouse cursor express that an event is not allowed in the current area
-function disableCursor() {
- document.body.classList.add('fc-not-allowed');
-}
-// Returns the mouse cursor to its original look
-function enableCursor() {
- document.body.classList.remove('fc-not-allowed');
-}
-/* Selection
-----------------------------------------------------------------------------------------------------------------------*/
-function preventSelection(el) {
- el.classList.add('fc-unselectable');
- el.addEventListener('selectstart', preventDefault);
-}
-function allowSelection(el) {
- el.classList.remove('fc-unselectable');
- el.removeEventListener('selectstart', preventDefault);
-}
-/* Context Menu
-----------------------------------------------------------------------------------------------------------------------*/
-function preventContextMenu(el) {
- el.addEventListener('contextmenu', preventDefault);
-}
-function allowContextMenu(el) {
- el.removeEventListener('contextmenu', preventDefault);
-}
-function parseFieldSpecs(input) {
- var specs = [];
- var tokens = [];
- var i;
- var token;
- if (typeof input === 'string') {
- tokens = input.split(/\s*,\s*/);
- }
- else if (typeof input === 'function') {
- tokens = [input];
- }
- else if (Array.isArray(input)) {
- tokens = input;
- }
- for (i = 0; i < tokens.length; i++) {
- token = tokens[i];
- if (typeof token === 'string') {
- specs.push(token.charAt(0) === '-' ?
- { field: token.substring(1), order: -1 } :
- { field: token, order: 1 });
- }
- else if (typeof token === 'function') {
- specs.push({ func: token });
- }
- }
- return specs;
-}
-function compareByFieldSpecs(obj0, obj1, fieldSpecs) {
- var i;
- var cmp;
- for (i = 0; i < fieldSpecs.length; i++) {
- cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);
- if (cmp) {
- return cmp;
- }
- }
- return 0;
-}
-function compareByFieldSpec(obj0, obj1, fieldSpec) {
- if (fieldSpec.func) {
- return fieldSpec.func(obj0, obj1);
- }
- return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])
- * (fieldSpec.order || 1);
-}
-function flexibleCompare(a, b) {
- if (!a && !b) {
- return 0;
- }
- if (b == null) {
- return -1;
- }
- if (a == null) {
- return 1;
- }
- if (typeof a === 'string' || typeof b === 'string') {
- return String(a).localeCompare(String(b));
- }
- return a - b;
-}
-/* String Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-function padStart(val, len) {
- var s = String(val);
- return '000'.substr(0, len - s.length) + s;
-}
-/* Number Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-function compareNumbers(a, b) {
- return a - b;
-}
-function isInt(n) {
- return n % 1 === 0;
-}
-/* FC-specific DOM dimension stuff
-----------------------------------------------------------------------------------------------------------------------*/
-function computeSmallestCellWidth(cellEl) {
- var allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame');
- var contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion');
- if (!allWidthEl) {
- throw new Error('needs fc-scrollgrid-shrink-frame className'); // TODO: use const
- }
- if (!contentWidthEl) {
- throw new Error('needs fc-scrollgrid-shrink-cushion className');
- }
- return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border
- contentWidthEl.getBoundingClientRect().width;
-}
-
-var DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
-// Adding
-function addWeeks(m, n) {
- var a = dateToUtcArray(m);
- a[2] += n * 7;
- return arrayToUtcDate(a);
-}
-function addDays(m, n) {
- var a = dateToUtcArray(m);
- a[2] += n;
- return arrayToUtcDate(a);
-}
-function addMs(m, n) {
- var a = dateToUtcArray(m);
- a[6] += n;
- return arrayToUtcDate(a);
-}
-// Diffing (all return floats)
-// TODO: why not use ranges?
-function diffWeeks(m0, m1) {
- return diffDays(m0, m1) / 7;
-}
-function diffDays(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);
-}
-function diffHours(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);
-}
-function diffMinutes(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60);
-}
-function diffSeconds(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / 1000;
-}
-function diffDayAndTime(m0, m1) {
- var m0day = startOfDay(m0);
- var m1day = startOfDay(m1);
- return {
- years: 0,
- months: 0,
- days: Math.round(diffDays(m0day, m1day)),
- milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf())
- };
-}
-// Diffing Whole Units
-function diffWholeWeeks(m0, m1) {
- var d = diffWholeDays(m0, m1);
- if (d !== null && d % 7 === 0) {
- return d / 7;
- }
- return null;
-}
-function diffWholeDays(m0, m1) {
- if (timeAsMs(m0) === timeAsMs(m1)) {
- return Math.round(diffDays(m0, m1));
- }
- return null;
-}
-// Start-Of
-function startOfDay(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate()
- ]);
-}
-function startOfHour(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours()
- ]);
-}
-function startOfMinute(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours(),
- m.getUTCMinutes()
- ]);
-}
-function startOfSecond(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours(),
- m.getUTCMinutes(),
- m.getUTCSeconds()
- ]);
-}
-// Week Computation
-function weekOfYear(marker, dow, doy) {
- var y = marker.getUTCFullYear();
- var w = weekOfGivenYear(marker, y, dow, doy);
- if (w < 1) {
- return weekOfGivenYear(marker, y - 1, dow, doy);
- }
- var nextW = weekOfGivenYear(marker, y + 1, dow, doy);
- if (nextW >= 1) {
- return Math.min(w, nextW);
- }
- return w;
-}
-function weekOfGivenYear(marker, year, dow, doy) {
- var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);
- var dayStart = startOfDay(marker);
- var days = Math.round(diffDays(firstWeekStart, dayStart));
- return Math.floor(days / 7) + 1; // zero-indexed
-}
-// start-of-first-week - start-of-year
-function firstWeekOffset(year, dow, doy) {
- // first-week day -- which january is always in the first week (4 for iso, 1 for other)
- var fwd = 7 + dow - doy;
- // first-week day local weekday -- which local weekday is fwd
- var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;
- return -fwdlw + fwd - 1;
-}
-// Array Conversion
-function dateToLocalArray(date) {
- return [
- date.getFullYear(),
- date.getMonth(),
- date.getDate(),
- date.getHours(),
- date.getMinutes(),
- date.getSeconds(),
- date.getMilliseconds()
- ];
-}
-function arrayToLocalDate(a) {
- return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month
- a[3] || 0, a[4] || 0, a[5] || 0);
-}
-function dateToUtcArray(date) {
- return [
- date.getUTCFullYear(),
- date.getUTCMonth(),
- date.getUTCDate(),
- date.getUTCHours(),
- date.getUTCMinutes(),
- date.getUTCSeconds(),
- date.getUTCMilliseconds()
- ];
-}
-function arrayToUtcDate(a) {
- // according to web standards (and Safari), a month index is required.
- // massage if only given a year.
- if (a.length === 1) {
- a = a.concat([0]);
- }
- return new Date(Date.UTC.apply(Date, a));
-}
-// Other Utils
-function isValidDate(m) {
- return !isNaN(m.valueOf());
-}
-function timeAsMs(m) {
- return m.getUTCHours() * 1000 * 60 * 60 +
- m.getUTCMinutes() * 1000 * 60 +
- m.getUTCSeconds() * 1000 +
- m.getUTCMilliseconds();
-}
-
-function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
- return {
- instanceId: guid(),
- defId: defId,
- range: range,
- forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
- forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo
- };
-}
-
-var hasOwnProperty = Object.prototype.hasOwnProperty;
-// Merges an array of objects into a single object.
-// The second argument allows for an array of property names who's object values will be merged together.
-function mergeProps(propObjs, complexPropsMap) {
- var dest = {};
- if (complexPropsMap) {
- for (var name_1 in complexPropsMap) {
- var complexObjs = [];
- // collect the trailing object values, stopping when a non-object is discovered
- for (var i = propObjs.length - 1; i >= 0; i--) {
- var val = propObjs[i][name_1];
- if (typeof val === 'object' && val) { // non-null object
- complexObjs.unshift(val);
- }
- else if (val !== undefined) {
- dest[name_1] = val; // if there were no objects, this value will be used
- break;
- }
- }
- // if the trailing values were objects, use the merged value
- if (complexObjs.length) {
- dest[name_1] = mergeProps(complexObjs);
- }
- }
- }
- // copy values into the destination, going from last to first
- for (var i = propObjs.length - 1; i >= 0; i--) {
- var props = propObjs[i];
- for (var name_2 in props) {
- if (!(name_2 in dest)) { // if already assigned by previous props or complex props, don't reassign
- dest[name_2] = props[name_2];
- }
- }
- }
- return dest;
-}
-function filterHash(hash, func) {
- var filtered = {};
- for (var key in hash) {
- if (func(hash[key], key)) {
- filtered[key] = hash[key];
- }
- }
- return filtered;
-}
-function mapHash(hash, func) {
- var newHash = {};
- for (var key in hash) {
- newHash[key] = func(hash[key], key);
- }
- return newHash;
-}
-function arrayToHash(a) {
- var hash = {};
- for (var _i = 0, a_1 = a; _i < a_1.length; _i++) {
- var item = a_1[_i];
- hash[item] = true;
- }
- return hash;
-}
-function buildHashFromArray(a, func) {
- var hash = {};
- for (var i = 0; i < a.length; i++) {
- var tuple = func(a[i], i);
- hash[tuple[0]] = tuple[1];
- }
- return hash;
-}
-function hashValuesToArray(obj) {
- var a = [];
- for (var key in obj) {
- a.push(obj[key]);
- }
- return a;
-}
-function isPropsEqual(obj0, obj1) {
- if (obj0 === obj1) {
- return true;
- }
- for (var key in obj0) {
- if (hasOwnProperty.call(obj0, key)) {
- if (!(key in obj1)) {
- return false;
- }
- }
- }
- for (var key in obj1) {
- if (hasOwnProperty.call(obj1, key)) {
- if (obj0[key] !== obj1[key]) {
- return false;
- }
- }
- }
- return true;
-}
-function getUnequalProps(obj0, obj1) {
- var keys = [];
- for (var key in obj0) {
- if (hasOwnProperty.call(obj0, key)) {
- if (!(key in obj1)) {
- keys.push(key);
- }
- }
- }
- for (var key in obj1) {
- if (hasOwnProperty.call(obj1, key)) {
- if (obj0[key] !== obj1[key]) {
- keys.push(key);
- }
- }
- }
- return keys;
-}
-function compareObjs(oldProps, newProps, equalityFuncs) {
- if (equalityFuncs === void 0) { equalityFuncs = {}; }
- if (oldProps === newProps) {
- return true;
- }
- for (var key in newProps) {
- if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) ;
- else {
- return false;
- }
- }
- // check for props that were omitted in the new
- for (var key in oldProps) {
- if (!(key in newProps)) {
- return false;
- }
- }
- return true;
-}
-/*
-assumed "true" equality for handler names like "onReceiveSomething"
-*/
-function isObjValsEqual(val0, val1, comparator) {
- if (val0 === val1 || comparator === true) {
- return true;
- }
- if (comparator) {
- return comparator(val0, val1);
- }
- return false;
-}
-function collectFromHash(hash, startIndex, endIndex, step) {
- if (startIndex === void 0) { startIndex = 0; }
- if (step === void 0) { step = 1; }
- var res = [];
- if (endIndex == null) {
- endIndex = Object.keys(hash).length;
- }
- for (var i = startIndex; i < endIndex; i += step) {
- var val = hash[i];
- if (val !== undefined) { // will disregard undefined for sparse arrays
- res.push(val);
- }
- }
- return res;
-}
-
-function parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {
- for (var i = 0; i < recurringTypes.length; i++) {
- var parsed = recurringTypes[i].parse(refined, dateEnv);
- if (parsed) {
- var allDay = refined.allDay;
- if (allDay == null) {
- allDay = defaultAllDay;
- if (allDay == null) {
- allDay = parsed.allDayGuess;
- if (allDay == null) {
- allDay = false;
- }
- }
- }
- return {
- allDay: allDay,
- duration: parsed.duration,
- typeData: parsed.typeData,
- typeId: i
- };
- }
- }
- return null;
-}
-function expandRecurring(eventStore, framingRange, context) {
- var dateEnv = context.dateEnv, pluginHooks = context.pluginHooks, options = context.options;
- var defs = eventStore.defs, instances = eventStore.instances;
- // remove existing recurring instances
- // TODO: bad. always expand events as a second step
- instances = filterHash(instances, function (instance) {
- return !defs[instance.defId].recurringDef;
- });
- for (var defId in defs) {
- var def = defs[defId];
- if (def.recurringDef) {
- var duration = def.recurringDef.duration;
- if (!duration) {
- duration = def.allDay ?
- options.defaultAllDayEventDuration :
- options.defaultTimedEventDuration;
- }
- var starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);
- for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) {
- var start = starts_1[_i];
- var instance = createEventInstance(defId, {
- start: start,
- end: dateEnv.add(start, duration)
- });
- instances[instance.instanceId] = instance;
- }
- }
- }
- return { defs: defs, instances: instances };
-}
-/*
-Event MUST have a recurringDef
-*/
-function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
- var typeDef = recurringTypes[eventDef.recurringDef.typeId];
- var markers = typeDef.expand(eventDef.recurringDef.typeData, {
- start: dateEnv.subtract(framingRange.start, duration),
- end: framingRange.end
- }, dateEnv);
- // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to
- if (eventDef.allDay) {
- markers = markers.map(startOfDay);
- }
- return markers;
-}
-
-var INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];
-var PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
-// Parsing and Creation
-function createDuration(input, unit) {
- var _a;
- if (typeof input === 'string') {
- return parseString(input);
- }
- else if (typeof input === 'object' && input) { // non-null object
- return parseObject(input);
- }
- else if (typeof input === 'number') {
- return parseObject((_a = {}, _a[unit || 'milliseconds'] = input, _a));
- }
- else {
- return null;
- }
-}
-function parseString(s) {
- var m = PARSE_RE.exec(s);
- if (m) {
- var sign = m[1] ? -1 : 1;
- return {
- years: 0,
- months: 0,
- days: sign * (m[2] ? parseInt(m[2], 10) : 0),
- milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours
- (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes
- (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds
- (m[6] ? parseInt(m[6], 10) : 0) // ms
- )
- };
- }
- return null;
-}
-function parseObject(obj) {
- var duration = {
- years: obj.years || obj.year || 0,
- months: obj.months || obj.month || 0,
- days: obj.days || obj.day || 0,
- milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
- (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
- (obj.seconds || obj.second || 0) * 1000 + // seconds
- (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms
- };
- var weeks = obj.weeks || obj.week;
- if (weeks) {
- duration.days += weeks * 7;
- duration.specifiedWeeks = true;
- }
- return duration;
-}
-// Equality
-function durationsEqual(d0, d1) {
- return d0.years === d1.years &&
- d0.months === d1.months &&
- d0.days === d1.days &&
- d0.milliseconds === d1.milliseconds;
-}
-function isSingleDay(dur) {
- return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0;
-}
-// Simple Math
-function addDurations(d0, d1) {
- return {
- years: d0.years + d1.years,
- months: d0.months + d1.months,
- days: d0.days + d1.days,
- milliseconds: d0.milliseconds + d1.milliseconds
- };
-}
-function subtractDurations(d1, d0) {
- return {
- years: d1.years - d0.years,
- months: d1.months - d0.months,
- days: d1.days - d0.days,
- milliseconds: d1.milliseconds - d0.milliseconds
- };
-}
-function multiplyDuration(d, n) {
- return {
- years: d.years * n,
- months: d.months * n,
- days: d.days * n,
- milliseconds: d.milliseconds * n
- };
-}
-// Conversions
-// "Rough" because they are based on average-case Gregorian months/years
-function asRoughYears(dur) {
- return asRoughDays(dur) / 365;
-}
-function asRoughMonths(dur) {
- return asRoughDays(dur) / 30;
-}
-function asRoughDays(dur) {
- return asRoughMs(dur) / 864e5;
-}
-function asRoughMinutes(dur) {
- return asRoughMs(dur) / (1000 * 60);
-}
-function asRoughSeconds(dur) {
- return asRoughMs(dur) / 1000;
-}
-function asRoughMs(dur) {
- return dur.years * (365 * 864e5) +
- dur.months * (30 * 864e5) +
- dur.days * 864e5 +
- dur.milliseconds;
-}
-// Advanced Math
-function wholeDivideDurations(numerator, denominator) {
- var res = null;
- for (var i = 0; i < INTERNAL_UNITS.length; i++) {
- var unit = INTERNAL_UNITS[i];
- if (denominator[unit]) {
- var localRes = numerator[unit] / denominator[unit];
- if (!isInt(localRes) || (res !== null && res !== localRes)) {
- return null;
- }
- res = localRes;
- }
- else if (numerator[unit]) {
- // needs to divide by something but can't!
- return null;
- }
- }
- return res;
-}
-function greatestDurationDenominator(dur) {
- var ms = dur.milliseconds;
- if (ms) {
- if (ms % 1000 !== 0) {
- return { unit: 'millisecond', value: ms };
- }
- if (ms % (1000 * 60) !== 0) {
- return { unit: 'second', value: ms / 1000 };
- }
- if (ms % (1000 * 60 * 60) !== 0) {
- return { unit: 'minute', value: ms / (1000 * 60) };
- }
- if (ms) {
- return { unit: 'hour', value: ms / (1000 * 60 * 60) };
- }
- }
- if (dur.days) {
- if (dur.specifiedWeeks && dur.days % 7 === 0) {
- return { unit: 'week', value: dur.days / 7 };
- }
- return { unit: 'day', value: dur.days };
- }
- if (dur.months) {
- return { unit: 'month', value: dur.months };
- }
- if (dur.years) {
- return { unit: 'year', value: dur.years };
- }
- return { unit: 'millisecond', value: 0 };
-}
-
-// timeZoneOffset is in minutes
-function buildIsoString(marker, timeZoneOffset, stripZeroTime) {
- if (stripZeroTime === void 0) { stripZeroTime = false; }
- var s = marker.toISOString();
- s = s.replace('.000', '');
- if (stripZeroTime) {
- s = s.replace('T00:00:00Z', '');
- }
- if (s.length > 10) { // time part wasn't stripped, can add timezone info
- if (timeZoneOffset == null) {
- s = s.replace('Z', '');
- }
- else if (timeZoneOffset !== 0) {
- s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));
- }
- // otherwise, its UTC-0 and we want to keep the Z
- }
- return s;
-}
-// formats the date, but with no time part
-// TODO: somehow merge with buildIsoString and stripZeroTime
-// TODO: rename. omit "string"
-function formatDayString(marker) {
- return marker.toISOString().replace(/T.*$/, '');
-}
-// TODO: use Date::toISOString and use everything after the T?
-function formatIsoTimeString(marker) {
- return padStart(marker.getUTCHours(), 2) + ':' +
- padStart(marker.getUTCMinutes(), 2) + ':' +
- padStart(marker.getUTCSeconds(), 2);
-}
-function formatTimeZoneOffset(minutes, doIso) {
- if (doIso === void 0) { doIso = false; }
- var sign = minutes < 0 ? '-' : '+';
- var abs = Math.abs(minutes);
- var hours = Math.floor(abs / 60);
- var mins = Math.round(abs % 60);
- if (doIso) {
- return sign + padStart(hours, 2) + ':' + padStart(mins, 2);
- }
- else {
- return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : '');
- }
-}
-
-function memoize(workerFunc, resEquality, teardownFunc) {
- var currentArgs;
- var currentRes;
- return function () {
- var newArgs = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- newArgs[_i] = arguments[_i];
- }
- if (!currentArgs) {
- currentRes = workerFunc.apply(this, newArgs);
- }
- else if (!isArraysEqual(currentArgs, newArgs)) {
- if (teardownFunc) {
- teardownFunc(currentRes);
- }
- var res = workerFunc.apply(this, newArgs);
- if (!resEquality || !resEquality(res, currentRes)) {
- currentRes = res;
- }
- }
- currentArgs = newArgs;
- return currentRes;
- };
-}
-function memoizeObjArg(workerFunc, resEquality, teardownFunc) {
- var currentArg;
- var currentRes;
- return function (newArg) {
- if (!currentArg) {
- currentRes = workerFunc.call(this, newArg);
- }
- else if (!isPropsEqual(currentArg, newArg)) {
- if (teardownFunc) {
- teardownFunc(currentRes);
- }
- var res = workerFunc.call(this, newArg);
- if (!resEquality || !resEquality(res, currentRes)) {
- currentRes = res;
- }
- }
- currentArg = newArg;
- return currentRes;
- };
-}
-function memoizeArraylike(// used at all?
-workerFunc, resEquality, teardownFunc) {
- var currentArgSets = [];
- var currentResults = [];
- return function (newArgSets) {
- var currentLen = currentArgSets.length;
- var newLen = newArgSets.length;
- var i = 0;
- for (; i < currentLen; i++) {
- if (!newArgSets[i]) { // one of the old sets no longer exists
- if (teardownFunc) {
- teardownFunc(currentResults[i]);
- }
- }
- else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {
- if (teardownFunc) {
- teardownFunc(currentResults[i]);
- }
- var res = workerFunc.apply(this, newArgSets[i]);
- if (!resEquality || !resEquality(res, currentResults[i])) {
- currentResults[i] = res;
- }
- }
- }
- for (; i < newLen; i++) {
- currentResults[i] = workerFunc.apply(this, newArgSets[i]);
- }
- currentArgSets = newArgSets;
- currentResults.splice(newLen); // remove excess
- return currentResults;
- };
-}
-function memoizeHashlike(// used?
-workerFunc, resEquality, teardownFunc // TODO: change arg order
-) {
- var currentArgHash = {};
- var currentResHash = {};
- return function (newArgHash) {
- var newResHash = {};
- for (var key in newArgHash) {
- if (!currentResHash[key]) {
- newResHash[key] = workerFunc.apply(this, newArgHash[key]);
- }
- else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {
- if (teardownFunc) {
- teardownFunc(currentResHash[key]);
- }
- var res = workerFunc.apply(this, newArgHash[key]);
- newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))
- ? currentResHash[key]
- : res;
- }
- else {
- newResHash[key] = currentResHash[key];
- }
- }
- currentArgHash = newArgHash;
- currentResHash = newResHash;
- return newResHash;
- };
-}
-
-var EXTENDED_SETTINGS_AND_SEVERITIES = {
- week: 3,
- separator: 0,
- omitZeroMinute: 0,
- meridiem: 0,
- omitCommas: 0
-};
-var STANDARD_DATE_PROP_SEVERITIES = {
- timeZoneName: 7,
- era: 6,
- year: 5,
- month: 4,
- day: 2,
- weekday: 2,
- hour: 1,
- minute: 1,
- second: 1
-};
-var MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too
-var COMMA_RE = /,/g; // we need re for globalness
-var MULTI_SPACE_RE = /\s+/g;
-var LTR_RE = /\u200e/g; // control character
-var UTC_RE = /UTC|GMT/;
-var NativeFormatter = /** @class */ (function () {
- function NativeFormatter(formatSettings) {
- var standardDateProps = {};
- var extendedSettings = {};
- var severity = 0;
- for (var name_1 in formatSettings) {
- if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) {
- extendedSettings[name_1] = formatSettings[name_1];
- severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity);
- }
- else {
- standardDateProps[name_1] = formatSettings[name_1];
- if (name_1 in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity
- severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity);
- }
- }
- }
- this.standardDateProps = standardDateProps;
- this.extendedSettings = extendedSettings;
- this.severity = severity;
- this.buildFormattingFunc = memoize(buildFormattingFunc);
- }
- NativeFormatter.prototype.format = function (date, context) {
- return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);
- };
- NativeFormatter.prototype.formatRange = function (start, end, context, betterDefaultSeparator) {
- var _a = this, standardDateProps = _a.standardDateProps, extendedSettings = _a.extendedSettings;
- var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);
- if (!diffSeverity) {
- return this.format(start, context);
- }
- var biggestUnitForPartial = diffSeverity;
- if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time
- (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&
- (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&
- (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {
- biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time
- }
- var full0 = this.format(start, context);
- var full1 = this.format(end, context);
- if (full0 === full1) {
- return full0;
- }
- var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);
- var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);
- var partial0 = partialFormattingFunc(start);
- var partial1 = partialFormattingFunc(end);
- var insertion = findCommonInsertion(full0, partial0, full1, partial1);
- var separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || '';
- if (insertion) {
- return insertion.before + partial0 + separator + partial1 + insertion.after;
- }
- return full0 + separator + full1;
- };
- NativeFormatter.prototype.getLargestUnit = function () {
- switch (this.severity) {
- case 7:
- case 6:
- case 5:
- return 'year';
- case 4:
- return 'month';
- case 3:
- return 'week';
- case 2:
- return 'day';
- default:
- return 'time'; // really?
- }
- };
- return NativeFormatter;
-}());
-function buildFormattingFunc(standardDateProps, extendedSettings, context) {
- var standardDatePropCnt = Object.keys(standardDateProps).length;
- if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {
- return function (date) {
- return formatTimeZoneOffset(date.timeZoneOffset);
- };
- }
- if (standardDatePropCnt === 0 && extendedSettings.week) {
- return function (date) {
- return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.locale, extendedSettings.week);
- };
- }
- return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
-}
-function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {
- standardDateProps = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, standardDateProps); // copy
- extendedSettings = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, extendedSettings); // copy
- sanitizeSettings(standardDateProps, extendedSettings);
- standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers
- var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);
- var zeroFormat; // needed?
- if (extendedSettings.omitZeroMinute) {
- var zeroProps = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, standardDateProps);
- delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings
- zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);
- }
- return function (date) {
- var marker = date.marker;
- var format;
- if (zeroFormat && !marker.getUTCMinutes()) {
- format = zeroFormat;
- }
- else {
- format = normalFormat;
- }
- var s = format.format(marker);
- return postProcess(s, date, standardDateProps, extendedSettings, context);
- };
-}
-function sanitizeSettings(standardDateProps, extendedSettings) {
- // deal with a browser inconsistency where formatting the timezone
- // requires that the hour/minute be present.
- if (standardDateProps.timeZoneName) {
- if (!standardDateProps.hour) {
- standardDateProps.hour = '2-digit';
- }
- if (!standardDateProps.minute) {
- standardDateProps.minute = '2-digit';
- }
- }
- // only support short timezone names
- if (standardDateProps.timeZoneName === 'long') {
- standardDateProps.timeZoneName = 'short';
- }
- // if requesting to display seconds, MUST display minutes
- if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {
- delete extendedSettings.omitZeroMinute;
- }
-}
-function postProcess(s, date, standardDateProps, extendedSettings, context) {
- s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes
- if (standardDateProps.timeZoneName === 'short') {
- s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?
- 'UTC' : // important to normalize for IE, which does "GMT"
- formatTimeZoneOffset(date.timeZoneOffset));
- }
- if (extendedSettings.omitCommas) {
- s = s.replace(COMMA_RE, '').trim();
- }
- if (extendedSettings.omitZeroMinute) {
- s = s.replace(':00', ''); // zeroFormat doesn't always achieve this
- }
- // ^ do anything that might create adjacent spaces before this point,
- // because MERIDIEM_RE likes to eat up loading spaces
- if (extendedSettings.meridiem === false) {
- s = s.replace(MERIDIEM_RE, '').trim();
- }
- else if (extendedSettings.meridiem === 'narrow') { // a/p
- s = s.replace(MERIDIEM_RE, function (m0, m1) {
- return m1.toLocaleLowerCase();
- });
- }
- else if (extendedSettings.meridiem === 'short') { // am/pm
- s = s.replace(MERIDIEM_RE, function (m0, m1) {
- return m1.toLocaleLowerCase() + 'm';
- });
- }
- else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase
- s = s.replace(MERIDIEM_RE, function (m0) {
- return m0.toLocaleLowerCase();
- });
- }
- s = s.replace(MULTI_SPACE_RE, ' ');
- s = s.trim();
- return s;
-}
-function injectTzoStr(s, tzoStr) {
- var replaced = false;
- s = s.replace(UTC_RE, function () {
- replaced = true;
- return tzoStr;
- });
- // IE11 doesn't include UTC/GMT in the original string, so append to end
- if (!replaced) {
- s += ' ' + tzoStr;
- }
- return s;
-}
-function formatWeekNumber(num, weekText, locale, display) {
- var parts = [];
- if (display === 'narrow') {
- parts.push(weekText);
- }
- else if (display === 'short') {
- parts.push(weekText, ' ');
- }
- // otherwise, considered 'numeric'
- parts.push(locale.simpleNumberFormat.format(num));
- if (locale.options.direction === 'rtl') { // TODO: use control characters instead?
- parts.reverse();
- }
- return parts.join('');
-}
-// Range Formatting Utils
-// 0 = exactly the same
-// 1 = different by time
-// and bigger
-function computeMarkerDiffSeverity(d0, d1, ca) {
- if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {
- return 5;
- }
- if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {
- return 4;
- }
- if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {
- return 2;
- }
- if (timeAsMs(d0) !== timeAsMs(d1)) {
- return 1;
- }
- return 0;
-}
-function computePartialFormattingOptions(options, biggestUnit) {
- var partialOptions = {};
- for (var name_2 in options) {
- if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)
- STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) {
- partialOptions[name_2] = options[name_2];
- }
- }
- return partialOptions;
-}
-function findCommonInsertion(full0, partial0, full1, partial1) {
- var i0 = 0;
- while (i0 < full0.length) {
- var found0 = full0.indexOf(partial0, i0);
- if (found0 === -1) {
- break;
- }
- var before0 = full0.substr(0, found0);
- i0 = found0 + partial0.length;
- var after0 = full0.substr(i0);
- var i1 = 0;
- while (i1 < full1.length) {
- var found1 = full1.indexOf(partial1, i1);
- if (found1 === -1) {
- break;
- }
- var before1 = full1.substr(0, found1);
- i1 = found1 + partial1.length;
- var after1 = full1.substr(i1);
- if (before0 === before1 && after0 === after1) {
- return {
- before: before0,
- after: after0
- };
- }
- }
- }
- return null;
-}
-
-function expandZonedMarker(dateInfo, calendarSystem) {
- var a = calendarSystem.markerToArray(dateInfo.marker);
- return {
- marker: dateInfo.marker,
- timeZoneOffset: dateInfo.timeZoneOffset,
- array: a,
- year: a[0],
- month: a[1],
- day: a[2],
- hour: a[3],
- minute: a[4],
- second: a[5],
- millisecond: a[6]
- };
-}
-
-function createVerboseFormattingArg(start, end, context, betterDefaultSeparator) {
- var startInfo = expandZonedMarker(start, context.calendarSystem);
- var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;
- return {
- date: startInfo,
- start: startInfo,
- end: endInfo,
- timeZone: context.timeZone,
- localeCodes: context.locale.codes,
- defaultSeparator: betterDefaultSeparator || context.defaultSeparator
- };
-}
-
-/*
-TODO: fix the terminology of "formatter" vs "formatting func"
-*/
-/*
-At the time of instantiation, this object does not know which cmd-formatting system it will use.
-It receives this at the time of formatting, as a setting.
-*/
-var CmdFormatter = /** @class */ (function () {
- function CmdFormatter(cmdStr) {
- this.cmdStr = cmdStr;
- }
- CmdFormatter.prototype.format = function (date, context, betterDefaultSeparator) {
- return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
- };
- CmdFormatter.prototype.formatRange = function (start, end, context, betterDefaultSeparator) {
- return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
- };
- return CmdFormatter;
-}());
-
-var FuncFormatter = /** @class */ (function () {
- function FuncFormatter(func) {
- this.func = func;
- }
- FuncFormatter.prototype.format = function (date, context, betterDefaultSeparator) {
- return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
- };
- FuncFormatter.prototype.formatRange = function (start, end, context, betterDefaultSeparator) {
- return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
- };
- return FuncFormatter;
-}());
-
-function createFormatter(input) {
- if (typeof input === 'object' && input) { // non-null object
- return new NativeFormatter(input);
- }
- else if (typeof input === 'string') {
- return new CmdFormatter(input);
- }
- else if (typeof input === 'function') {
- return new FuncFormatter(input);
- }
-}
-
-// base options
-// ------------
-var BASE_OPTION_REFINERS = {
- navLinkDayClick: identity,
- navLinkWeekClick: identity,
- duration: createDuration,
- bootstrapFontAwesome: identity,
- buttonIcons: identity,
- customButtons: identity,
- defaultAllDayEventDuration: createDuration,
- defaultTimedEventDuration: createDuration,
- nextDayThreshold: createDuration,
- scrollTime: createDuration,
- slotMinTime: createDuration,
- slotMaxTime: createDuration,
- dayPopoverFormat: createFormatter,
- slotDuration: createDuration,
- snapDuration: createDuration,
- headerToolbar: identity,
- footerToolbar: identity,
- defaultRangeSeparator: String,
- titleRangeSeparator: String,
- forceEventDuration: Boolean,
- dayHeaders: Boolean,
- dayHeaderFormat: createFormatter,
- dayHeaderClassNames: identity,
- dayHeaderContent: identity,
- dayHeaderDidMount: identity,
- dayHeaderWillUnmount: identity,
- dayCellClassNames: identity,
- dayCellContent: identity,
- dayCellDidMount: identity,
- dayCellWillUnmount: identity,
- initialView: String,
- aspectRatio: Number,
- weekends: Boolean,
- weekNumberCalculation: identity,
- weekNumbers: Boolean,
- weekNumberClassNames: identity,
- weekNumberContent: identity,
- weekNumberDidMount: identity,
- weekNumberWillUnmount: identity,
- editable: Boolean,
- viewClassNames: identity,
- viewDidMount: identity,
- viewWillUnmount: identity,
- nowIndicator: Boolean,
- nowIndicatorClassNames: identity,
- nowIndicatorContent: identity,
- nowIndicatorDidMount: identity,
- nowIndicatorWillUnmount: identity,
- showNonCurrentDates: Boolean,
- lazyFetching: Boolean,
- startParam: String,
- endParam: String,
- timeZoneParam: String,
- timeZone: String,
- locales: identity,
- locale: identity,
- themeSystem: String,
- dragRevertDuration: Number,
- dragScroll: Boolean,
- allDayMaintainDuration: Boolean,
- unselectAuto: Boolean,
- dropAccept: identity,
- eventOrder: parseFieldSpecs,
- handleWindowResize: Boolean,
- windowResizeDelay: Number,
- longPressDelay: Number,
- eventDragMinDistance: Number,
- expandRows: Boolean,
- height: identity,
- contentHeight: identity,
- direction: String,
- weekNumberFormat: createFormatter,
- eventResizableFromStart: Boolean,
- displayEventTime: Boolean,
- displayEventEnd: Boolean,
- weekText: String,
- progressiveEventRendering: Boolean,
- businessHours: identity,
- initialDate: identity,
- now: identity,
- eventDataTransform: identity,
- stickyHeaderDates: identity,
- stickyFooterScrollbar: identity,
- viewHeight: identity,
- defaultAllDay: Boolean,
- eventSourceFailure: identity,
- eventSourceSuccess: identity,
- eventDisplay: String,
- eventStartEditable: Boolean,
- eventDurationEditable: Boolean,
- eventOverlap: identity,
- eventConstraint: identity,
- eventAllow: identity,
- eventBackgroundColor: String,
- eventBorderColor: String,
- eventTextColor: String,
- eventColor: String,
- eventClassNames: identity,
- eventContent: identity,
- eventDidMount: identity,
- eventWillUnmount: identity,
- selectConstraint: identity,
- selectOverlap: identity,
- selectAllow: identity,
- droppable: Boolean,
- unselectCancel: String,
- slotLabelFormat: identity,
- slotLaneClassNames: identity,
- slotLaneContent: identity,
- slotLaneDidMount: identity,
- slotLaneWillUnmount: identity,
- slotLabelClassNames: identity,
- slotLabelContent: identity,
- slotLabelDidMount: identity,
- slotLabelWillUnmount: identity,
- dayMaxEvents: identity,
- dayMaxEventRows: identity,
- dayMinWidth: Number,
- slotLabelInterval: createDuration,
- allDayText: String,
- allDayClassNames: identity,
- allDayContent: identity,
- allDayDidMount: identity,
- allDayWillUnmount: identity,
- slotMinWidth: Number,
- navLinks: Boolean,
- eventTimeFormat: createFormatter,
- rerenderDelay: Number,
- moreLinkText: identity,
- selectMinDistance: Number,
- selectable: Boolean,
- selectLongPressDelay: Number,
- eventLongPressDelay: Number,
- selectMirror: Boolean,
- eventMinHeight: Number,
- slotEventOverlap: Boolean,
- plugins: identity,
- firstDay: Number,
- dayCount: Number,
- dateAlignment: String,
- dateIncrement: createDuration,
- hiddenDays: identity,
- monthMode: Boolean,
- fixedWeekCount: Boolean,
- validRange: identity,
- visibleRange: identity,
- titleFormat: identity,
- // only used by list-view, but languages define the value, so we need it in base options
- noEventsText: String
-};
-// do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.
-// raw values.
-var BASE_OPTION_DEFAULTS = {
- eventDisplay: 'auto',
- defaultRangeSeparator: ' - ',
- titleRangeSeparator: ' \u2013 ',
- defaultTimedEventDuration: '01:00:00',
- defaultAllDayEventDuration: { day: 1 },
- forceEventDuration: false,
- nextDayThreshold: '00:00:00',
- dayHeaders: true,
- initialView: '',
- aspectRatio: 1.35,
- headerToolbar: {
- start: 'title',
- center: '',
- end: 'today prev,next'
- },
- weekends: true,
- weekNumbers: false,
- weekNumberCalculation: 'local',
- editable: false,
- nowIndicator: false,
- scrollTime: '06:00:00',
- slotMinTime: '00:00:00',
- slotMaxTime: '24:00:00',
- showNonCurrentDates: true,
- lazyFetching: true,
- startParam: 'start',
- endParam: 'end',
- timeZoneParam: 'timeZone',
- timeZone: 'local',
- locales: [],
- locale: '',
- themeSystem: 'standard',
- dragRevertDuration: 500,
- dragScroll: true,
- allDayMaintainDuration: false,
- unselectAuto: true,
- dropAccept: '*',
- eventOrder: 'start,-duration,allDay,title',
- dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },
- handleWindowResize: true,
- windowResizeDelay: 100,
- longPressDelay: 1000,
- eventDragMinDistance: 5,
- expandRows: false,
- navLinks: false,
- selectable: false
-};
-// calendar listeners
-// ------------------
-var CALENDAR_LISTENER_REFINERS = {
- datesSet: identity,
- eventsSet: identity,
- eventAdd: identity,
- eventChange: identity,
- eventRemove: identity,
- windowResize: identity,
- eventClick: identity,
- eventMouseEnter: identity,
- eventMouseLeave: identity,
- select: identity,
- unselect: identity,
- loading: identity,
- // internal
- _unmount: identity,
- _beforeprint: identity,
- _afterprint: identity,
- _noEventDrop: identity,
- _noEventResize: identity,
- _resize: identity,
- _scrollRequest: identity
-};
-// calendar-specific options
-// -------------------------
-var CALENDAR_OPTION_REFINERS = {
- buttonText: identity,
- views: identity,
- plugins: identity,
- initialEvents: identity,
- events: identity,
- eventSources: identity
-};
-var COMPLEX_OPTION_COMPARATORS = {
- headerToolbar: isBoolComplexEqual,
- footerToolbar: isBoolComplexEqual,
- buttonText: isBoolComplexEqual,
- buttonIcons: isBoolComplexEqual
-};
-function isBoolComplexEqual(a, b) {
- if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects
- return isPropsEqual(a, b);
- }
- else {
- return a === b;
- }
-}
-// view-specific options
-// ---------------------
-var VIEW_OPTION_REFINERS = {
- type: String,
- component: identity,
- buttonText: String,
- buttonTextKey: String,
- dateProfileGeneratorClass: identity,
- usesMinMaxTime: Boolean,
- classNames: identity,
- content: identity,
- didMount: identity,
- willUnmount: identity
-};
-// util funcs
-// ----------------------------------------------------------------------------------------------------
-function mergeRawOptions(optionSets) {
- return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);
-}
-function refineProps(input, refiners) {
- var refined = {};
- var extra = {};
- for (var propName in refiners) {
- if (propName in input) {
- refined[propName] = refiners[propName](input[propName]);
- }
- }
- for (var propName in input) {
- if (!(propName in refiners)) {
- extra[propName] = input[propName];
- }
- }
- return { refined: refined, extra: extra };
-}
-function identity(raw) {
- return raw;
-}
-
-function parseEvents(rawEvents, eventSource, context, allowOpenRange) {
- var eventStore = createEmptyEventStore();
- var eventRefiners = buildEventRefiners(context);
- for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
- var rawEvent = rawEvents_1[_i];
- var tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners);
- if (tuple) {
- eventTupleToStore(tuple, eventStore);
- }
- }
- return eventStore;
-}
-function eventTupleToStore(tuple, eventStore) {
- if (eventStore === void 0) { eventStore = createEmptyEventStore(); }
- eventStore.defs[tuple.def.defId] = tuple.def;
- if (tuple.instance) {
- eventStore.instances[tuple.instance.instanceId] = tuple.instance;
- }
- return eventStore;
-}
-// retrieves events that have the same groupId as the instance specified by `instanceId`
-// or they are the same as the instance.
-// why might instanceId not be in the store? an event from another calendar?
-function getRelevantEvents(eventStore, instanceId) {
- var instance = eventStore.instances[instanceId];
- if (instance) {
- var def_1 = eventStore.defs[instance.defId];
- // get events/instances with same group
- var newStore = filterEventStoreDefs(eventStore, function (lookDef) {
- return isEventDefsGrouped(def_1, lookDef);
- });
- // add the original
- // TODO: wish we could use eventTupleToStore or something like it
- newStore.defs[def_1.defId] = def_1;
- newStore.instances[instance.instanceId] = instance;
- return newStore;
- }
- return createEmptyEventStore();
-}
-function isEventDefsGrouped(def0, def1) {
- return Boolean(def0.groupId && def0.groupId === def1.groupId);
-}
-function createEmptyEventStore() {
- return { defs: {}, instances: {} };
-}
-function mergeEventStores(store0, store1) {
- return {
- defs: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, store0.defs), store1.defs),
- instances: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, store0.instances), store1.instances)
- };
-}
-function filterEventStoreDefs(eventStore, filterFunc) {
- var defs = filterHash(eventStore.defs, filterFunc);
- var instances = filterHash(eventStore.instances, function (instance) {
- return defs[instance.defId]; // still exists?
- });
- return { defs: defs, instances: instances };
-}
-function excludeSubEventStore(master, sub) {
- var defs = master.defs, instances = master.instances;
- var filteredDefs = {};
- var filteredInstances = {};
- for (var defId in defs) {
- if (!sub.defs[defId]) { // not explicitly excluded
- filteredDefs[defId] = defs[defId];
- }
- }
- for (var instanceId in instances) {
- if (!sub.instances[instanceId] && // not explicitly excluded
- filteredDefs[instances[instanceId].defId] // def wasn't filtered away
- ) {
- filteredInstances[instanceId] = instances[instanceId];
- }
- }
- return {
- defs: filteredDefs,
- instances: filteredInstances
- };
-}
-
-function normalizeConstraint(input, context) {
- if (Array.isArray(input)) {
- return parseEvents(input, null, context, true); // allowOpenRange=true
- }
- else if (typeof input === 'object' && input) { // non-null object
- return parseEvents([input], null, context, true); // allowOpenRange=true
- }
- else if (input != null) {
- return String(input);
- }
- else {
- return null;
- }
-}
-
-function parseClassNames(raw) {
- if (Array.isArray(raw)) {
- return raw;
- }
- else if (typeof raw === 'string') {
- return raw.split(/\s+/);
- }
- else {
- return [];
- }
-}
-
-// TODO: better called "EventSettings" or "EventConfig"
-// TODO: move this file into structs
-// TODO: separate constraint/overlap/allow, because selection uses only that, not other props
-var EVENT_UI_REFINERS = {
- display: String,
- editable: Boolean,
- startEditable: Boolean,
- durationEditable: Boolean,
- constraint: identity,
- overlap: identity,
- allow: identity,
- className: parseClassNames,
- classNames: parseClassNames,
- color: String,
- backgroundColor: String,
- borderColor: String,
- textColor: String
-};
-function createEventUi(refined, context) {
- var constraint = normalizeConstraint(refined.constraint, context);
- return {
- display: refined.display || null,
- startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,
- durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,
- constraints: constraint != null ? [constraint] : [],
- overlap: refined.overlap != null ? refined.overlap : null,
- allows: refined.allow != null ? [refined.allow] : [],
- backgroundColor: refined.backgroundColor || refined.color || '',
- borderColor: refined.borderColor || refined.color || '',
- textColor: refined.textColor || '',
- classNames: (refined.className || []).concat(refined.classNames || []) // join singular and plural
- };
-}
-// TODO: prevent against problems with <2 args!
-function combineEventUis(uis) {
- return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);
-}
-function combineTwoEventUis(item0, item1) {
- return {
- display: item1.display != null ? item1.display : item0.display,
- startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,
- durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,
- constraints: item0.constraints.concat(item1.constraints),
- overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,
- allows: item0.allows.concat(item1.allows),
- backgroundColor: item1.backgroundColor || item0.backgroundColor,
- borderColor: item1.borderColor || item0.borderColor,
- textColor: item1.textColor || item0.textColor,
- classNames: item0.classNames.concat(item1.classNames)
- };
-}
-var EMPTY_EVENT_UI = {
- display: null,
- startEditable: null,
- durationEditable: null,
- constraints: [],
- overlap: null,
- allows: [],
- backgroundColor: '',
- borderColor: '',
- textColor: '',
- classNames: []
-};
-
-var EVENT_NON_DATE_REFINERS = {
- id: String,
- groupId: String,
- title: String,
- url: String
-};
-var EVENT_DATE_REFINERS = {
- start: identity,
- end: identity,
- date: identity,
- allDay: Boolean
-};
-var EVENT_REFINERS = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), { extendedProps: identity });
-function parseEvent(raw, eventSource, context, allowOpenRange, refiners) {
- if (refiners === void 0) { refiners = buildEventRefiners(context); }
- var _a = refineEventDef(raw, context, refiners), refined = _a.refined, extra = _a.extra;
- var defaultAllDay = computeIsDefaultAllDay(eventSource, context);
- var recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);
- if (recurringRes) {
- var def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context);
- def.recurringDef = {
- typeId: recurringRes.typeId,
- typeData: recurringRes.typeData,
- duration: recurringRes.duration
- };
- return { def: def, instance: null };
- }
- else {
- var singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);
- if (singleRes) {
- var def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context);
- var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);
- return { def: def, instance: instance };
- }
- }
- return null;
-}
-function refineEventDef(raw, context, refiners) {
- if (refiners === void 0) { refiners = buildEventRefiners(context); }
- return refineProps(raw, refiners);
-}
-function buildEventRefiners(context) {
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);
-}
-/*
-Will NOT populate extendedProps with the leftover properties.
-Will NOT populate date-related props.
-*/
-function parseEventDef(refined, extra, sourceId, allDay, hasEnd, context) {
- var def = {
- title: refined.title || '',
- groupId: refined.groupId || '',
- publicId: refined.id || '',
- url: refined.url || '',
- recurringDef: null,
- defId: guid(),
- sourceId: sourceId,
- allDay: allDay,
- hasEnd: hasEnd,
- ui: createEventUi(refined, context),
- extendedProps: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, (refined.extendedProps || {})), extra)
- };
- for (var _i = 0, _a = context.pluginHooks.eventDefMemberAdders; _i < _a.length; _i++) {
- var memberAdder = _a[_i];
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(def, memberAdder(refined));
- }
- // help out EventApi from having user modify props
- Object.freeze(def.ui.classNames);
- Object.freeze(def.extendedProps);
- return def;
-}
-function parseSingle(refined, defaultAllDay, context, allowOpenRange) {
- var allDay = refined.allDay;
- var startMeta;
- var startMarker = null;
- var hasEnd = false;
- var endMeta;
- var endMarker = null;
- var startInput = refined.start != null ? refined.start : refined.date;
- startMeta = context.dateEnv.createMarkerMeta(startInput);
- if (startMeta) {
- startMarker = startMeta.marker;
- }
- else if (!allowOpenRange) {
- return null;
- }
- if (refined.end != null) {
- endMeta = context.dateEnv.createMarkerMeta(refined.end);
- }
- if (allDay == null) {
- if (defaultAllDay != null) {
- allDay = defaultAllDay;
- }
- else {
- // fall back to the date props LAST
- allDay = (!startMeta || startMeta.isTimeUnspecified) &&
- (!endMeta || endMeta.isTimeUnspecified);
- }
- }
- if (allDay && startMarker) {
- startMarker = startOfDay(startMarker);
- }
- if (endMeta) {
- endMarker = endMeta.marker;
- if (allDay) {
- endMarker = startOfDay(endMarker);
- }
- if (startMarker && endMarker <= startMarker) {
- endMarker = null;
- }
- }
- if (endMarker) {
- hasEnd = true;
- }
- else if (!allowOpenRange) {
- hasEnd = context.options.forceEventDuration || false;
- endMarker = context.dateEnv.add(startMarker, allDay ?
- context.options.defaultAllDayEventDuration :
- context.options.defaultTimedEventDuration);
- }
- return {
- allDay: allDay,
- hasEnd: hasEnd,
- range: { start: startMarker, end: endMarker },
- forcedStartTzo: startMeta ? startMeta.forcedTzo : null,
- forcedEndTzo: endMeta ? endMeta.forcedTzo : null
- };
-}
-function computeIsDefaultAllDay(eventSource, context) {
- var res = null;
- if (eventSource) {
- res = eventSource.defaultAllDay;
- }
- if (res == null) {
- res = context.options.defaultAllDay;
- }
- return res;
-}
-
-/* Date stuff that doesn't belong in datelib core
-----------------------------------------------------------------------------------------------------------------------*/
-// given a timed range, computes an all-day range that has the same exact duration,
-// but whose start time is aligned with the start of the day.
-function computeAlignedDayRange(timedRange) {
- var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;
- var start = startOfDay(timedRange.start);
- var end = addDays(start, dayCnt);
- return { start: start, end: end };
-}
-// given a timed range, computes an all-day range based on how for the end date bleeds into the next day
-// TODO: give nextDayThreshold a default arg
-function computeVisibleDayRange(timedRange, nextDayThreshold) {
- if (nextDayThreshold === void 0) { nextDayThreshold = createDuration(0); }
- var startDay = null;
- var endDay = null;
- if (timedRange.end) {
- endDay = startOfDay(timedRange.end);
- var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`
- // If the end time is actually inclusively part of the next day and is equal to or
- // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.
- // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.
- if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {
- endDay = addDays(endDay, 1);
- }
- }
- if (timedRange.start) {
- startDay = startOfDay(timedRange.start); // the beginning of the day the range starts
- // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
- if (endDay && endDay <= startDay) {
- endDay = addDays(startDay, 1);
- }
- }
- return { start: startDay, end: endDay };
-}
-// spans from one day into another?
-function isMultiDayRange(range) {
- var visibleRange = computeVisibleDayRange(range);
- return diffDays(visibleRange.start, visibleRange.end) > 1;
-}
-function diffDates(date0, date1, dateEnv, largeUnit) {
- if (largeUnit === 'year') {
- return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');
- }
- else if (largeUnit === 'month') {
- return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');
- }
- else {
- return diffDayAndTime(date0, date1); // returns a duration
- }
-}
-
-function parseRange(input, dateEnv) {
- var start = null;
- var end = null;
- if (input.start) {
- start = dateEnv.createMarker(input.start);
- }
- if (input.end) {
- end = dateEnv.createMarker(input.end);
- }
- if (!start && !end) {
- return null;
- }
- if (start && end && end < start) {
- return null;
- }
- return { start: start, end: end };
-}
-// SIDE-EFFECT: will mutate ranges.
-// Will return a new array result.
-function invertRanges(ranges, constraintRange) {
- var invertedRanges = [];
- var start = constraintRange.start; // the end of the previous range. the start of the new range
- var i;
- var dateRange;
- // ranges need to be in order. required for our date-walking algorithm
- ranges.sort(compareRanges);
- for (i = 0; i < ranges.length; i++) {
- dateRange = ranges[i];
- // add the span of time before the event (if there is any)
- if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)
- invertedRanges.push({ start: start, end: dateRange.start });
- }
- if (dateRange.end > start) {
- start = dateRange.end;
- }
- }
- // add the span of time after the last event (if there is any)
- if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)
- invertedRanges.push({ start: start, end: constraintRange.end });
- }
- return invertedRanges;
-}
-function compareRanges(range0, range1) {
- return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first
-}
-function intersectRanges(range0, range1) {
- var start = range0.start;
- var end = range0.end;
- var newRange = null;
- if (range1.start !== null) {
- if (start === null) {
- start = range1.start;
- }
- else {
- start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));
- }
- }
- if (range1.end != null) {
- if (end === null) {
- end = range1.end;
- }
- else {
- end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));
- }
- }
- if (start === null || end === null || start < end) {
- newRange = { start: start, end: end };
- }
- return newRange;
-}
-function rangesEqual(range0, range1) {
- return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&
- (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());
-}
-function rangesIntersect(range0, range1) {
- return (range0.end === null || range1.start === null || range0.end > range1.start) &&
- (range0.start === null || range1.end === null || range0.start < range1.end);
-}
-function rangeContainsRange(outerRange, innerRange) {
- return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&
- (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));
-}
-function rangeContainsMarker(range, date) {
- return (range.start === null || date >= range.start) &&
- (range.end === null || date < range.end);
-}
-// If the given date is not within the given range, move it inside.
-// (If it's past the end, make it one millisecond before the end).
-function constrainMarkerToRange(date, range) {
- if (range.start != null && date < range.start) {
- return range.start;
- }
- if (range.end != null && date >= range.end) {
- return new Date(range.end.valueOf() - 1);
- }
- return date;
-}
-
-/*
-Specifying nextDayThreshold signals that all-day ranges should be sliced.
-*/
-function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {
- var inverseBgByGroupId = {};
- var inverseBgByDefId = {};
- var defByGroupId = {};
- var bgRanges = [];
- var fgRanges = [];
- var eventUis = compileEventUis(eventStore.defs, eventUiBases);
- for (var defId in eventStore.defs) {
- var def = eventStore.defs[defId];
- var ui = eventUis[def.defId];
- if (ui.display === 'inverse-background') {
- if (def.groupId) {
- inverseBgByGroupId[def.groupId] = [];
- if (!defByGroupId[def.groupId]) {
- defByGroupId[def.groupId] = def;
- }
- }
- else {
- inverseBgByDefId[defId] = [];
- }
- }
- }
- for (var instanceId in eventStore.instances) {
- var instance = eventStore.instances[instanceId];
- var def = eventStore.defs[instance.defId];
- var ui = eventUis[def.defId];
- var origRange = instance.range;
- var normalRange = (!def.allDay && nextDayThreshold) ?
- computeVisibleDayRange(origRange, nextDayThreshold) :
- origRange;
- var slicedRange = intersectRanges(normalRange, framingRange);
- if (slicedRange) {
- if (ui.display === 'inverse-background') {
- if (def.groupId) {
- inverseBgByGroupId[def.groupId].push(slicedRange);
- }
- else {
- inverseBgByDefId[instance.defId].push(slicedRange);
- }
- }
- else if (ui.display !== 'none') {
- (ui.display === 'background' ? bgRanges : fgRanges).push({
- def: def,
- ui: ui,
- instance: instance,
- range: slicedRange,
- isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),
- isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()
- });
- }
- }
- }
- for (var groupId in inverseBgByGroupId) { // BY GROUP
- var ranges = inverseBgByGroupId[groupId];
- var invertedRanges = invertRanges(ranges, framingRange);
- for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) {
- var invertedRange = invertedRanges_1[_i];
- var def = defByGroupId[groupId];
- var ui = eventUis[def.defId];
- bgRanges.push({
- def: def,
- ui: ui,
- instance: null,
- range: invertedRange,
- isStart: false,
- isEnd: false
- });
- }
- }
- for (var defId in inverseBgByDefId) {
- var ranges = inverseBgByDefId[defId];
- var invertedRanges = invertRanges(ranges, framingRange);
- for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) {
- var invertedRange = invertedRanges_2[_a];
- bgRanges.push({
- def: eventStore.defs[defId],
- ui: eventUis[defId],
- instance: null,
- range: invertedRange,
- isStart: false,
- isEnd: false
- });
- }
- }
- return { bg: bgRanges, fg: fgRanges };
-}
-function hasBgRendering(def) {
- return def.ui.display === 'background' || def.ui.display === 'inverse-background';
-}
-function setElSeg(el, seg) {
- el.fcSeg = seg;
-}
-function getElSeg(el) {
- return el.fcSeg ||
- el.parentNode.fcSeg || // for the harness
- null;
-}
-// event ui computation
-function compileEventUis(eventDefs, eventUiBases) {
- return mapHash(eventDefs, function (eventDef) {
- return compileEventUi(eventDef, eventUiBases);
- });
-}
-function compileEventUi(eventDef, eventUiBases) {
- var uis = [];
- if (eventUiBases['']) {
- uis.push(eventUiBases['']);
- }
- if (eventUiBases[eventDef.defId]) {
- uis.push(eventUiBases[eventDef.defId]);
- }
- uis.push(eventDef.ui);
- return combineEventUis(uis);
-}
-function sortEventSegs(segs, eventOrderSpecs) {
- var objs = segs.map(buildSegCompareObj);
- objs.sort(function (obj0, obj1) {
- return compareByFieldSpecs(obj0, obj1, eventOrderSpecs);
- });
- return objs.map(function (c) {
- return c._seg;
- });
-}
-// returns a object with all primitive props that can be compared
-function buildSegCompareObj(seg) {
- var eventRange = seg.eventRange;
- var eventDef = eventRange.def;
- var range = eventRange.instance ? eventRange.instance.range : eventRange.range;
- var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events
- var end = range.end ? range.end.valueOf() : 0; // "
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, eventDef.extendedProps), eventDef), { id: eventDef.publicId, start: start,
- end: end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg // for later retrieval
- });
-}
-function computeSegDraggable(seg, context) {
- var pluginHooks = context.pluginHooks;
- var transformers = pluginHooks.isDraggableTransformers;
- var _a = seg.eventRange, def = _a.def, ui = _a.ui;
- var val = ui.startEditable;
- for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
- var transformer = transformers_1[_i];
- val = transformer(val, def, ui, context);
- }
- return val;
-}
-function computeSegStartResizable(seg, context) {
- return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;
-}
-function computeSegEndResizable(seg, context) {
- return seg.isEnd && seg.eventRange.ui.durationEditable;
-}
-function buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true
-defaultDisplayEventEnd, // defaults to true
-startOverride, endOverride) {
- var dateEnv = context.dateEnv, options = context.options;
- var displayEventTime = options.displayEventTime, displayEventEnd = options.displayEventEnd;
- var eventDef = seg.eventRange.def;
- var eventInstance = seg.eventRange.instance;
- if (displayEventTime == null) {
- displayEventTime = defaultDisplayEventTime !== false;
- }
- if (displayEventEnd == null) {
- displayEventEnd = defaultDisplayEventEnd !== false;
- }
- if (displayEventTime && !eventDef.allDay && (seg.isStart || seg.isEnd)) {
- var segStart = startOverride || (seg.isStart ? eventInstance.range.start : (seg.start || seg.eventRange.range.start));
- var segEnd = endOverride || (seg.isEnd ? eventInstance.range.end : (seg.end || seg.eventRange.range.end));
- if (displayEventEnd && eventDef.hasEnd) {
- return dateEnv.formatRange(segStart, segEnd, timeFormat, {
- forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,
- forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo
- });
- }
- else {
- return dateEnv.format(segStart, timeFormat, {
- forcedTzo: startOverride ? null : eventInstance.forcedStartTzo // nooooo, same
- });
- }
- }
- return '';
-}
-function getSegMeta(seg, todayRange, nowDate) {
- var segRange = seg.eventRange.range;
- return {
- isPast: segRange.end < (nowDate || todayRange.start),
- isFuture: segRange.start >= (nowDate || todayRange.end),
- isToday: todayRange && rangeContainsMarker(todayRange, segRange.start)
- };
-}
-function getEventClassNames(props) {
- var classNames = ['fc-event'];
- if (props.isMirror) {
- classNames.push('fc-event-mirror');
- }
- if (props.isDraggable) {
- classNames.push('fc-event-draggable');
- }
- if (props.isStartResizable || props.isEndResizable) {
- classNames.push('fc-event-resizable');
- }
- if (props.isDragging) {
- classNames.push('fc-event-dragging');
- }
- if (props.isResizing) {
- classNames.push('fc-event-resizing');
- }
- if (props.isSelected) {
- classNames.push('fc-event-selected');
- }
- if (props.isStart) {
- classNames.push('fc-event-start');
- }
- if (props.isEnd) {
- classNames.push('fc-event-end');
- }
- if (props.isPast) {
- classNames.push('fc-event-past');
- }
- if (props.isToday) {
- classNames.push('fc-event-today');
- }
- if (props.isFuture) {
- classNames.push('fc-event-future');
- }
- return classNames;
-}
-function buildEventRangeKey(eventRange) {
- return eventRange.instance
- ? eventRange.instance.instanceId
- : eventRange.def.defId + ':' + eventRange.range.start.toISOString();
- // inverse-background events don't have specific instances. TODO: better solution
-}
-
-var STANDARD_PROPS = {
- start: identity,
- end: identity,
- allDay: Boolean
-};
-function parseDateSpan(raw, dateEnv, defaultDuration) {
- var span = parseOpenDateSpan(raw, dateEnv);
- var range = span.range;
- if (!range.start) {
- return null;
- }
- if (!range.end) {
- if (defaultDuration == null) {
- return null;
- }
- else {
- range.end = dateEnv.add(range.start, defaultDuration);
- }
- }
- return span;
-}
-/*
-TODO: somehow combine with parseRange?
-Will return null if the start/end props were present but parsed invalidly.
-*/
-function parseOpenDateSpan(raw, dateEnv) {
- var _a = refineProps(raw, STANDARD_PROPS), standardProps = _a.refined, extra = _a.extra;
- var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;
- var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;
- var allDay = standardProps.allDay;
- if (allDay == null) {
- allDay = (startMeta && startMeta.isTimeUnspecified) &&
- (!endMeta || endMeta.isTimeUnspecified);
- }
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ range: {
- start: startMeta ? startMeta.marker : null,
- end: endMeta ? endMeta.marker : null,
- }, allDay: allDay }, extra);
-}
-function isDateSpansEqual(span0, span1) {
- return rangesEqual(span0.range, span1.range) &&
- span0.allDay === span1.allDay &&
- isSpanPropsEqual(span0, span1);
-}
-// the NON-DATE-RELATED props
-function isSpanPropsEqual(span0, span1) {
- for (var propName in span1) {
- if (propName !== 'range' && propName !== 'allDay') {
- if (span0[propName] !== span1[propName]) {
- return false;
- }
- }
- }
- // are there any props that span0 has that span1 DOESN'T have?
- // both have range/allDay, so no need to special-case.
- for (var propName in span0) {
- if (!(propName in span1)) {
- return false;
- }
- }
- return true;
-}
-function buildDateSpanApi(span, dateEnv) {
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, buildRangeApi(span.range, dateEnv, span.allDay)), { allDay: span.allDay });
-}
-function buildRangeApiWithTimeZone(range, dateEnv, omitTime) {
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, buildRangeApi(range, dateEnv, omitTime)), { timeZone: dateEnv.timeZone });
-}
-function buildRangeApi(range, dateEnv, omitTime) {
- return {
- start: dateEnv.toDate(range.start),
- end: dateEnv.toDate(range.end),
- startStr: dateEnv.formatIso(range.start, { omitTime: omitTime }),
- endStr: dateEnv.formatIso(range.end, { omitTime: omitTime })
- };
-}
-function fabricateEventRange(dateSpan, eventUiBases, context) {
- var res = refineEventDef({ editable: false }, context);
- var def = parseEventDef(res.refined, res.extra, '', // sourceId
- dateSpan.allDay, true, // hasEnd
- context);
- return {
- def: def,
- ui: compileEventUi(def, eventUiBases),
- instance: createEventInstance(def.defId, dateSpan.range),
- range: dateSpan.range,
- isStart: true,
- isEnd: true
- };
-}
-
-function triggerDateSelect(selection, pev, context) {
- context.emitter.trigger('select', Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, buildDateSpanApiWithContext(selection, context)), { jsEvent: pev ? pev.origEvent : null, view: context.viewApi || context.calendarApi.view }));
-}
-function triggerDateUnselect(pev, context) {
- context.emitter.trigger('unselect', {
- jsEvent: pev ? pev.origEvent : null,
- view: context.viewApi || context.calendarApi.view
- });
-}
-function buildDateSpanApiWithContext(dateSpan, context) {
- var props = {};
- for (var _i = 0, _a = context.pluginHooks.dateSpanTransforms; _i < _a.length; _i++) {
- var transform = _a[_i];
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(props, transform(dateSpan, context));
- }
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(props, buildDateSpanApi(dateSpan, context.dateEnv));
- return props;
-}
-// Given an event's allDay status and start date, return what its fallback end date should be.
-// TODO: rename to computeDefaultEventEnd
-function getDefaultEventEnd(allDay, marker, context) {
- var dateEnv = context.dateEnv, options = context.options;
- var end = marker;
- if (allDay) {
- end = startOfDay(end);
- end = dateEnv.add(end, options.defaultAllDayEventDuration);
- }
- else {
- end = dateEnv.add(end, options.defaultTimedEventDuration);
- }
- return end;
-}
-
-// applies the mutation to ALL defs/instances within the event store
-function applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {
- var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);
- var dest = createEmptyEventStore();
- for (var defId in eventStore.defs) {
- var def = eventStore.defs[defId];
- dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);
- }
- for (var instanceId in eventStore.instances) {
- var instance = eventStore.instances[instanceId];
- var def = dest.defs[instance.defId]; // important to grab the newly modified def
- dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context);
- }
- return dest;
-}
-function applyMutationToEventDef(eventDef, eventConfig, mutation, context) {
- var standardProps = mutation.standardProps || {};
- // if hasEnd has not been specified, guess a good value based on deltas.
- // if duration will change, there's no way the default duration will persist,
- // and thus, we need to mark the event as having a real end
- if (standardProps.hasEnd == null &&
- eventConfig.durationEditable &&
- (mutation.startDelta || mutation.endDelta)) {
- standardProps.hasEnd = true; // TODO: is this mutation okay?
- }
- var copy = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, eventDef), standardProps), { ui: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, eventDef.ui), standardProps.ui) });
- if (mutation.extendedProps) {
- copy.extendedProps = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, copy.extendedProps), mutation.extendedProps);
- }
- for (var _i = 0, _a = context.pluginHooks.eventDefMutationAppliers; _i < _a.length; _i++) {
- var applier = _a[_i];
- applier(copy, mutation, context);
- }
- if (!copy.hasEnd && context.options.forceEventDuration) {
- copy.hasEnd = true;
- }
- return copy;
-}
-function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef
-eventConfig, mutation, context) {
- var dateEnv = context.dateEnv;
- var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;
- var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;
- var copy = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, eventInstance);
- if (forceAllDay) {
- copy.range = computeAlignedDayRange(copy.range);
- }
- if (mutation.datesDelta && eventConfig.startEditable) {
- copy.range = {
- start: dateEnv.add(copy.range.start, mutation.datesDelta),
- end: dateEnv.add(copy.range.end, mutation.datesDelta)
- };
- }
- if (mutation.startDelta && eventConfig.durationEditable) {
- copy.range = {
- start: dateEnv.add(copy.range.start, mutation.startDelta),
- end: copy.range.end
- };
- }
- if (mutation.endDelta && eventConfig.durationEditable) {
- copy.range = {
- start: copy.range.start,
- end: dateEnv.add(copy.range.end, mutation.endDelta)
- };
- }
- if (clearEnd) {
- copy.range = {
- start: copy.range.start,
- end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context)
- };
- }
- // in case event was all-day but the supplied deltas were not
- // better util for this?
- if (eventDef.allDay) {
- copy.range = {
- start: startOfDay(copy.range.start),
- end: startOfDay(copy.range.end)
- };
- }
- // handle invalid durations
- if (copy.range.end < copy.range.start) {
- copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);
- }
- return copy;
-}
-
-// no public types yet. when there are, export from:
-// import {} from './api-type-deps'
-var ViewApi = /** @class */ (function () {
- function ViewApi(type, getCurrentData, dateEnv) {
- this.type = type;
- this.getCurrentData = getCurrentData;
- this.dateEnv = dateEnv;
- }
- Object.defineProperty(ViewApi.prototype, "calendar", {
- get: function () {
- return this.getCurrentData().calendarApi;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(ViewApi.prototype, "title", {
- get: function () {
- return this.getCurrentData().viewTitle;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(ViewApi.prototype, "activeStart", {
- get: function () {
- return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(ViewApi.prototype, "activeEnd", {
- get: function () {
- return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(ViewApi.prototype, "currentStart", {
- get: function () {
- return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(ViewApi.prototype, "currentEnd", {
- get: function () {
- return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);
- },
- enumerable: false,
- configurable: true
- });
- ViewApi.prototype.getOption = function (name) {
- return this.getCurrentData().options[name]; // are the view-specific options
- };
- return ViewApi;
-}());
-
-var EVENT_SOURCE_REFINERS = {
- id: String,
- defaultAllDay: Boolean,
- url: String,
- events: identity,
- eventDataTransform: identity,
- // for any network-related sources
- success: identity,
- failure: identity,
-};
-function parseEventSource(raw, context, refiners) {
- if (refiners === void 0) { refiners = buildEventSourceRefiners(context); }
- var rawObj;
- if (typeof raw === 'string') {
- rawObj = { url: raw };
- }
- else if (typeof raw === 'function' || Array.isArray(raw)) {
- rawObj = { events: raw };
- }
- else if (typeof raw === 'object' && raw) { // not null
- rawObj = raw;
- }
- if (rawObj) {
- var _a = refineProps(rawObj, refiners), refined = _a.refined, extra = _a.extra;
- var metaRes = buildEventSourceMeta(refined, context);
- if (metaRes) {
- return {
- _raw: raw,
- isFetching: false,
- latestFetchId: '',
- fetchRange: null,
- defaultAllDay: refined.defaultAllDay,
- eventDataTransform: refined.eventDataTransform,
- success: refined.success,
- failure: refined.failure,
- publicId: refined.id || '',
- sourceId: guid(),
- sourceDefId: metaRes.sourceDefId,
- meta: metaRes.meta,
- ui: createEventUi(refined, context),
- extendedProps: extra
- };
- }
- }
- return null;
-}
-function buildEventSourceRefiners(context) {
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);
-}
-function buildEventSourceMeta(raw, context) {
- var defs = context.pluginHooks.eventSourceDefs;
- for (var i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence
- var def = defs[i];
- var meta = def.parseMeta(raw);
- if (meta) {
- return { sourceDefId: i, meta: meta };
- }
- }
- return null;
-}
-
-function reduceCurrentDate(currentDate, action) {
- switch (action.type) {
- case 'CHANGE_DATE':
- return action.dateMarker;
- default:
- return currentDate;
- }
-}
-function getInitialDate(options, dateEnv) {
- var initialDateInput = options.initialDate;
- // compute the initial ambig-timezone date
- if (initialDateInput != null) {
- return dateEnv.createMarker(initialDateInput);
- }
- else {
- return getNow(options.now, dateEnv); // getNow already returns unzoned
- }
-}
-function getNow(nowInput, dateEnv) {
- if (typeof nowInput === 'function') {
- nowInput = nowInput();
- }
- if (nowInput == null) {
- return dateEnv.createNowMarker();
- }
- return dateEnv.createMarker(nowInput);
-}
-
-var CalendarApi = /** @class */ (function () {
- function CalendarApi() {
- }
- CalendarApi.prototype.getCurrentData = function () {
- return this.currentDataManager.getCurrentData();
- };
- CalendarApi.prototype.dispatch = function (action) {
- return this.currentDataManager.dispatch(action);
- };
- Object.defineProperty(CalendarApi.prototype, "view", {
- get: function () { return this.getCurrentData().viewApi; } // for public API
- ,
- enumerable: false,
- configurable: true
- });
- CalendarApi.prototype.batchRendering = function (callback) {
- callback();
- };
- CalendarApi.prototype.updateSize = function () {
- this.trigger('_resize', true);
- };
- // Options
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.setOption = function (name, val) {
- this.dispatch({
- type: 'SET_OPTION',
- optionName: name,
- rawOptionValue: val
- });
- };
- CalendarApi.prototype.getOption = function (name) {
- return this.currentDataManager.currentCalendarOptionsInput[name];
- };
- CalendarApi.prototype.getAvailableLocaleCodes = function () {
- return Object.keys(this.getCurrentData().availableRawLocales);
- };
- // Trigger
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.on = function (handlerName, handler) {
- var currentDataManager = this.currentDataManager;
- if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {
- currentDataManager.emitter.on(handlerName, handler);
- }
- else {
- console.warn("Unknown listener name '" + handlerName + "'");
- }
- };
- CalendarApi.prototype.off = function (handlerName, handler) {
- this.currentDataManager.emitter.off(handlerName, handler);
- };
- CalendarApi.prototype.trigger = function (handlerName) {
- var _a;
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- (_a = this.currentDataManager.emitter).trigger.apply(_a, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([handlerName], args));
- };
- // View
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.changeView = function (viewType, dateOrRange) {
- var _this = this;
- this.batchRendering(function () {
- _this.unselect();
- if (dateOrRange) {
- if (dateOrRange.start && dateOrRange.end) { // a range
- _this.dispatch({
- type: 'CHANGE_VIEW_TYPE',
- viewType: viewType,
- });
- _this.dispatch({
- type: 'SET_OPTION',
- optionName: 'visibleRange',
- rawOptionValue: dateOrRange
- });
- }
- else {
- var dateEnv = _this.getCurrentData().dateEnv;
- _this.dispatch({
- type: 'CHANGE_VIEW_TYPE',
- viewType: viewType,
- dateMarker: dateEnv.createMarker(dateOrRange)
- });
- }
- }
- else {
- _this.dispatch({
- type: 'CHANGE_VIEW_TYPE',
- viewType: viewType
- });
- }
- });
- };
- // Forces navigation to a view for the given date.
- // `viewType` can be a specific view name or a generic one like "week" or "day".
- // needs to change
- CalendarApi.prototype.zoomTo = function (dateMarker, viewType) {
- var state = this.getCurrentData();
- var spec;
- viewType = viewType || 'day'; // day is default zoom
- spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);
- this.unselect();
- if (spec) {
- this.dispatch({
- type: 'CHANGE_VIEW_TYPE',
- viewType: spec.type,
- dateMarker: dateMarker
- });
- }
- else {
- this.dispatch({
- type: 'CHANGE_DATE',
- dateMarker: dateMarker
- });
- }
- };
- // Given a duration singular unit, like "week" or "day", finds a matching view spec.
- // Preference is given to views that have corresponding buttons.
- CalendarApi.prototype.getUnitViewSpec = function (unit) {
- var _a = this.getCurrentData(), viewSpecs = _a.viewSpecs, toolbarConfig = _a.toolbarConfig;
- var viewTypes = [].concat(toolbarConfig.viewsWithButtons);
- var i;
- var spec;
- for (var viewType in viewSpecs) {
- viewTypes.push(viewType);
- }
- for (i = 0; i < viewTypes.length; i++) {
- spec = viewSpecs[viewTypes[i]];
- if (spec) {
- if (spec.singleUnit === unit) {
- return spec;
- }
- }
- }
- };
- // Current Date
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.prev = function () {
- this.unselect();
- this.dispatch({ type: 'PREV' });
- };
- CalendarApi.prototype.next = function () {
- this.unselect();
- this.dispatch({ type: 'NEXT' });
- };
- CalendarApi.prototype.prevYear = function () {
- var state = this.getCurrentData();
- this.unselect();
- this.dispatch({
- type: 'CHANGE_DATE',
- dateMarker: state.dateEnv.addYears(state.currentDate, -1)
- });
- };
- CalendarApi.prototype.nextYear = function () {
- var state = this.getCurrentData();
- this.unselect();
- this.dispatch({
- type: 'CHANGE_DATE',
- dateMarker: state.dateEnv.addYears(state.currentDate, 1)
- });
- };
- CalendarApi.prototype.today = function () {
- var state = this.getCurrentData();
- this.unselect();
- this.dispatch({
- type: 'CHANGE_DATE',
- dateMarker: getNow(state.calendarOptions.now, state.dateEnv)
- });
- };
- CalendarApi.prototype.gotoDate = function (zonedDateInput) {
- var state = this.getCurrentData();
- this.unselect();
- this.dispatch({
- type: 'CHANGE_DATE',
- dateMarker: state.dateEnv.createMarker(zonedDateInput)
- });
- };
- CalendarApi.prototype.incrementDate = function (deltaInput) {
- var state = this.getCurrentData();
- var delta = createDuration(deltaInput);
- if (delta) { // else, warn about invalid input?
- this.unselect();
- this.dispatch({
- type: 'CHANGE_DATE',
- dateMarker: state.dateEnv.add(state.currentDate, delta)
- });
- }
- };
- // for external API
- CalendarApi.prototype.getDate = function () {
- var state = this.getCurrentData();
- return state.dateEnv.toDate(state.currentDate);
- };
- // Date Formatting Utils
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.formatDate = function (d, formatter) {
- var dateEnv = this.getCurrentData().dateEnv;
- return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));
- };
- // `settings` is for formatter AND isEndExclusive
- CalendarApi.prototype.formatRange = function (d0, d1, settings) {
- var dateEnv = this.getCurrentData().dateEnv;
- return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);
- };
- CalendarApi.prototype.formatIso = function (d, omitTime) {
- var dateEnv = this.getCurrentData().dateEnv;
- return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime: omitTime });
- };
- // Date Selection / Event Selection / DayClick
- // -----------------------------------------------------------------------------------------------------------------
- // this public method receives start/end dates in any format, with any timezone
- // NOTE: args were changed from v3
- CalendarApi.prototype.select = function (dateOrObj, endDate) {
- var selectionInput;
- if (endDate == null) {
- if (dateOrObj.start != null) {
- selectionInput = dateOrObj;
- }
- else {
- selectionInput = {
- start: dateOrObj,
- end: null
- };
- }
- }
- else {
- selectionInput = {
- start: dateOrObj,
- end: endDate
- };
- }
- var state = this.getCurrentData();
- var selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({ days: 1 }) // TODO: cache this?
- );
- if (selection) { // throw parse error otherwise?
- this.dispatch({ type: 'SELECT_DATES', selection: selection });
- triggerDateSelect(selection, null, state);
- }
- };
- // public method
- CalendarApi.prototype.unselect = function (pev) {
- var state = this.getCurrentData();
- if (state.dateSelection) {
- this.dispatch({ type: 'UNSELECT_DATES' });
- triggerDateUnselect(pev, state);
- }
- };
- // Public Events API
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.addEvent = function (eventInput, sourceInput) {
- if (eventInput instanceof EventApi) {
- var def = eventInput._def;
- var instance = eventInput._instance;
- var currentData = this.getCurrentData();
- // not already present? don't want to add an old snapshot
- if (!currentData.eventStore.defs[def.defId]) {
- this.dispatch({
- type: 'ADD_EVENTS',
- eventStore: eventTupleToStore({ def: def, instance: instance }) // TODO: better util for two args?
- });
- this.triggerEventAdd(eventInput);
- }
- return eventInput;
- }
- var state = this.getCurrentData();
- var eventSource;
- if (sourceInput instanceof EventSourceApi) {
- eventSource = sourceInput.internalEventSource;
- }
- else if (typeof sourceInput === 'boolean') {
- if (sourceInput) { // true. part of the first event source
- eventSource = hashValuesToArray(state.eventSources)[0];
- }
- }
- else if (sourceInput != null) { // an ID. accepts a number too
- var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function
- if (!sourceApi) {
- console.warn('Could not find an event source with ID "' + sourceInput + '"'); // TODO: test
- return null;
- }
- else {
- eventSource = sourceApi.internalEventSource;
- }
- }
- var tuple = parseEvent(eventInput, eventSource, state, false);
- if (tuple) {
- var newEventApi = new EventApi(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);
- this.dispatch({
- type: 'ADD_EVENTS',
- eventStore: eventTupleToStore(tuple)
- });
- this.triggerEventAdd(newEventApi);
- return newEventApi;
- }
- return null;
- };
- CalendarApi.prototype.triggerEventAdd = function (eventApi) {
- var _this = this;
- var emitter = this.getCurrentData().emitter;
- emitter.trigger('eventAdd', {
- event: eventApi,
- relatedEvents: [],
- revert: function () {
- _this.dispatch({
- type: 'REMOVE_EVENTS',
- eventStore: eventApiToStore(eventApi)
- });
- }
- });
- };
- // TODO: optimize
- CalendarApi.prototype.getEventById = function (id) {
- var state = this.getCurrentData();
- var _a = state.eventStore, defs = _a.defs, instances = _a.instances;
- id = String(id);
- for (var defId in defs) {
- var def = defs[defId];
- if (def.publicId === id) {
- if (def.recurringDef) {
- return new EventApi(state, def, null);
- }
- else {
- for (var instanceId in instances) {
- var instance = instances[instanceId];
- if (instance.defId === def.defId) {
- return new EventApi(state, def, instance);
- }
- }
- }
- }
- }
- return null;
- };
- CalendarApi.prototype.getEvents = function () {
- var currentData = this.getCurrentData();
- return buildEventApis(currentData.eventStore, currentData);
- };
- CalendarApi.prototype.removeAllEvents = function () {
- this.dispatch({ type: 'REMOVE_ALL_EVENTS' });
- };
- // Public Event Sources API
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.getEventSources = function () {
- var state = this.getCurrentData();
- var sourceHash = state.eventSources;
- var sourceApis = [];
- for (var internalId in sourceHash) {
- sourceApis.push(new EventSourceApi(state, sourceHash[internalId]));
- }
- return sourceApis;
- };
- CalendarApi.prototype.getEventSourceById = function (id) {
- var state = this.getCurrentData();
- var sourceHash = state.eventSources;
- id = String(id);
- for (var sourceId in sourceHash) {
- if (sourceHash[sourceId].publicId === id) {
- return new EventSourceApi(state, sourceHash[sourceId]);
- }
- }
- return null;
- };
- CalendarApi.prototype.addEventSource = function (sourceInput) {
- var state = this.getCurrentData();
- if (sourceInput instanceof EventSourceApi) {
- // not already present? don't want to add an old snapshot
- if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {
- this.dispatch({
- type: 'ADD_EVENT_SOURCES',
- sources: [sourceInput.internalEventSource]
- });
- }
- return sourceInput;
- }
- var eventSource = parseEventSource(sourceInput, state);
- if (eventSource) { // TODO: error otherwise?
- this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });
- return new EventSourceApi(state, eventSource);
- }
- return null;
- };
- CalendarApi.prototype.removeAllEventSources = function () {
- this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
- };
- CalendarApi.prototype.refetchEvents = function () {
- this.dispatch({ type: 'FETCH_EVENT_SOURCES' });
- };
- // Scroll
- // -----------------------------------------------------------------------------------------------------------------
- CalendarApi.prototype.scrollToTime = function (timeInput) {
- var time = createDuration(timeInput);
- if (time) {
- this.trigger('_scrollRequest', { time: time });
- }
- };
- return CalendarApi;
-}());
-
-var EventApi = /** @class */ (function () {
- // instance will be null if expressing a recurring event that has no current instances,
- // OR if trying to validate an incoming external event that has no dates assigned
- function EventApi(context, def, instance) {
- this._context = context;
- this._def = def;
- this._instance = instance || null;
- }
- /*
- TODO: make event struct more responsible for this
- */
- EventApi.prototype.setProp = function (name, val) {
- var _a, _b;
- if (name in EVENT_DATE_REFINERS) {
- console.warn("Could not set date-related prop 'name'. Use one of the date-related methods instead.");
- }
- else if (name in EVENT_NON_DATE_REFINERS) {
- val = EVENT_NON_DATE_REFINERS[name](val);
- this.mutate({
- standardProps: (_a = {}, _a[name] = val, _a)
- });
- }
- else if (name in EVENT_UI_REFINERS) {
- var ui = EVENT_UI_REFINERS[name](val);
- if (name === 'color') {
- ui = { backgroundColor: val, borderColor: val };
- }
- else if (name === 'editable') {
- ui = { startEditable: val, durationEditable: val };
- }
- else {
- ui = (_b = {}, _b[name] = val, _b);
- }
- this.mutate({
- standardProps: { ui: ui }
- });
- }
- else {
- console.warn("Could not set prop '" + name + "'. Use setExtendedProp instead.");
- }
- };
- EventApi.prototype.setExtendedProp = function (name, val) {
- var _a;
- this.mutate({
- extendedProps: (_a = {}, _a[name] = val, _a)
- });
- };
- EventApi.prototype.setStart = function (startInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._context.dateEnv;
- var start = dateEnv.createMarker(startInput);
- if (start && this._instance) { // TODO: warning if parsed bad
- var instanceRange = this._instance.range;
- var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?
- if (options.maintainDuration) {
- this.mutate({ datesDelta: startDelta });
- }
- else {
- this.mutate({ startDelta: startDelta });
- }
- }
- };
- EventApi.prototype.setEnd = function (endInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._context.dateEnv;
- var end;
- if (endInput != null) {
- end = dateEnv.createMarker(endInput);
- if (!end) {
- return; // TODO: warning if parsed bad
- }
- }
- if (this._instance) {
- if (end) {
- var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);
- this.mutate({ endDelta: endDelta });
- }
- else {
- this.mutate({ standardProps: { hasEnd: false } });
- }
- }
- };
- EventApi.prototype.setDates = function (startInput, endInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._context.dateEnv;
- var standardProps = { allDay: options.allDay };
- var start = dateEnv.createMarker(startInput);
- var end;
- if (!start) {
- return; // TODO: warning if parsed bad
- }
- if (endInput != null) {
- end = dateEnv.createMarker(endInput);
- if (!end) { // TODO: warning if parsed bad
- return;
- }
- }
- if (this._instance) {
- var instanceRange = this._instance.range;
- // when computing the diff for an event being converted to all-day,
- // compute diff off of the all-day values the way event-mutation does.
- if (options.allDay === true) {
- instanceRange = computeAlignedDayRange(instanceRange);
- }
- var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);
- if (end) {
- var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);
- if (durationsEqual(startDelta, endDelta)) {
- this.mutate({ datesDelta: startDelta, standardProps: standardProps });
- }
- else {
- this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps });
- }
- }
- else { // means "clear the end"
- standardProps.hasEnd = false;
- this.mutate({ datesDelta: startDelta, standardProps: standardProps });
- }
- }
- };
- EventApi.prototype.moveStart = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ startDelta: delta });
- }
- };
- EventApi.prototype.moveEnd = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ endDelta: delta });
- }
- };
- EventApi.prototype.moveDates = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ datesDelta: delta });
- }
- };
- EventApi.prototype.setAllDay = function (allDay, options) {
- if (options === void 0) { options = {}; }
- var standardProps = { allDay: allDay };
- var maintainDuration = options.maintainDuration;
- if (maintainDuration == null) {
- maintainDuration = this._context.options.allDayMaintainDuration;
- }
- if (this._def.allDay !== allDay) {
- standardProps.hasEnd = maintainDuration;
- }
- this.mutate({ standardProps: standardProps });
- };
- EventApi.prototype.formatRange = function (formatInput) {
- var dateEnv = this._context.dateEnv;
- var instance = this._instance;
- var formatter = createFormatter(formatInput);
- if (this._def.hasEnd) {
- return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {
- forcedStartTzo: instance.forcedStartTzo,
- forcedEndTzo: instance.forcedEndTzo
- });
- }
- else {
- return dateEnv.format(instance.range.start, formatter, {
- forcedTzo: instance.forcedStartTzo
- });
- }
- };
- EventApi.prototype.mutate = function (mutation) {
- var instance = this._instance;
- if (instance) {
- var def = this._def;
- var context_1 = this._context;
- var eventStore = context_1.getCurrentData().eventStore;
- var relevantEvents_1 = getRelevantEvents(eventStore, instance.instanceId);
- var eventConfigBase = {
- '': {
- display: '',
- startEditable: true,
- durationEditable: true,
- constraints: [],
- overlap: null,
- allows: [],
- backgroundColor: '',
- borderColor: '',
- textColor: '',
- classNames: []
- }
- };
- relevantEvents_1 = applyMutationToEventStore(relevantEvents_1, eventConfigBase, mutation, context_1);
- var oldEvent = new EventApi(context_1, def, instance); // snapshot
- this._def = relevantEvents_1.defs[def.defId];
- this._instance = relevantEvents_1.instances[instance.instanceId];
- context_1.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: relevantEvents_1
- });
- context_1.emitter.trigger('eventChange', {
- oldEvent: oldEvent,
- event: this,
- relatedEvents: buildEventApis(relevantEvents_1, context_1, instance),
- revert: function () {
- context_1.dispatch({
- type: 'REMOVE_EVENTS',
- eventStore: relevantEvents_1
- });
- }
- });
- }
- };
- EventApi.prototype.remove = function () {
- var context = this._context;
- var asStore = eventApiToStore(this);
- context.dispatch({
- type: 'REMOVE_EVENTS',
- eventStore: asStore
- });
- context.emitter.trigger('eventRemove', {
- event: this,
- relatedEvents: [],
- revert: function () {
- context.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: asStore
- });
- }
- });
- };
- Object.defineProperty(EventApi.prototype, "source", {
- get: function () {
- var sourceId = this._def.sourceId;
- if (sourceId) {
- return new EventSourceApi(this._context, this._context.getCurrentData().eventSources[sourceId]);
- }
- return null;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "start", {
- get: function () {
- return this._instance ?
- this._context.dateEnv.toDate(this._instance.range.start) :
- null;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "end", {
- get: function () {
- return (this._instance && this._def.hasEnd) ?
- this._context.dateEnv.toDate(this._instance.range.end) :
- null;
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "startStr", {
- get: function () {
- var instance = this._instance;
- if (instance) {
- return this._context.dateEnv.formatIso(instance.range.start, {
- omitTime: this._def.allDay,
- forcedTzo: instance.forcedStartTzo
- });
- }
- return '';
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "endStr", {
- get: function () {
- var instance = this._instance;
- if (instance && this._def.hasEnd) {
- return this._context.dateEnv.formatIso(instance.range.end, {
- omitTime: this._def.allDay,
- forcedTzo: instance.forcedEndTzo
- });
- }
- return '';
- },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "id", {
- // computable props that all access the def
- // TODO: find a TypeScript-compatible way to do this at scale
- get: function () { return this._def.publicId; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "groupId", {
- get: function () { return this._def.groupId; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "allDay", {
- get: function () { return this._def.allDay; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "title", {
- get: function () { return this._def.title; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "url", {
- get: function () { return this._def.url; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "display", {
- get: function () { return this._def.ui.display || 'auto'; } // bad. just normalize the type earlier
- ,
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "startEditable", {
- get: function () { return this._def.ui.startEditable; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "durationEditable", {
- get: function () { return this._def.ui.durationEditable; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "constraint", {
- get: function () { return this._def.ui.constraints[0] || null; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "overlap", {
- get: function () { return this._def.ui.overlap; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "allow", {
- get: function () { return this._def.ui.allows[0] || null; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "backgroundColor", {
- get: function () { return this._def.ui.backgroundColor; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "borderColor", {
- get: function () { return this._def.ui.borderColor; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "textColor", {
- get: function () { return this._def.ui.textColor; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "classNames", {
- // NOTE: user can't modify these because Object.freeze was called in event-def parsing
- get: function () { return this._def.ui.classNames; },
- enumerable: false,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "extendedProps", {
- get: function () { return this._def.extendedProps; },
- enumerable: false,
- configurable: true
- });
- EventApi.prototype.toPlainObject = function (settings) {
- if (settings === void 0) { settings = {}; }
- var def = this._def;
- var ui = def.ui;
- var _a = this, startStr = _a.startStr, endStr = _a.endStr;
- var res = {};
- if (def.title) {
- res.title = def.title;
- }
- if (startStr) {
- res.start = startStr;
- }
- if (endStr) {
- res.end = endStr;
- }
- if (def.publicId) {
- res.id = def.publicId;
- }
- if (def.groupId) {
- res.groupId = def.groupId;
- }
- if (def.url) {
- res.url = def.url;
- }
- if (ui.display && ui.display !== 'auto') {
- res.display = ui.display;
- }
- // TODO: what about recurring-event properties???
- // TODO: include startEditable/durationEditable/constraint/overlap/allow
- if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {
- res.color = ui.backgroundColor;
- }
- else {
- if (ui.backgroundColor) {
- res.backgroundColor = ui.backgroundColor;
- }
- if (ui.borderColor) {
- res.borderColor = ui.borderColor;
- }
- }
- if (ui.textColor) {
- res.textColor = ui.textColor;
- }
- if (ui.classNames.length) {
- res.classNames = ui.classNames;
- }
- if (Object.keys(def.extendedProps).length) {
- if (settings.collapseExtendedProps) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(res, def.extendedProps);
- }
- else {
- res.extendedProps = def.extendedProps;
- }
- }
- return res;
- };
- EventApi.prototype.toJSON = function () {
- return this.toPlainObject();
- };
- return EventApi;
-}());
-function eventApiToStore(eventApi) {
- var _a, _b;
- var def = eventApi._def;
- var instance = eventApi._instance;
- return {
- defs: (_a = {}, _a[def.defId] = def, _a),
- instances: instance
- ? (_b = {}, _b[instance.instanceId] = instance, _b) : {}
- };
-}
-function buildEventApis(eventStore, context, excludeInstance) {
- var defs = eventStore.defs, instances = eventStore.instances;
- var eventApis = [];
- var excludeInstanceId = excludeInstance ? excludeInstance.instanceId : '';
- for (var id in instances) {
- var instance = instances[id];
- var def = defs[instance.defId];
- if (instance.instanceId !== excludeInstanceId) {
- eventApis.push(new EventApi(context, def, instance));
- }
- }
- return eventApis;
-}
-
-var calendarSystemClassMap = {};
-function registerCalendarSystem(name, theClass) {
- calendarSystemClassMap[name] = theClass;
-}
-function createCalendarSystem(name) {
- return new calendarSystemClassMap[name]();
-}
-var GregorianCalendarSystem = /** @class */ (function () {
- function GregorianCalendarSystem() {
- }
- GregorianCalendarSystem.prototype.getMarkerYear = function (d) {
- return d.getUTCFullYear();
- };
- GregorianCalendarSystem.prototype.getMarkerMonth = function (d) {
- return d.getUTCMonth();
- };
- GregorianCalendarSystem.prototype.getMarkerDay = function (d) {
- return d.getUTCDate();
- };
- GregorianCalendarSystem.prototype.arrayToMarker = function (arr) {
- return arrayToUtcDate(arr);
- };
- GregorianCalendarSystem.prototype.markerToArray = function (marker) {
- return dateToUtcArray(marker);
- };
- return GregorianCalendarSystem;
-}());
-registerCalendarSystem('gregory', GregorianCalendarSystem);
-
-var ISO_RE = /^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
-function parse(str) {
- var m = ISO_RE.exec(str);
- if (m) {
- var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0));
- if (isValidDate(marker)) {
- var timeZoneOffset = null;
- if (m[13]) {
- timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +
- Number(m[18] || 0));
- }
- return {
- marker: marker,
- isTimeUnspecified: !m[6],
- timeZoneOffset: timeZoneOffset
- };
- }
- }
- return null;
-}
-
-var DateEnv = /** @class */ (function () {
- function DateEnv(settings) {
- var timeZone = this.timeZone = settings.timeZone;
- var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';
- if (settings.namedTimeZoneImpl && isNamedTimeZone) {
- this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);
- }
- this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);
- this.calendarSystem = createCalendarSystem(settings.calendarSystem);
- this.locale = settings.locale;
- this.weekDow = settings.locale.week.dow;
- this.weekDoy = settings.locale.week.doy;
- if (settings.weekNumberCalculation === 'ISO') {
- this.weekDow = 1;
- this.weekDoy = 4;
- }
- if (typeof settings.firstDay === 'number') {
- this.weekDow = settings.firstDay;
- }
- if (typeof settings.weekNumberCalculation === 'function') {
- this.weekNumberFunc = settings.weekNumberCalculation;
- }
- this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;
- this.cmdFormatter = settings.cmdFormatter;
- this.defaultSeparator = settings.defaultSeparator;
- }
- // Creating / Parsing
- DateEnv.prototype.createMarker = function (input) {
- var meta = this.createMarkerMeta(input);
- if (meta === null) {
- return null;
- }
- return meta.marker;
- };
- DateEnv.prototype.createNowMarker = function () {
- if (this.canComputeOffset) {
- return this.timestampToMarker(new Date().valueOf());
- }
- else {
- // if we can't compute the current date val for a timezone,
- // better to give the current local date vals than UTC
- return arrayToUtcDate(dateToLocalArray(new Date()));
- }
- };
- DateEnv.prototype.createMarkerMeta = function (input) {
- if (typeof input === 'string') {
- return this.parse(input);
- }
- var marker = null;
- if (typeof input === 'number') {
- marker = this.timestampToMarker(input);
- }
- else if (input instanceof Date) {
- input = input.valueOf();
- if (!isNaN(input)) {
- marker = this.timestampToMarker(input);
- }
- }
- else if (Array.isArray(input)) {
- marker = arrayToUtcDate(input);
- }
- if (marker === null || !isValidDate(marker)) {
- return null;
- }
- return { marker: marker, isTimeUnspecified: false, forcedTzo: null };
- };
- DateEnv.prototype.parse = function (s) {
- var parts = parse(s);
- if (parts === null) {
- return null;
- }
- var marker = parts.marker;
- var forcedTzo = null;
- if (parts.timeZoneOffset !== null) {
- if (this.canComputeOffset) {
- marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);
- }
- else {
- forcedTzo = parts.timeZoneOffset;
- }
- }
- return { marker: marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo: forcedTzo };
- };
- // Accessors
- DateEnv.prototype.getYear = function (marker) {
- return this.calendarSystem.getMarkerYear(marker);
- };
- DateEnv.prototype.getMonth = function (marker) {
- return this.calendarSystem.getMarkerMonth(marker);
- };
- // Adding / Subtracting
- DateEnv.prototype.add = function (marker, dur) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] += dur.years;
- a[1] += dur.months;
- a[2] += dur.days;
- a[6] += dur.milliseconds;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.subtract = function (marker, dur) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] -= dur.years;
- a[1] -= dur.months;
- a[2] -= dur.days;
- a[6] -= dur.milliseconds;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.addYears = function (marker, n) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] += n;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.addMonths = function (marker, n) {
- var a = this.calendarSystem.markerToArray(marker);
- a[1] += n;
- return this.calendarSystem.arrayToMarker(a);
- };
- // Diffing Whole Units
- DateEnv.prototype.diffWholeYears = function (m0, m1) {
- var calendarSystem = this.calendarSystem;
- if (timeAsMs(m0) === timeAsMs(m1) &&
- calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&
- calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {
- return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);
- }
- return null;
- };
- DateEnv.prototype.diffWholeMonths = function (m0, m1) {
- var calendarSystem = this.calendarSystem;
- if (timeAsMs(m0) === timeAsMs(m1) &&
- calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {
- return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +
- (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;
- }
- return null;
- };
- // Range / Duration
- DateEnv.prototype.greatestWholeUnit = function (m0, m1) {
- var n = this.diffWholeYears(m0, m1);
- if (n !== null) {
- return { unit: 'year', value: n };
- }
- n = this.diffWholeMonths(m0, m1);
- if (n !== null) {
- return { unit: 'month', value: n };
- }
- n = diffWholeWeeks(m0, m1);
- if (n !== null) {
- return { unit: 'week', value: n };
- }
- n = diffWholeDays(m0, m1);
- if (n !== null) {
- return { unit: 'day', value: n };
- }
- n = diffHours(m0, m1);
- if (isInt(n)) {
- return { unit: 'hour', value: n };
- }
- n = diffMinutes(m0, m1);
- if (isInt(n)) {
- return { unit: 'minute', value: n };
- }
- n = diffSeconds(m0, m1);
- if (isInt(n)) {
- return { unit: 'second', value: n };
- }
- return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };
- };
- DateEnv.prototype.countDurationsBetween = function (m0, m1, d) {
- // TODO: can use greatestWholeUnit
- var diff;
- if (d.years) {
- diff = this.diffWholeYears(m0, m1);
- if (diff !== null) {
- return diff / asRoughYears(d);
- }
- }
- if (d.months) {
- diff = this.diffWholeMonths(m0, m1);
- if (diff !== null) {
- return diff / asRoughMonths(d);
- }
- }
- if (d.days) {
- diff = diffWholeDays(m0, m1);
- if (diff !== null) {
- return diff / asRoughDays(d);
- }
- }
- return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);
- };
- // Start-Of
- // these DON'T return zoned-dates. only UTC start-of dates
- DateEnv.prototype.startOf = function (m, unit) {
- if (unit === 'year') {
- return this.startOfYear(m);
- }
- else if (unit === 'month') {
- return this.startOfMonth(m);
- }
- else if (unit === 'week') {
- return this.startOfWeek(m);
- }
- else if (unit === 'day') {
- return startOfDay(m);
- }
- else if (unit === 'hour') {
- return startOfHour(m);
- }
- else if (unit === 'minute') {
- return startOfMinute(m);
- }
- else if (unit === 'second') {
- return startOfSecond(m);
- }
- };
- DateEnv.prototype.startOfYear = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m)
- ]);
- };
- DateEnv.prototype.startOfMonth = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m),
- this.calendarSystem.getMarkerMonth(m)
- ]);
- };
- DateEnv.prototype.startOfWeek = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m),
- this.calendarSystem.getMarkerMonth(m),
- m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7)
- ]);
- };
- // Week Number
- DateEnv.prototype.computeWeekNumber = function (marker) {
- if (this.weekNumberFunc) {
- return this.weekNumberFunc(this.toDate(marker));
- }
- else {
- return weekOfYear(marker, this.weekDow, this.weekDoy);
- }
- };
- // TODO: choke on timeZoneName: long
- DateEnv.prototype.format = function (marker, formatter, dateOptions) {
- if (dateOptions === void 0) { dateOptions = {}; }
- return formatter.format({
- marker: marker,
- timeZoneOffset: dateOptions.forcedTzo != null ?
- dateOptions.forcedTzo :
- this.offsetForMarker(marker)
- }, this);
- };
- DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) {
- if (dateOptions === void 0) { dateOptions = {}; }
- if (dateOptions.isEndExclusive) {
- end = addMs(end, -1);
- }
- return formatter.formatRange({
- marker: start,
- timeZoneOffset: dateOptions.forcedStartTzo != null ?
- dateOptions.forcedStartTzo :
- this.offsetForMarker(start)
- }, {
- marker: end,
- timeZoneOffset: dateOptions.forcedEndTzo != null ?
- dateOptions.forcedEndTzo :
- this.offsetForMarker(end)
- }, this, dateOptions.defaultSeparator);
- };
- /*
- DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,
- might as well use buildIsoString or some other util directly
- */
- DateEnv.prototype.formatIso = function (marker, extraOptions) {
- if (extraOptions === void 0) { extraOptions = {}; }
- var timeZoneOffset = null;
- if (!extraOptions.omitTimeZoneOffset) {
- if (extraOptions.forcedTzo != null) {
- timeZoneOffset = extraOptions.forcedTzo;
- }
- else {
- timeZoneOffset = this.offsetForMarker(marker);
- }
- }
- return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);
- };
- // TimeZone
- DateEnv.prototype.timestampToMarker = function (ms) {
- if (this.timeZone === 'local') {
- return arrayToUtcDate(dateToLocalArray(new Date(ms)));
- }
- else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {
- return new Date(ms);
- }
- else {
- return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));
- }
- };
- DateEnv.prototype.offsetForMarker = function (m) {
- if (this.timeZone === 'local') {
- return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset
- }
- else if (this.timeZone === 'UTC') {
- return 0;
- }
- else if (this.namedTimeZoneImpl) {
- return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));
- }
- return null;
- };
- // Conversion
- DateEnv.prototype.toDate = function (m, forcedTzo) {
- if (this.timeZone === 'local') {
- return arrayToLocalDate(dateToUtcArray(m));
- }
- else if (this.timeZone === 'UTC') {
- return new Date(m.valueOf()); // make sure it's a copy
- }
- else if (!this.namedTimeZoneImpl) {
- return new Date(m.valueOf() - (forcedTzo || 0));
- }
- else {
- return new Date(m.valueOf() -
- this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms
- );
- }
- };
- return DateEnv;
-}());
-
-var globalLocales = [];
-
-var RAW_EN_LOCALE = {
- code: 'en',
- week: {
- dow: 0,
- doy: 4 // 4 days need to be within the year to be considered the first week
- },
- direction: 'ltr',
- buttonText: {
- prev: 'prev',
- next: 'next',
- prevYear: 'prev year',
- nextYear: 'next year',
- year: 'year',
- today: 'today',
- month: 'month',
- week: 'week',
- day: 'day',
- list: 'list'
- },
- weekText: 'W',
- allDayText: 'all-day',
- moreLinkText: 'more',
- noEventsText: 'No events to display'
-};
-function organizeRawLocales(explicitRawLocales) {
- var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
- var allRawLocales = globalLocales.concat(explicitRawLocales);
- var rawLocaleMap = {
- en: RAW_EN_LOCALE // necessary?
- };
- for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) {
- var rawLocale = allRawLocales_1[_i];
- rawLocaleMap[rawLocale.code] = rawLocale;
- }
- return {
- map: rawLocaleMap,
- defaultCode: defaultCode
- };
-}
-function buildLocale(inputSingular, available) {
- if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {
- return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);
- }
- else {
- return queryLocale(inputSingular, available);
- }
-}
-function queryLocale(codeArg, available) {
- var codes = [].concat(codeArg || []); // will convert to array
- var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;
- return parseLocale(codeArg, codes, raw);
-}
-function queryRawLocale(codes, available) {
- for (var i = 0; i < codes.length; i++) {
- var parts = codes[i].toLocaleLowerCase().split('-');
- for (var j = parts.length; j > 0; j--) {
- var simpleId = parts.slice(0, j).join('-');
- if (available[simpleId]) {
- return available[simpleId];
- }
- }
- }
- return null;
-}
-function parseLocale(codeArg, codes, raw) {
- var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);
- delete merged.code; // don't want this part of the options
- var week = merged.week;
- delete merged.week;
- return {
- codeArg: codeArg,
- codes: codes,
- week: week,
- simpleNumberFormat: new Intl.NumberFormat(codeArg),
- options: merged
- };
-}
-
-function formatDate(dateInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = buildDateEnv(options);
- var formatter = createFormatter(options);
- var dateMeta = dateEnv.createMarkerMeta(dateInput);
- if (!dateMeta) { // TODO: warning?
- return '';
- }
- return dateEnv.format(dateMeta.marker, formatter, {
- forcedTzo: dateMeta.forcedTzo
- });
-}
-function formatRange(startInput, endInput, options // mixture of env and formatter settings
-) {
- var dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object
- var formatter = createFormatter(options);
- var startMeta = dateEnv.createMarkerMeta(startInput);
- var endMeta = dateEnv.createMarkerMeta(endInput);
- if (!startMeta || !endMeta) { // TODO: warning?
- return '';
- }
- return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {
- forcedStartTzo: startMeta.forcedTzo,
- forcedEndTzo: endMeta.forcedTzo,
- isEndExclusive: options.isEndExclusive,
- defaultSeparator: BASE_OPTION_DEFAULTS.defaultRangeSeparator
- });
-}
-// TODO: more DRY and optimized
-function buildDateEnv(settings) {
- var locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
- return new DateEnv(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale: locale }));
-}
-
-var DEF_DEFAULTS = {
- startTime: '09:00',
- endTime: '17:00',
- daysOfWeek: [1, 2, 3, 4, 5],
- display: 'inverse-background',
- classNames: 'fc-non-business',
- groupId: '_businessHours' // so multiple defs get grouped
-};
-/*
-TODO: pass around as EventDefHash!!!
-*/
-function parseBusinessHours(input, context) {
- return parseEvents(refineInputs(input), null, context);
-}
-function refineInputs(input) {
- var rawDefs;
- if (input === true) {
- rawDefs = [{}]; // will get DEF_DEFAULTS verbatim
- }
- else if (Array.isArray(input)) {
- // if specifying an array, every sub-definition NEEDS a day-of-week
- rawDefs = input.filter(function (rawDef) {
- return rawDef.daysOfWeek;
- });
- }
- else if (typeof input === 'object' && input) { // non-null object
- rawDefs = [input];
- }
- else { // is probably false
- rawDefs = [];
- }
- rawDefs = rawDefs.map(function (rawDef) {
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, DEF_DEFAULTS), rawDef);
- });
- return rawDefs;
-}
-
-function pointInsideRect(point, rect) {
- return point.left >= rect.left &&
- point.left < rect.right &&
- point.top >= rect.top &&
- point.top < rect.bottom;
-}
-// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false
-function intersectRects(rect1, rect2) {
- var res = {
- left: Math.max(rect1.left, rect2.left),
- right: Math.min(rect1.right, rect2.right),
- top: Math.max(rect1.top, rect2.top),
- bottom: Math.min(rect1.bottom, rect2.bottom)
- };
- if (res.left < res.right && res.top < res.bottom) {
- return res;
- }
- return false;
-}
-function translateRect(rect, deltaX, deltaY) {
- return {
- left: rect.left + deltaX,
- right: rect.right + deltaX,
- top: rect.top + deltaY,
- bottom: rect.bottom + deltaY
- };
-}
-// Returns a new point that will have been moved to reside within the given rectangle
-function constrainPoint(point, rect) {
- return {
- left: Math.min(Math.max(point.left, rect.left), rect.right),
- top: Math.min(Math.max(point.top, rect.top), rect.bottom)
- };
-}
-// Returns a point that is the center of the given rectangle
-function getRectCenter(rect) {
- return {
- left: (rect.left + rect.right) / 2,
- top: (rect.top + rect.bottom) / 2
- };
-}
-// Subtracts point2's coordinates from point1's coordinates, returning a delta
-function diffPoints(point1, point2) {
- return {
- left: point1.left - point2.left,
- top: point1.top - point2.top
- };
-}
-
-var EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
-var Splitter = /** @class */ (function () {
- function Splitter() {
- this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);
- this.splitDateSelection = memoize(this._splitDateSpan);
- this.splitEventStore = memoize(this._splitEventStore);
- this.splitIndividualUi = memoize(this._splitIndividualUi);
- this.splitEventDrag = memoize(this._splitInteraction);
- this.splitEventResize = memoize(this._splitInteraction);
- this.eventUiBuilders = {}; // TODO: typescript protection
- }
- Splitter.prototype.splitProps = function (props) {
- var _this = this;
- var keyInfos = this.getKeyInfo(props);
- var defKeys = this.getKeysForEventDefs(props.eventStore);
- var dateSelections = this.splitDateSelection(props.dateSelection);
- var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*
- var eventStores = this.splitEventStore(props.eventStore, defKeys);
- var eventDrags = this.splitEventDrag(props.eventDrag);
- var eventResizes = this.splitEventResize(props.eventResize);
- var splitProps = {};
- this.eventUiBuilders = mapHash(keyInfos, function (info, key) {
- return _this.eventUiBuilders[key] || memoize(buildEventUiForKey);
- });
- for (var key in keyInfos) {
- var keyInfo = keyInfos[key];
- var eventStore = eventStores[key] || EMPTY_EVENT_STORE;
- var buildEventUi = this.eventUiBuilders[key];
- splitProps[key] = {
- businessHours: keyInfo.businessHours || props.businessHours,
- dateSelection: dateSelections[key] || null,
- eventStore: eventStore,
- eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),
- eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',
- eventDrag: eventDrags[key] || null,
- eventResize: eventResizes[key] || null
- };
- }
- return splitProps;
- };
- Splitter.prototype._splitDateSpan = function (dateSpan) {
- var dateSpans = {};
- if (dateSpan) {
- var keys = this.getKeysForDateSpan(dateSpan);
- for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
- var key = keys_1[_i];
- dateSpans[key] = dateSpan;
- }
- }
- return dateSpans;
- };
- Splitter.prototype._getKeysForEventDefs = function (eventStore) {
- var _this = this;
- return mapHash(eventStore.defs, function (eventDef) {
- return _this.getKeysForEventDef(eventDef);
- });
- };
- Splitter.prototype._splitEventStore = function (eventStore, defKeys) {
- var defs = eventStore.defs, instances = eventStore.instances;
- var splitStores = {};
- for (var defId in defs) {
- for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
- var key = _a[_i];
- if (!splitStores[key]) {
- splitStores[key] = createEmptyEventStore();
- }
- splitStores[key].defs[defId] = defs[defId];
- }
- }
- for (var instanceId in instances) {
- var instance = instances[instanceId];
- for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) {
- var key = _c[_b];
- if (splitStores[key]) { // must have already been created
- splitStores[key].instances[instanceId] = instance;
- }
- }
- }
- return splitStores;
- };
- Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) {
- var splitHashes = {};
- for (var defId in eventUiBases) {
- if (defId) { // not the '' key
- for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
- var key = _a[_i];
- if (!splitHashes[key]) {
- splitHashes[key] = {};
- }
- splitHashes[key][defId] = eventUiBases[defId];
- }
- }
- }
- return splitHashes;
- };
- Splitter.prototype._splitInteraction = function (interaction) {
- var splitStates = {};
- if (interaction) {
- var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar
- );
- // can't rely on defKeys because event data is mutated
- var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);
- var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);
- var populate = function (key) {
- if (!splitStates[key]) {
- splitStates[key] = {
- affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE,
- mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE,
- isEvent: interaction.isEvent
- };
- }
- };
- for (var key in affectedStores_1) {
- populate(key);
- }
- for (var key in mutatedStores_1) {
- populate(key);
- }
- }
- return splitStates;
- };
- return Splitter;
-}());
-function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
- var baseParts = [];
- if (allUi) {
- baseParts.push(allUi);
- }
- if (eventUiForKey) {
- baseParts.push(eventUiForKey);
- }
- var stuff = {
- '': combineEventUis(baseParts)
- };
- if (individualUi) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(stuff, individualUi);
- }
- return stuff;
-}
-
-function getDateMeta(date, todayRange, nowDate, dateProfile) {
- return {
- dow: date.getUTCDay(),
- isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),
- isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),
- isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),
- isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),
- isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false)
- };
-}
-function getDayClassNames(meta, theme) {
- var classNames = [
- 'fc-day',
- 'fc-day-' + DAY_IDS[meta.dow]
- ];
- if (meta.isDisabled) {
- classNames.push('fc-day-disabled');
- }
- else {
- if (meta.isToday) {
- classNames.push('fc-day-today');
- classNames.push(theme.getClass('today'));
- }
- if (meta.isPast) {
- classNames.push('fc-day-past');
- }
- if (meta.isFuture) {
- classNames.push('fc-day-future');
- }
- if (meta.isOther) {
- classNames.push('fc-day-other');
- }
- }
- return classNames;
-}
-function getSlotClassNames(meta, theme) {
- var classNames = [
- 'fc-slot',
- 'fc-slot-' + DAY_IDS[meta.dow]
- ];
- if (meta.isDisabled) {
- classNames.push('fc-slot-disabled');
- }
- else {
- if (meta.isToday) {
- classNames.push('fc-slot-today');
- classNames.push(theme.getClass('today'));
- }
- if (meta.isPast) {
- classNames.push('fc-slot-past');
- }
- if (meta.isFuture) {
- classNames.push('fc-slot-future');
- }
- }
- return classNames;
-}
-
-function buildNavLinkData(date, type) {
- if (type === void 0) { type = 'day'; }
- return JSON.stringify({
- date: formatDayString(date),
- type: type
- });
-}
-
-var _isRtlScrollbarOnLeft = null;
-function getIsRtlScrollbarOnLeft() {
- if (_isRtlScrollbarOnLeft === null) {
- _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
- }
- return _isRtlScrollbarOnLeft;
-}
-function computeIsRtlScrollbarOnLeft() {
- // TODO: use htmlToElement
- var outerEl = document.createElement('div');
- applyStyle(outerEl, {
- position: 'absolute',
- top: -1000,
- left: 0,
- border: 0,
- padding: 0,
- overflow: 'scroll',
- direction: 'rtl'
- });
- outerEl.innerHTML = '
';
- document.body.appendChild(outerEl);
- var innerEl = outerEl.firstChild;
- var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
- removeElement(outerEl);
- return res;
-}
-
-var _scrollbarWidths;
-function getScrollbarWidths() {
- if (!_scrollbarWidths) {
- _scrollbarWidths = computeScrollbarWidths();
- }
- return _scrollbarWidths;
-}
-function computeScrollbarWidths() {
- var el = document.createElement('div');
- el.style.overflow = 'scroll';
- document.body.appendChild(el);
- var res = computeScrollbarWidthsForEl(el);
- document.body.removeChild(el);
- return res;
-}
-// WARNING: will include border
-function computeScrollbarWidthsForEl(el) {
- return {
- x: el.offsetHeight - el.clientHeight,
- y: el.offsetWidth - el.clientWidth
- };
-}
-
-function computeEdges(el, getPadding) {
- if (getPadding === void 0) { getPadding = false; }
- var computedStyle = window.getComputedStyle(el);
- var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
- var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;
- var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;
- var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
- var badScrollbarWidths = computeScrollbarWidthsForEl(el); // includes border!
- var scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight;
- var scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom;
- var res = {
- borderLeft: borderLeft,
- borderRight: borderRight,
- borderTop: borderTop,
- borderBottom: borderBottom,
- scrollbarBottom: scrollbarBottom,
- scrollbarLeft: 0,
- scrollbarRight: 0
- };
- if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
- res.scrollbarLeft = scrollbarLeftRight;
- }
- else {
- res.scrollbarRight = scrollbarLeftRight;
- }
- if (getPadding) {
- res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
- res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;
- res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;
- res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;
- }
- return res;
-}
-function computeInnerRect(el, goWithinPadding, doFromWindowViewport) {
- if (goWithinPadding === void 0) { goWithinPadding = false; }
- var outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el);
- var edges = computeEdges(el, goWithinPadding);
- var res = {
- left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,
- right: outerRect.right - edges.borderRight - edges.scrollbarRight,
- top: outerRect.top + edges.borderTop,
- bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom
- };
- if (goWithinPadding) {
- res.left += edges.paddingLeft;
- res.right -= edges.paddingRight;
- res.top += edges.paddingTop;
- res.bottom -= edges.paddingBottom;
- }
- return res;
-}
-function computeRect(el) {
- var rect = el.getBoundingClientRect();
- return {
- left: rect.left + window.pageXOffset,
- top: rect.top + window.pageYOffset,
- right: rect.right + window.pageXOffset,
- bottom: rect.bottom + window.pageYOffset
- };
-}
-function computeHeightAndMargins(el) {
- return el.getBoundingClientRect().height + computeVMargins(el);
-}
-function computeVMargins(el) {
- var computed = window.getComputedStyle(el);
- return parseInt(computed.marginTop, 10) +
- parseInt(computed.marginBottom, 10);
-}
-// does not return window
-function getClippingParents(el) {
- var parents = [];
- while (el instanceof HTMLElement) { // will stop when gets to document or null
- var computedStyle = window.getComputedStyle(el);
- if (computedStyle.position === 'fixed') {
- break;
- }
- if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {
- parents.push(el);
- }
- el = el.parentNode;
- }
- return parents;
-}
-
-// given a function that resolves a result asynchronously.
-// the function can either call passed-in success and failure callbacks,
-// or it can return a promise.
-// if you need to pass additional params to func, bind them first.
-function unpromisify(func, success, failure) {
- // guard against success/failure callbacks being called more than once
- // and guard against a promise AND callback being used together.
- var isResolved = false;
- var wrappedSuccess = function () {
- if (!isResolved) {
- isResolved = true;
- success.apply(this, arguments);
- }
- };
- var wrappedFailure = function () {
- if (!isResolved) {
- isResolved = true;
- if (failure) {
- failure.apply(this, arguments);
- }
- }
- };
- var res = func(wrappedSuccess, wrappedFailure);
- if (res && typeof res.then === 'function') {
- res.then(wrappedSuccess, wrappedFailure);
- }
-}
-
-var Emitter = /** @class */ (function () {
- function Emitter() {
- this.handlers = {};
- this.thisContext = null;
- }
- Emitter.prototype.setThisContext = function (thisContext) {
- this.thisContext = thisContext;
- };
- Emitter.prototype.setOptions = function (options) {
- this.options = options;
- };
- Emitter.prototype.on = function (type, handler) {
- addToHash(this.handlers, type, handler);
- };
- Emitter.prototype.off = function (type, handler) {
- removeFromHash(this.handlers, type, handler);
- };
- Emitter.prototype.trigger = function (type) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- var attachedHandlers = this.handlers[type] || [];
- var optionHandler = this.options && this.options[type];
- var handlers = [].concat(optionHandler || [], attachedHandlers);
- for (var _a = 0, handlers_1 = handlers; _a < handlers_1.length; _a++) {
- var handler = handlers_1[_a];
- handler.apply(this.thisContext, args);
- }
- };
- Emitter.prototype.hasHandlers = function (type) {
- return (this.handlers[type] && this.handlers[type].length) ||
- (this.options && this.options[type]);
- };
- return Emitter;
-}());
-function addToHash(hash, type, handler) {
- (hash[type] || (hash[type] = []))
- .push(handler);
-}
-function removeFromHash(hash, type, handler) {
- if (handler) {
- if (hash[type]) {
- hash[type] = hash[type].filter(function (func) {
- return func !== handler;
- });
- }
- }
- else {
- delete hash[type]; // remove all handler funcs for this type
- }
-}
-
-/*
-Records offset information for a set of elements, relative to an origin element.
-Can record the left/right OR the top/bottom OR both.
-Provides methods for querying the cache by position.
-*/
-var PositionCache = /** @class */ (function () {
- function PositionCache(originEl, els, isHorizontal, isVertical) {
- this.els = els;
- var originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left
- if (isHorizontal) {
- this.buildElHorizontals(originClientRect.left);
- }
- if (isVertical) {
- this.buildElVerticals(originClientRect.top);
- }
- }
- // Populates the left/right internal coordinate arrays
- PositionCache.prototype.buildElHorizontals = function (originClientLeft) {
- var lefts = [];
- var rights = [];
- for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
- var el = _a[_i];
- var rect = el.getBoundingClientRect();
- lefts.push(rect.left - originClientLeft);
- rights.push(rect.right - originClientLeft);
- }
- this.lefts = lefts;
- this.rights = rights;
- };
- // Populates the top/bottom internal coordinate arrays
- PositionCache.prototype.buildElVerticals = function (originClientTop) {
- var tops = [];
- var bottoms = [];
- for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
- var el = _a[_i];
- var rect = el.getBoundingClientRect();
- tops.push(rect.top - originClientTop);
- bottoms.push(rect.bottom - originClientTop);
- }
- this.tops = tops;
- this.bottoms = bottoms;
- };
- // Given a left offset (from document left), returns the index of the el that it horizontally intersects.
- // If no intersection is made, returns undefined.
- PositionCache.prototype.leftToIndex = function (leftPosition) {
- var lefts = this.lefts;
- var rights = this.rights;
- var len = lefts.length;
- var i;
- for (i = 0; i < len; i++) {
- if (leftPosition >= lefts[i] && leftPosition < rights[i]) {
- return i;
- }
- }
- };
- // Given a top offset (from document top), returns the index of the el that it vertically intersects.
- // If no intersection is made, returns undefined.
- PositionCache.prototype.topToIndex = function (topPosition) {
- var tops = this.tops;
- var bottoms = this.bottoms;
- var len = tops.length;
- var i;
- for (i = 0; i < len; i++) {
- if (topPosition >= tops[i] && topPosition < bottoms[i]) {
- return i;
- }
- }
- };
- // Gets the width of the element at the given index
- PositionCache.prototype.getWidth = function (leftIndex) {
- return this.rights[leftIndex] - this.lefts[leftIndex];
- };
- // Gets the height of the element at the given index
- PositionCache.prototype.getHeight = function (topIndex) {
- return this.bottoms[topIndex] - this.tops[topIndex];
- };
- return PositionCache;
-}());
-
-/*
-An object for getting/setting scroll-related information for an element.
-Internally, this is done very differently for window versus DOM element,
-so this object serves as a common interface.
-*/
-var ScrollController = /** @class */ (function () {
- function ScrollController() {
- }
- ScrollController.prototype.getMaxScrollTop = function () {
- return this.getScrollHeight() - this.getClientHeight();
- };
- ScrollController.prototype.getMaxScrollLeft = function () {
- return this.getScrollWidth() - this.getClientWidth();
- };
- ScrollController.prototype.canScrollVertically = function () {
- return this.getMaxScrollTop() > 0;
- };
- ScrollController.prototype.canScrollHorizontally = function () {
- return this.getMaxScrollLeft() > 0;
- };
- ScrollController.prototype.canScrollUp = function () {
- return this.getScrollTop() > 0;
- };
- ScrollController.prototype.canScrollDown = function () {
- return this.getScrollTop() < this.getMaxScrollTop();
- };
- ScrollController.prototype.canScrollLeft = function () {
- return this.getScrollLeft() > 0;
- };
- ScrollController.prototype.canScrollRight = function () {
- return this.getScrollLeft() < this.getMaxScrollLeft();
- };
- return ScrollController;
-}());
-var ElementScrollController = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(ElementScrollController, _super);
- function ElementScrollController(el) {
- var _this = _super.call(this) || this;
- _this.el = el;
- return _this;
- }
- ElementScrollController.prototype.getScrollTop = function () {
- return this.el.scrollTop;
- };
- ElementScrollController.prototype.getScrollLeft = function () {
- return this.el.scrollLeft;
- };
- ElementScrollController.prototype.setScrollTop = function (top) {
- this.el.scrollTop = top;
- };
- ElementScrollController.prototype.setScrollLeft = function (left) {
- this.el.scrollLeft = left;
- };
- ElementScrollController.prototype.getScrollWidth = function () {
- return this.el.scrollWidth;
- };
- ElementScrollController.prototype.getScrollHeight = function () {
- return this.el.scrollHeight;
- };
- ElementScrollController.prototype.getClientHeight = function () {
- return this.el.clientHeight;
- };
- ElementScrollController.prototype.getClientWidth = function () {
- return this.el.clientWidth;
- };
- return ElementScrollController;
-}(ScrollController));
-var WindowScrollController = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(WindowScrollController, _super);
- function WindowScrollController() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- WindowScrollController.prototype.getScrollTop = function () {
- return window.pageYOffset;
- };
- WindowScrollController.prototype.getScrollLeft = function () {
- return window.pageXOffset;
- };
- WindowScrollController.prototype.setScrollTop = function (n) {
- window.scroll(window.pageXOffset, n);
- };
- WindowScrollController.prototype.setScrollLeft = function (n) {
- window.scroll(n, window.pageYOffset);
- };
- WindowScrollController.prototype.getScrollWidth = function () {
- return document.documentElement.scrollWidth;
- };
- WindowScrollController.prototype.getScrollHeight = function () {
- return document.documentElement.scrollHeight;
- };
- WindowScrollController.prototype.getClientHeight = function () {
- return document.documentElement.clientHeight;
- };
- WindowScrollController.prototype.getClientWidth = function () {
- return document.documentElement.clientWidth;
- };
- return WindowScrollController;
-}(ScrollController));
-
-var Theme = /** @class */ (function () {
- function Theme(calendarOptions) {
- if (this.iconOverrideOption) {
- this.setIconOverride(calendarOptions[this.iconOverrideOption]);
- }
- }
- Theme.prototype.setIconOverride = function (iconOverrideHash) {
- var iconClassesCopy;
- var buttonName;
- if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object
- iconClassesCopy = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, this.iconClasses);
- for (buttonName in iconOverrideHash) {
- iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);
- }
- this.iconClasses = iconClassesCopy;
- }
- else if (iconOverrideHash === false) {
- this.iconClasses = {};
- }
- };
- Theme.prototype.applyIconOverridePrefix = function (className) {
- var prefix = this.iconOverridePrefix;
- if (prefix && className.indexOf(prefix) !== 0) { // if not already present
- className = prefix + className;
- }
- return className;
- };
- Theme.prototype.getClass = function (key) {
- return this.classes[key] || '';
- };
- Theme.prototype.getIconClass = function (buttonName, isRtl) {
- var className;
- if (isRtl && this.rtlIconClasses) {
- className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];
- }
- else {
- className = this.iconClasses[buttonName];
- }
- if (className) {
- return this.baseIconClass + ' ' + className;
- }
- return '';
- };
- Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {
- var className;
- if (this.iconOverrideCustomButtonOption) {
- className = customButtonProps[this.iconOverrideCustomButtonOption];
- if (className) {
- return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);
- }
- }
- return '';
- };
- return Theme;
-}());
-Theme.prototype.classes = {};
-Theme.prototype.iconClasses = {};
-Theme.prototype.baseIconClass = '';
-Theme.prototype.iconOverridePrefix = '';
-
-var ScrollResponder = /** @class */ (function () {
- function ScrollResponder(execFunc, emitter, scrollTime) {
- var _this = this;
- this.execFunc = execFunc;
- this.emitter = emitter;
- this.scrollTime = scrollTime;
- this.handleScrollRequest = function (request) {
- _this.queuedRequest = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, _this.queuedRequest || {}, request);
- _this.drain();
- };
- emitter.on('_scrollRequest', this.handleScrollRequest);
- this.fireInitialScroll();
- }
- ScrollResponder.prototype.detach = function () {
- this.emitter.off('_scrollRequest', this.handleScrollRequest);
- };
- ScrollResponder.prototype.update = function (isDatesNew) {
- if (isDatesNew) {
- this.fireInitialScroll(); // will drain
- }
- else {
- this.drain();
- }
- };
- ScrollResponder.prototype.fireInitialScroll = function () {
- this.handleScrollRequest({
- time: this.scrollTime
- });
- };
- ScrollResponder.prototype.drain = function () {
- if (this.queuedRequest && this.execFunc(this.queuedRequest)) {
- this.queuedRequest = null;
- }
- };
- return ScrollResponder;
-}());
-
-var ViewContextType = Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createContext"])({}); // for Components
-function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
- return {
- dateEnv: dateEnv,
- options: viewOptions,
- pluginHooks: pluginHooks,
- emitter: emitter,
- dispatch: dispatch,
- getCurrentData: getCurrentData,
- calendarApi: calendarApi,
- viewSpec: viewSpec,
- viewApi: viewApi,
- dateProfileGenerator: dateProfileGenerator,
- theme: theme,
- isRtl: viewOptions.direction === 'rtl',
- addResizeHandler: function (handler) {
- emitter.on('_resize', handler);
- },
- removeResizeHandler: function (handler) {
- emitter.off('_resize', handler);
- },
- createScrollResponder: function (execFunc) {
- return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime));
- },
- registerInteractiveComponent: registerInteractiveComponent,
- unregisterInteractiveComponent: unregisterInteractiveComponent
- };
-}
-
-var PureComponent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(PureComponent, _super);
- function PureComponent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- PureComponent.prototype.shouldComponentUpdate = function (nextProps, nextState) {
- if (this.debug) {
- console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state));
- }
- return !compareObjs(this.props, nextProps, this.propEquality) ||
- !compareObjs(this.state, nextState, this.stateEquality);
- };
- PureComponent.addPropsEquality = addPropsEquality;
- PureComponent.addStateEquality = addStateEquality;
- PureComponent.contextType = ViewContextType;
- return PureComponent;
-}(_vdom__WEBPACK_IMPORTED_MODULE_2__["Component"]));
-PureComponent.prototype.propEquality = {};
-PureComponent.prototype.stateEquality = {};
-var BaseComponent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(BaseComponent, _super);
- function BaseComponent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- BaseComponent.contextType = ViewContextType;
- return BaseComponent;
-}(PureComponent));
-function addPropsEquality(propEquality) {
- var hash = Object.create(this.prototype.propEquality);
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(hash, propEquality);
- this.prototype.propEquality = hash;
-}
-function addStateEquality(stateEquality) {
- var hash = Object.create(this.prototype.stateEquality);
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(hash, stateEquality);
- this.prototype.stateEquality = hash;
-}
-// use other one
-function setRef(ref, current) {
- if (typeof ref === 'function') {
- ref(current);
- }
- else if (ref) {
- // see https://github.com/facebook/react/issues/13029
- ref.current = current;
- }
-}
-
-function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
- switch (action.type) {
- case 'RECEIVE_EVENTS': // raw
- return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
- case 'ADD_EVENTS': // already parsed, but not expanded
- return addEvent(eventStore, action.eventStore, // new ones
- dateProfile ? dateProfile.activeRange : null, context);
- case 'MERGE_EVENTS': // already parsed and expanded
- return mergeEventStores(eventStore, action.eventStore);
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
- case 'NEXT':
- case 'CHANGE_DATE':
- case 'CHANGE_VIEW_TYPE':
- if (dateProfile) {
- return expandRecurring(eventStore, dateProfile.activeRange, context);
- }
- else {
- return eventStore;
- }
- case 'REMOVE_EVENTS':
- return excludeSubEventStore(eventStore, action.eventStore);
- case 'REMOVE_EVENT_SOURCE':
- return excludeEventsBySourceId(eventStore, action.sourceId);
- case 'REMOVE_ALL_EVENT_SOURCES':
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return !eventDef.sourceId; // only keep events with no source id
- });
- case 'REMOVE_ALL_EVENTS':
- return createEmptyEventStore();
- default:
- return eventStore;
- }
-}
-function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
- if (eventSource && // not already removed
- fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
- ) {
- var subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
- if (fetchRange) {
- subset = expandRecurring(subset, fetchRange, context);
- }
- return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
- }
- return eventStore;
-}
-function transformRawEvents(rawEvents, eventSource, context) {
- var calEachTransform = context.options.eventDataTransform;
- var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
- if (sourceEachTransform) {
- rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
- }
- if (calEachTransform) {
- rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
- }
- return rawEvents;
-}
-function transformEachRawEvent(rawEvents, func) {
- var refinedEvents;
- if (!func) {
- refinedEvents = rawEvents;
- }
- else {
- refinedEvents = [];
- for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
- var rawEvent = rawEvents_1[_i];
- var refinedEvent = func(rawEvent);
- if (refinedEvent) {
- refinedEvents.push(refinedEvent);
- }
- else if (refinedEvent == null) {
- refinedEvents.push(rawEvent);
- } // if a different falsy value, do nothing
- }
- }
- return refinedEvents;
-}
-function addEvent(eventStore, subset, expandRange, context) {
- if (expandRange) {
- subset = expandRecurring(subset, expandRange, context);
- }
- return mergeEventStores(eventStore, subset);
-}
-function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
- var defs = eventStore.defs;
- var instances = mapHash(eventStore.instances, function (instance) {
- var def = defs[instance.defId];
- if (def.allDay || def.recurringDef) {
- return instance; // isn't dependent on timezone
- }
- else {
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, instance), { range: {
- start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
- end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))
- }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
- }
- });
- return { defs: defs, instances: instances };
-}
-function excludeEventsBySourceId(eventStore, sourceId) {
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return eventDef.sourceId !== sourceId;
- });
-}
-// QUESTION: why not just return instances? do a general object-property-exclusion util
-function excludeInstances(eventStore, removals) {
- return {
- defs: eventStore.defs,
- instances: filterHash(eventStore.instances, function (instance) {
- return !removals[instance.instanceId];
- })
- };
-}
-
-// high-level segmenting-aware tester functions
-// ------------------------------------------------------------------------------------------------------------------------
-function isInteractionValid(interaction, context) {
- return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions
-}
-function isDateSelectionValid(dateSelection, context) {
- return isNewPropsValid({ dateSelection: dateSelection }, context);
-}
-function isNewPropsValid(newProps, context) {
- var calendarState = context.getCurrentData();
- var props = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
- return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);
-}
-function isPropsValid(state, context, dateSpanMeta, filterConfig) {
- if (dateSpanMeta === void 0) { dateSpanMeta = {}; }
- if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {
- return false;
- }
- if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {
- return false;
- }
- return true;
-}
-// Moving Event Validation
-// ------------------------------------------------------------------------------------------------------------------------
-function isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {
- var currentState = context.getCurrentData();
- var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
- var subjectEventStore = interaction.mutatedEvents;
- var subjectDefs = subjectEventStore.defs;
- var subjectInstances = subjectEventStore.instances;
- var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
- state.eventUiBases :
- { '': currentState.selectionConfig } // if not a real event, validate as a selection
- );
- if (filterConfig) {
- subjectConfigs = mapHash(subjectConfigs, filterConfig);
- }
- var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances); // exclude the subject events. TODO: exclude defs too?
- var otherDefs = otherEventStore.defs;
- var otherInstances = otherEventStore.instances;
- var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
- for (var subjectInstanceId in subjectInstances) {
- var subjectInstance = subjectInstances[subjectInstanceId];
- var subjectRange = subjectInstance.range;
- var subjectConfig = subjectConfigs[subjectInstance.defId];
- var subjectDef = subjectDefs[subjectInstance.defId];
- // constraint
- if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {
- return false;
- }
- // overlap
- var eventOverlap = context.options.eventOverlap;
- var eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;
- for (var otherInstanceId in otherInstances) {
- var otherInstance = otherInstances[otherInstanceId];
- // intersect! evaluate
- if (rangesIntersect(subjectRange, otherInstance.range)) {
- var otherOverlap = otherConfigs[otherInstance.defId].overlap;
- // consider the other event's overlap. only do this if the subject event is a "real" event
- if (otherOverlap === false && interaction.isEvent) {
- return false;
- }
- if (subjectConfig.overlap === false) {
- return false;
- }
- if (eventOverlapFunc && !eventOverlapFunc(new EventApi(context, otherDefs[otherInstance.defId], otherInstance), // still event
- new EventApi(context, subjectDef, subjectInstance) // moving event
- )) {
- return false;
- }
- }
- }
- // allow (a function)
- var calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state
- for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
- var subjectAllow = _a[_i];
- var subjectDateSpan = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });
- var origDef = calendarEventStore.defs[subjectDef.defId];
- var origInstance = calendarEventStore.instances[subjectInstanceId];
- var eventApi = void 0;
- if (origDef) { // was previously in the calendar
- eventApi = new EventApi(context, origDef, origInstance);
- }
- else { // was an external event
- eventApi = new EventApi(context, subjectDef); // no instance, because had no dates
- }
- if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {
- return false;
- }
- }
- }
- return true;
-}
-// Date Selection Validation
-// ------------------------------------------------------------------------------------------------------------------------
-function isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {
- var relevantEventStore = state.eventStore;
- var relevantDefs = relevantEventStore.defs;
- var relevantInstances = relevantEventStore.instances;
- var selection = state.dateSelection;
- var selectionRange = selection.range;
- var selectionConfig = context.getCurrentData().selectionConfig;
- if (filterConfig) {
- selectionConfig = filterConfig(selectionConfig);
- }
- // constraint
- if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {
- return false;
- }
- // overlap
- var selectOverlap = context.options.selectOverlap;
- var selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;
- for (var relevantInstanceId in relevantInstances) {
- var relevantInstance = relevantInstances[relevantInstanceId];
- // intersect! evaluate
- if (rangesIntersect(selectionRange, relevantInstance.range)) {
- if (selectionConfig.overlap === false) {
- return false;
- }
- if (selectOverlapFunc && !selectOverlapFunc(new EventApi(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {
- return false;
- }
- }
- }
- // allow (a function)
- for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {
- var selectionAllow = _a[_i];
- var fullDateSpan = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, dateSpanMeta), selection);
- if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {
- return false;
- }
- }
- return true;
-}
-// Constraint Utils
-// ------------------------------------------------------------------------------------------------------------------------
-function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {
- for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {
- var constraint = constraints_1[_i];
- if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {
- return false;
- }
- }
- return true;
-}
-function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
-otherEventStore, // for if constraint is an even group ID
-businessHoursUnexpanded, // for if constraint is 'businessHours'
-context // for expanding businesshours
-) {
- if (constraint === 'businessHours') {
- return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));
- }
- else if (typeof constraint === 'string') { // an group ID
- return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) {
- return eventDef.groupId === constraint;
- }));
- }
- else if (typeof constraint === 'object' && constraint) { // non-null object
- return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));
- }
- return []; // if it's false
-}
-// TODO: move to event-store file?
-function eventStoreToRanges(eventStore) {
- var instances = eventStore.instances;
- var ranges = [];
- for (var instanceId in instances) {
- ranges.push(instances[instanceId].range);
- }
- return ranges;
-}
-// TODO: move to geom file?
-function anyRangesContainRange(outerRanges, innerRange) {
- for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {
- var outerRange = outerRanges_1[_i];
- if (rangeContainsRange(outerRange, innerRange)) {
- return true;
- }
- }
- return false;
-}
-
-/*
-an INTERACTABLE date component
-
-PURPOSES:
-- hook up to fg, fill, and mirror renderers
-- interface for dragging and hits
-*/
-var DateComponent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(DateComponent, _super);
- function DateComponent() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.uid = guid();
- return _this;
- }
- // Hit System
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.prepareHits = function () {
- };
- DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
- return null; // this should be abstract
- };
- // Validation
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.isInteractionValid = function (interaction) {
- var dateProfile = this.props.dateProfile; // HACK
- var instances = interaction.mutatedEvents.instances;
- if (dateProfile) { // HACK for MorePopover
- for (var instanceId in instances) {
- if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
- return false;
- }
- }
- }
- return isInteractionValid(interaction, this.context);
- };
- DateComponent.prototype.isDateSelectionValid = function (selection) {
- var dateProfile = this.props.dateProfile; // HACK
- if (dateProfile && // HACK for MorePopover
- !rangeContainsRange(dateProfile.validRange, selection.range)) {
- return false;
- }
- return isDateSelectionValid(selection, this.context);
- };
- // Pointer Interaction Utils
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.isValidSegDownEl = function (el) {
- return !this.props.eventDrag && // HACK
- !this.props.eventResize && // HACK
- !elementClosest(el, '.fc-event-mirror') &&
- (this.isPopover() || !this.isInPopover(el));
- // ^above line ensures we don't detect a seg interaction within a nested component.
- // it's a HACK because it only supports a popover as the nested component.
- };
- DateComponent.prototype.isValidDateDownEl = function (el) {
- return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
- !elementClosest(el, '.fc-daygrid-more-link') && // a "more.." link
- !elementClosest(el, 'a[data-navlink]') && // a clickable nav link
- !this.isInPopover(el);
- };
- DateComponent.prototype.isPopover = function () {
- return false;
- };
- DateComponent.prototype.isInPopover = function (el) {
- return Boolean(elementClosest(el, '.fc-popover'));
- };
- return DateComponent;
-}(BaseComponent));
-
-// TODO: easier way to add new hooks? need to update a million things
-function createPlugin(input) {
- return {
- id: guid(),
- deps: input.deps || [],
- reducers: input.reducers || [],
- contextInit: [].concat(input.contextInit || []),
- eventRefiners: input.eventRefiners || {},
- eventDefMemberAdders: input.eventDefMemberAdders || [],
- eventSourceRefiners: input.eventSourceRefiners || {},
- isDraggableTransformers: input.isDraggableTransformers || [],
- eventDragMutationMassagers: input.eventDragMutationMassagers || [],
- eventDefMutationAppliers: input.eventDefMutationAppliers || [],
- dateSelectionTransformers: input.dateSelectionTransformers || [],
- datePointTransforms: input.datePointTransforms || [],
- dateSpanTransforms: input.dateSpanTransforms || [],
- views: input.views || {},
- viewPropsTransformers: input.viewPropsTransformers || [],
- isPropsValid: input.isPropsValid || null,
- externalDefTransforms: input.externalDefTransforms || [],
- eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],
- viewContainerAppends: input.viewContainerAppends || [],
- eventDropTransformers: input.eventDropTransformers || [],
- componentInteractions: input.componentInteractions || [],
- calendarInteractions: input.calendarInteractions || [],
- themeClasses: input.themeClasses || {},
- eventSourceDefs: input.eventSourceDefs || [],
- cmdFormatter: input.cmdFormatter,
- recurringTypes: input.recurringTypes || [],
- namedTimeZonedImpl: input.namedTimeZonedImpl,
- initialView: input.initialView || '',
- elementDraggingImpl: input.elementDraggingImpl,
- optionChangeHandlers: input.optionChangeHandlers || {},
- scrollGridImpl: input.scrollGridImpl || null,
- contentTypeHandlers: input.contentTypeHandlers || {},
- listenerRefiners: input.listenerRefiners || {},
- optionRefiners: input.optionRefiners || {},
- propSetHandlers: input.propSetHandlers || {}
- };
-}
-function buildPluginHooks(pluginDefs, globalDefs) {
- var isAdded = {};
- var hooks = {
- reducers: [],
- contextInit: [],
- eventRefiners: {},
- eventDefMemberAdders: [],
- eventSourceRefiners: {},
- isDraggableTransformers: [],
- eventDragMutationMassagers: [],
- eventDefMutationAppliers: [],
- dateSelectionTransformers: [],
- datePointTransforms: [],
- dateSpanTransforms: [],
- views: {},
- viewPropsTransformers: [],
- isPropsValid: null,
- externalDefTransforms: [],
- eventResizeJoinTransforms: [],
- viewContainerAppends: [],
- eventDropTransformers: [],
- componentInteractions: [],
- calendarInteractions: [],
- themeClasses: {},
- eventSourceDefs: [],
- cmdFormatter: null,
- recurringTypes: [],
- namedTimeZonedImpl: null,
- initialView: '',
- elementDraggingImpl: null,
- optionChangeHandlers: {},
- scrollGridImpl: null,
- contentTypeHandlers: {},
- listenerRefiners: {},
- optionRefiners: {},
- propSetHandlers: {}
- };
- function addDefs(defs) {
- for (var _i = 0, defs_1 = defs; _i < defs_1.length; _i++) {
- var def = defs_1[_i];
- if (!isAdded[def.id]) {
- isAdded[def.id] = true;
- addDefs(def.deps);
- hooks = combineHooks(hooks, def);
- }
- }
- }
- if (pluginDefs) {
- addDefs(pluginDefs);
- }
- addDefs(globalDefs);
- return hooks;
-}
-function buildBuildPluginHooks() {
- var currentOverrideDefs = [];
- var currentGlobalDefs = [];
- var currentHooks;
- return function (overrideDefs, globalDefs) {
- if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
- currentHooks = buildPluginHooks(overrideDefs, globalDefs);
- }
- currentOverrideDefs = overrideDefs;
- currentGlobalDefs = globalDefs;
- return currentHooks;
- };
-}
-function combineHooks(hooks0, hooks1) {
- return {
- reducers: hooks0.reducers.concat(hooks1.reducers),
- contextInit: hooks0.contextInit.concat(hooks1.contextInit),
- eventRefiners: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.eventRefiners), hooks1.eventRefiners),
- eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
- eventSourceRefiners: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),
- isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
- eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
- eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
- dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
- datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
- dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
- views: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.views), hooks1.views),
- viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
- isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
- externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
- eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),
- viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
- eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
- calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
- componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
- themeClasses: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.themeClasses), hooks1.themeClasses),
- eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
- cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
- recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
- namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
- initialView: hooks0.initialView || hooks1.initialView,
- elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
- optionChangeHandlers: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),
- scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,
- contentTypeHandlers: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.contentTypeHandlers), hooks1.contentTypeHandlers),
- listenerRefiners: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.listenerRefiners), hooks1.listenerRefiners),
- optionRefiners: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.optionRefiners), hooks1.optionRefiners),
- propSetHandlers: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, hooks0.propSetHandlers), hooks1.propSetHandlers)
- };
-}
-
-var StandardTheme = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(StandardTheme, _super);
- function StandardTheme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return StandardTheme;
-}(Theme));
-StandardTheme.prototype.classes = {
- root: 'fc-theme-standard',
- tableCellShaded: 'fc-cell-shaded',
- buttonGroup: 'fc-button-group',
- button: 'fc-button fc-button-primary',
- buttonActive: 'fc-button-active'
-};
-StandardTheme.prototype.baseIconClass = 'fc-icon';
-StandardTheme.prototype.iconClasses = {
- close: 'fc-icon-x',
- prev: 'fc-icon-chevron-left',
- next: 'fc-icon-chevron-right',
- prevYear: 'fc-icon-chevrons-left',
- nextYear: 'fc-icon-chevrons-right'
-};
-StandardTheme.prototype.rtlIconClasses = {
- prev: 'fc-icon-chevron-right',
- next: 'fc-icon-chevron-left',
- prevYear: 'fc-icon-chevrons-right',
- nextYear: 'fc-icon-chevrons-left'
-};
-StandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly
-StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
-StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
-
-function compileViewDefs(defaultConfigs, overrideConfigs) {
- var hash = {};
- var viewType;
- for (viewType in defaultConfigs) {
- ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- }
- for (viewType in overrideConfigs) {
- ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- }
- return hash;
-}
-function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
- if (hash[viewType]) {
- return hash[viewType];
- }
- var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- if (viewDef) {
- hash[viewType] = viewDef;
- }
- return viewDef;
-}
-function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
- var defaultConfig = defaultConfigs[viewType];
- var overrideConfig = overrideConfigs[viewType];
- var queryProp = function (name) {
- return (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :
- ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null);
- };
- var theComponent = queryProp('component');
- var superType = queryProp('superType');
- var superDef = null;
- if (superType) {
- if (superType === viewType) {
- throw new Error('Can\'t have a custom view type that references itself');
- }
- superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);
- }
- if (!theComponent && superDef) {
- theComponent = superDef.component;
- }
- if (!theComponent) {
- return null; // don't throw a warning, might be settings for a single-unit view
- }
- return {
- type: viewType,
- component: theComponent,
- defaults: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, (superDef ? superDef.defaults : {})), (defaultConfig ? defaultConfig.rawOptions : {})),
- overrides: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, (superDef ? superDef.overrides : {})), (overrideConfig ? overrideConfig.rawOptions : {}))
- };
-}
-
-// NOTE: in JSX, you should always use this class with arg. otherwise, will default to any???
-var RenderHook = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(RenderHook, _super);
- function RenderHook() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.rootElRef = Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createRef"])();
- _this.handleRootEl = function (el) {
- setRef(_this.rootElRef, el);
- if (_this.props.elRef) {
- setRef(_this.props.elRef, el);
- }
- };
- return _this;
- }
- RenderHook.prototype.render = function () {
- var _this = this;
- var props = this.props;
- var hookProps = props.hookProps;
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(MountHook, { hookProps: hookProps, didMount: props.didMount, willUnmount: props.willUnmount, elRef: this.handleRootEl }, function (rootElRef) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ContentHook, { hookProps: hookProps, content: props.content, defaultContent: props.defaultContent, backupElRef: _this.rootElRef }, function (innerElRef, innerContent) { return props.children(rootElRef, normalizeClassNames(props.classNames, hookProps), innerElRef, innerContent); })); }));
- };
- return RenderHook;
-}(BaseComponent));
-// for forcing rerender of components that use the ContentHook
-var CustomContentRenderContext = Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createContext"])(0);
-var ContentHook = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(ContentHook, _super);
- function ContentHook() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.innerElRef = Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createRef"])();
- return _this;
- }
- ContentHook.prototype.render = function () {
- var _this = this;
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(CustomContentRenderContext.Consumer, null, function () { return (_this.props.children(_this.innerElRef, _this.renderInnerContent())); }));
- };
- ContentHook.prototype.componentDidMount = function () {
- this.updateCustomContent();
- };
- ContentHook.prototype.componentDidUpdate = function () {
- this.updateCustomContent();
- };
- ContentHook.prototype.renderInnerContent = function () {
- var contentTypeHandlers = this.context.pluginHooks.contentTypeHandlers;
- var _a = this, props = _a.props, customContentInfo = _a.customContentInfo;
- var rawVal = props.content;
- var innerContent = normalizeContent(rawVal, props.hookProps);
- var innerContentVDom = null;
- if (innerContent === undefined) { // use the default
- innerContent = normalizeContent(props.defaultContent, props.hookProps);
- }
- if (innerContent !== undefined) { // we allow custom content handlers to return nothing
- if (customContentInfo) {
- customContentInfo.contentVal = innerContent[customContentInfo.contentKey];
- }
- else if (typeof innerContent === 'object') {
- // look for a prop that would indicate a custom content handler is needed
- for (var contentKey in contentTypeHandlers) {
- if (innerContent[contentKey] !== undefined) {
- customContentInfo = this.customContentInfo = {
- contentKey: contentKey,
- contentVal: innerContent[contentKey],
- handler: contentTypeHandlers[contentKey]()
- };
- break;
- }
- }
- }
- if (customContentInfo) {
- innerContentVDom = []; // signal that something was specified
- }
- else {
- innerContentVDom = innerContent; // assume a [p]react vdom node. use it
- }
- }
- return innerContentVDom;
- };
- ContentHook.prototype.updateCustomContent = function () {
- if (this.customContentInfo) {
- this.customContentInfo.handler(this.innerElRef.current || this.props.backupElRef.current, // the element to render into
- this.customContentInfo.contentVal);
- }
- };
- return ContentHook;
-}(BaseComponent));
-var MountHook = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(MountHook, _super);
- function MountHook() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.handleRootEl = function (rootEl) {
- _this.rootEl = rootEl;
- if (_this.props.elRef) {
- setRef(_this.props.elRef, rootEl);
- }
- };
- return _this;
- }
- MountHook.prototype.render = function () {
- return this.props.children(this.handleRootEl);
- };
- MountHook.prototype.componentDidMount = function () {
- var callback = this.props.didMount;
- callback && callback(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, this.props.hookProps), { el: this.rootEl }));
- };
- MountHook.prototype.componentWillUnmount = function () {
- var callback = this.props.willUnmount;
- callback && callback(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, this.props.hookProps), { el: this.rootEl }));
- };
- return MountHook;
-}(BaseComponent));
-function buildClassNameNormalizer() {
- var currentGenerator;
- var currentHookProps;
- var currentClassNames = [];
- return function (generator, hookProps) {
- if (!currentHookProps || !isPropsEqual(currentHookProps, hookProps) || generator !== currentGenerator) {
- currentGenerator = generator;
- currentHookProps = hookProps;
- currentClassNames = normalizeClassNames(generator, hookProps);
- }
- return currentClassNames;
- };
-}
-function normalizeClassNames(classNames, hookProps) {
- if (typeof classNames === 'function') {
- classNames = classNames(hookProps);
- }
- return parseClassNames(classNames);
-}
-function normalizeContent(input, hookProps) {
- if (typeof input === 'function') {
- return input(hookProps, _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"]); // give the function the vdom-creation func
- }
- else {
- return input;
- }
-}
-
-var ViewRoot = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(ViewRoot, _super);
- function ViewRoot() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.normalizeClassNames = buildClassNameNormalizer();
- return _this;
- }
- ViewRoot.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- var options = context.options;
- var hookProps = { view: context.viewApi };
- var customClassNames = this.normalizeClassNames(options.viewClassNames, hookProps);
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(MountHook, { hookProps: hookProps, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount, elRef: props.elRef }, function (rootElRef) { return props.children(rootElRef, ["fc-" + props.viewSpec.type + "-view", 'fc-view'].concat(customClassNames)); }));
- };
- return ViewRoot;
-}(BaseComponent));
-
-function parseViewConfigs(inputs) {
- return mapHash(inputs, parseViewConfig);
-}
-function parseViewConfig(input) {
- var rawOptions = typeof input === 'function' ?
- { component: input } :
- input;
- var component = rawOptions.component;
- if (rawOptions.content) {
- component = createViewHookComponent(rawOptions);
- // TODO: remove content/classNames/didMount/etc from options?
- }
- return {
- superType: rawOptions.type,
- component: component,
- rawOptions: rawOptions // includes type and component too :(
- };
-}
-function createViewHookComponent(options) {
- return function (viewProps) {
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ViewContextType.Consumer, null, function (context) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ViewRoot, { viewSpec: context.viewSpec }, function (rootElRef, viewClassNames) {
- var hookProps = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold });
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(RenderHook, { hookProps: hookProps, classNames: options.classNames, content: options.content, didMount: options.didMount, willUnmount: options.willUnmount, elRef: rootElRef }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: viewClassNames.concat(customClassNames).join(' '), ref: rootElRef }, innerContent)); }));
- })); }));
- };
-}
-
-function buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
- var defaultConfigs = parseViewConfigs(defaultInputs);
- var overrideConfigs = parseViewConfigs(optionOverrides.views);
- var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
- return mapHash(viewDefs, function (viewDef) {
- return buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults);
- });
-}
-function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
- var durationInput = viewDef.overrides.duration ||
- viewDef.defaults.duration ||
- dynamicOptionOverrides.duration ||
- optionOverrides.duration;
- var duration = null;
- var durationUnit = '';
- var singleUnit = '';
- var singleUnitOverrides = {};
- if (durationInput) {
- duration = createDurationCached(durationInput);
- if (duration) { // valid?
- var denom = greatestDurationDenominator(duration);
- durationUnit = denom.unit;
- if (denom.value === 1) {
- singleUnit = durationUnit;
- singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};
- }
- }
- }
- var queryButtonText = function (optionsSubset) {
- var buttonTextMap = optionsSubset.buttonText || {};
- var buttonTextKey = viewDef.defaults.buttonTextKey;
- if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {
- return buttonTextMap[buttonTextKey];
- }
- if (buttonTextMap[viewDef.type] != null) {
- return buttonTextMap[viewDef.type];
- }
- if (buttonTextMap[singleUnit] != null) {
- return buttonTextMap[singleUnit];
- }
- };
- return {
- type: viewDef.type,
- component: viewDef.component,
- duration: duration,
- durationUnit: durationUnit,
- singleUnit: singleUnit,
- optionDefaults: viewDef.defaults,
- optionOverrides: Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, singleUnitOverrides), viewDef.overrides),
- buttonTextOverride: queryButtonText(dynamicOptionOverrides) ||
- queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence
- viewDef.overrides.buttonText,
- buttonTextDefault: queryButtonText(localeDefaults) ||
- viewDef.defaults.buttonText ||
- queryButtonText(BASE_OPTION_DEFAULTS) ||
- viewDef.type // fall back to given view name
- };
-}
-// hack to get memoization working
-var durationInputMap = {};
-function createDurationCached(durationInput) {
- var json = JSON.stringify(durationInput);
- var res = durationInputMap[json];
- if (res === undefined) {
- res = createDuration(durationInput);
- durationInputMap[json] = res;
- }
- return res;
-}
-
-var DateProfileGenerator = /** @class */ (function () {
- function DateProfileGenerator(props) {
- this.props = props;
- this.nowDate = getNow(props.nowInput, props.dateEnv);
- this.initHiddenDays();
- }
- /* Date Range Computation
- ------------------------------------------------------------------------------------------------------------------*/
- // Builds a structure with info about what the dates/ranges will be for the "prev" view.
- DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate, forceToValid) {
- var dateEnv = this.props.dateEnv;
- var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
- currentDateProfile.dateIncrement);
- return this.build(prevDate, -1, forceToValid);
- };
- // Builds a structure with info about what the dates/ranges will be for the "next" view.
- DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate, forceToValid) {
- var dateEnv = this.props.dateEnv;
- var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
- currentDateProfile.dateIncrement);
- return this.build(nextDate, 1, forceToValid);
- };
- // Builds a structure holding dates/ranges for rendering around the given date.
- // Optional direction param indicates whether the date is being incremented/decremented
- // from its previous value. decremented = -1, incremented = 1 (default).
- DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) {
- if (forceToValid === void 0) { forceToValid = true; }
- var props = this.props;
- var validRange;
- var currentInfo;
- var isRangeAllDay;
- var renderRange;
- var activeRange;
- var isValid;
- validRange = this.buildValidRange();
- validRange = this.trimHiddenDays(validRange);
- if (forceToValid) {
- currentDate = constrainMarkerToRange(currentDate, validRange);
- }
- currentInfo = this.buildCurrentRangeInfo(currentDate, direction);
- isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
- renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);
- renderRange = this.trimHiddenDays(renderRange);
- activeRange = renderRange;
- if (!props.showNonCurrentDates) {
- activeRange = intersectRanges(activeRange, currentInfo.range);
- }
- activeRange = this.adjustActiveRange(activeRange);
- activeRange = intersectRanges(activeRange, validRange); // might return null
- // it's invalid if the originally requested date is not contained,
- // or if the range is completely outside of the valid range.
- isValid = rangesIntersect(currentInfo.range, validRange);
- return {
- // constraint for where prev/next operations can go and where events can be dragged/resized to.
- // an object with optional start and end properties.
- validRange: validRange,
- // range the view is formally responsible for.
- // for example, a month view might have 1st-31st, excluding padded dates
- currentRange: currentInfo.range,
- // name of largest unit being displayed, like "month" or "week"
- currentRangeUnit: currentInfo.unit,
- isRangeAllDay: isRangeAllDay,
- // dates that display events and accept drag-n-drop
- // will be `null` if no dates accept events
- activeRange: activeRange,
- // date range with a rendered skeleton
- // includes not-active days that need some sort of DOM
- renderRange: renderRange,
- // Duration object that denotes the first visible time of any given day
- slotMinTime: props.slotMinTime,
- // Duration object that denotes the exclusive visible end time of any given day
- slotMaxTime: props.slotMaxTime,
- isValid: isValid,
- // how far the current date will move for a prev/next operation
- dateIncrement: this.buildDateIncrement(currentInfo.duration)
- // pass a fallback (might be null) ^
- };
- };
- // Builds an object with optional start/end properties.
- // Indicates the minimum/maximum dates to display.
- // not responsible for trimming hidden days.
- DateProfileGenerator.prototype.buildValidRange = function () {
- var input = this.props.validRangeInput;
- var simpleInput = typeof input === 'function'
- ? input.call(this.props.calendarApi, this.nowDate)
- : input;
- return this.refineRange(simpleInput) ||
- { start: null, end: null }; // completely open-ended
- };
- // Builds a structure with info about the "current" range, the range that is
- // highlighted as being the current month for example.
- // See build() for a description of `direction`.
- // Guaranteed to have `range` and `unit` properties. `duration` is optional.
- DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {
- var props = this.props;
- var duration = null;
- var unit = null;
- var range = null;
- var dayCount;
- if (props.duration) {
- duration = props.duration;
- unit = props.durationUnit;
- range = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- else if ((dayCount = this.props.dayCount)) {
- unit = 'day';
- range = this.buildRangeFromDayCount(date, direction, dayCount);
- }
- else if ((range = this.buildCustomVisibleRange(date))) {
- unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;
- }
- else {
- duration = this.getFallbackDuration();
- unit = greatestDurationDenominator(duration).unit;
- range = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- return { duration: duration, unit: unit, range: range };
- };
- DateProfileGenerator.prototype.getFallbackDuration = function () {
- return createDuration({ day: 1 });
- };
- // Returns a new activeRange to have time values (un-ambiguate)
- // slotMinTime or slotMaxTime causes the range to expand.
- DateProfileGenerator.prototype.adjustActiveRange = function (range) {
- var _a = this.props, dateEnv = _a.dateEnv, usesMinMaxTime = _a.usesMinMaxTime, slotMinTime = _a.slotMinTime, slotMaxTime = _a.slotMaxTime;
- var start = range.start;
- var end = range.end;
- if (usesMinMaxTime) {
- // expand active range if slotMinTime is negative (why not when positive?)
- if (asRoughDays(slotMinTime) < 0) {
- start = startOfDay(start); // necessary?
- start = dateEnv.add(start, slotMinTime);
- }
- // expand active range if slotMaxTime is beyond one day (why not when negative?)
- if (asRoughDays(slotMaxTime) > 1) {
- end = startOfDay(end); // necessary?
- end = addDays(end, -1);
- end = dateEnv.add(end, slotMaxTime);
- }
- }
- return { start: start, end: end };
- };
- // Builds the "current" range when it is specified as an explicit duration.
- // `unit` is the already-computed greatestDurationDenominator unit of duration.
- DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {
- var _a = this.props, dateEnv = _a.dateEnv, dateAlignment = _a.dateAlignment;
- var start;
- var end;
- var res;
- // compute what the alignment should be
- if (!dateAlignment) {
- var dateIncrement = this.props.dateIncrement;
- if (dateIncrement) {
- // use the smaller of the two units
- if (asRoughMs(dateIncrement) < asRoughMs(duration)) {
- dateAlignment = greatestDurationDenominator(dateIncrement).unit;
- }
- else {
- dateAlignment = unit;
- }
- }
- else {
- dateAlignment = unit;
- }
- }
- // if the view displays a single day or smaller
- if (asRoughDays(duration) <= 1) {
- if (this.isHiddenDay(start)) {
- start = this.skipHiddenDays(start, direction);
- start = startOfDay(start);
- }
- }
- function computeRes() {
- start = dateEnv.startOf(date, dateAlignment);
- end = dateEnv.add(start, duration);
- res = { start: start, end: end };
- }
- computeRes();
- // if range is completely enveloped by hidden days, go past the hidden days
- if (!this.trimHiddenDays(res)) {
- date = this.skipHiddenDays(date, direction);
- computeRes();
- }
- return res;
- };
- // Builds the "current" range when a dayCount is specified.
- DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {
- var _a = this.props, dateEnv = _a.dateEnv, dateAlignment = _a.dateAlignment;
- var runningCount = 0;
- var start = date;
- var end;
- if (dateAlignment) {
- start = dateEnv.startOf(start, dateAlignment);
- }
- start = startOfDay(start);
- start = this.skipHiddenDays(start, direction);
- end = start;
- do {
- end = addDays(end, 1);
- if (!this.isHiddenDay(end)) {
- runningCount++;
- }
- } while (runningCount < dayCount);
- return { start: start, end: end };
- };
- // Builds a normalized range object for the "visible" range,
- // which is a way to define the currentRange and activeRange at the same time.
- DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {
- var props = this.props;
- var input = props.visibleRangeInput;
- var simpleInput = typeof input === 'function'
- ? input.call(props.calendarApi, props.dateEnv.toDate(date))
- : input;
- var range = this.refineRange(simpleInput);
- if (range && (range.start == null || range.end == null)) {
- return null;
- }
- return range;
- };
- // Computes the range that will represent the element/cells for *rendering*,
- // but which may have voided days/times.
- // not responsible for trimming hidden days.
- DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
- return currentRange;
- };
- // Compute the duration value that should be added/substracted to the current date
- // when a prev/next operation happens.
- DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {
- var dateIncrement = this.props.dateIncrement;
- var customAlignment;
- if (dateIncrement) {
- return dateIncrement;
- }
- else if ((customAlignment = this.props.dateAlignment)) {
- return createDuration(1, customAlignment);
- }
- else if (fallback) {
- return fallback;
- }
- else {
- return createDuration({ days: 1 });
- }
- };
- DateProfileGenerator.prototype.refineRange = function (rangeInput) {
- if (rangeInput) {
- var range = parseRange(rangeInput, this.props.dateEnv);
- if (range) {
- range = computeVisibleDayRange(range);
- }
- return range;
- }
- return null;
- };
- /* Hidden Days
- ------------------------------------------------------------------------------------------------------------------*/
- // Initializes internal variables related to calculating hidden days-of-week
- DateProfileGenerator.prototype.initHiddenDays = function () {
- var hiddenDays = this.props.hiddenDays || []; // array of day-of-week indices that are hidden
- var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)
- var dayCnt = 0;
- var i;
- if (this.props.weekends === false) {
- hiddenDays.push(0, 6); // 0=sunday, 6=saturday
- }
- for (i = 0; i < 7; i++) {
- if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {
- dayCnt++;
- }
- }
- if (!dayCnt) {
- throw new Error('invalid hiddenDays'); // all days were hidden? bad.
- }
- this.isHiddenDayHash = isHiddenDayHash;
- };
- // Remove days from the beginning and end of the range that are computed as hidden.
- // If the whole range is trimmed off, returns null
- DateProfileGenerator.prototype.trimHiddenDays = function (range) {
- var start = range.start;
- var end = range.end;
- if (start) {
- start = this.skipHiddenDays(start);
- }
- if (end) {
- end = this.skipHiddenDays(end, -1, true);
- }
- if (start == null || end == null || start < end) {
- return { start: start, end: end };
- }
- return null;
- };
- // Is the current day hidden?
- // `day` is a day-of-week index (0-6), or a Date (used for UTC)
- DateProfileGenerator.prototype.isHiddenDay = function (day) {
- if (day instanceof Date) {
- day = day.getUTCDay();
- }
- return this.isHiddenDayHash[day];
- };
- // Incrementing the current day until it is no longer a hidden day, returning a copy.
- // DOES NOT CONSIDER validRange!
- // If the initial value of `date` is not a hidden day, don't do anything.
- // Pass `isExclusive` as `true` if you are dealing with an end date.
- // `inc` defaults to `1` (increment one day forward each time)
- DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) {
- if (inc === void 0) { inc = 1; }
- if (isExclusive === void 0) { isExclusive = false; }
- while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {
- date = addDays(date, inc);
- }
- return date;
- };
- return DateProfileGenerator;
-}());
-
-function reduceViewType(viewType, action) {
- switch (action.type) {
- case 'CHANGE_VIEW_TYPE':
- return viewType = action.viewType;
- }
- return viewType;
-}
-
-function reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {
- var _a;
- switch (action.type) {
- case 'SET_OPTION':
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, dynamicOptionOverrides), (_a = {}, _a[action.optionName] = action.rawOptionValue, _a));
- default:
- return dynamicOptionOverrides;
- }
-}
-
-function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {
- var dp;
- switch (action.type) {
- case 'CHANGE_VIEW_TYPE':
- return dateProfileGenerator.build(action.dateMarker || currentDate);
- case 'CHANGE_DATE':
- if (!currentDateProfile.activeRange ||
- !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker) // don't move if date already in view
- ) {
- return dateProfileGenerator.build(action.dateMarker);
- }
- break;
- case 'PREV':
- dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);
- if (dp.isValid) {
- return dp;
- }
- break;
- case 'NEXT':
- dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);
- if (dp.isValid) {
- return dp;
- }
- break;
- }
- return currentDateProfile;
-}
-
-function initEventSources(calendarOptions, dateProfile, context) {
- var activeRange = dateProfile ? dateProfile.activeRange : null;
- return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);
-}
-function reduceEventSources(eventSources, action, dateProfile, context) {
- var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
- switch (action.type) {
- case 'ADD_EVENT_SOURCES': // already parsed
- return addSources(eventSources, action.sources, activeRange, context);
- case 'REMOVE_EVENT_SOURCE':
- return removeSource(eventSources, action.sourceId);
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
- case 'NEXT':
- case 'CHANGE_DATE':
- case 'CHANGE_VIEW_TYPE':
- if (dateProfile) {
- return fetchDirtySources(eventSources, activeRange, context);
- }
- else {
- return eventSources;
- }
- case 'FETCH_EVENT_SOURCES':
- return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
- arrayToHash(action.sourceIds) :
- excludeStaticSources(eventSources, context), activeRange, context);
- case 'RECEIVE_EVENTS':
- case 'RECEIVE_EVENT_ERROR':
- return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
- case 'REMOVE_ALL_EVENT_SOURCES':
- return {};
- default:
- return eventSources;
- }
-}
-function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
- var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
- return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, context);
-}
-function computeEventSourceLoadingLevel(eventSources) {
- var cnt = 0;
- for (var sourceId in eventSources) {
- if (eventSources[sourceId].isFetching) {
- cnt++;
- }
- }
- return cnt;
-}
-function addSources(eventSourceHash, sources, fetchRange, context) {
- var hash = {};
- for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {
- var source = sources_1[_i];
- hash[source.sourceId] = source;
- }
- if (fetchRange) {
- hash = fetchDirtySources(hash, fetchRange, context);
- }
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, eventSourceHash), hash);
-}
-function removeSource(eventSourceHash, sourceId) {
- return filterHash(eventSourceHash, function (eventSource) {
- return eventSource.sourceId !== sourceId;
- });
-}
-function fetchDirtySources(sourceHash, fetchRange, context) {
- return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) {
- return isSourceDirty(eventSource, fetchRange, context);
- }), fetchRange, context);
-}
-function isSourceDirty(eventSource, fetchRange, context) {
- if (!doesSourceNeedRange(eventSource, context)) {
- return !eventSource.latestFetchId;
- }
- else {
- return !context.options.lazyFetching ||
- !eventSource.fetchRange ||
- eventSource.isFetching || // always cancel outdated in-progress fetches
- fetchRange.start < eventSource.fetchRange.start ||
- fetchRange.end > eventSource.fetchRange.end;
- }
-}
-function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, context) {
- var nextSources = {};
- for (var sourceId in prevSources) {
- var source = prevSources[sourceId];
- if (sourceIdHash[sourceId]) {
- nextSources[sourceId] = fetchSource(source, fetchRange, context);
- }
- else {
- nextSources[sourceId] = source;
- }
- }
- return nextSources;
-}
-function fetchSource(eventSource, fetchRange, context) {
- var options = context.options, calendarApi = context.calendarApi;
- var sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
- var fetchId = guid();
- sourceDef.fetch({
- eventSource: eventSource,
- range: fetchRange,
- context: context
- }, function (res) {
- var rawEvents = res.rawEvents;
- if (options.eventSourceSuccess) {
- rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.xhr) || rawEvents;
- }
- if (eventSource.success) {
- rawEvents = eventSource.success.call(calendarApi, rawEvents, res.xhr) || rawEvents;
- }
- context.dispatch({
- type: 'RECEIVE_EVENTS',
- sourceId: eventSource.sourceId,
- fetchId: fetchId,
- fetchRange: fetchRange,
- rawEvents: rawEvents
- });
- }, function (error) {
- console.warn(error.message, error);
- if (options.eventSourceFailure) {
- options.eventSourceFailure.call(calendarApi, error);
- }
- if (eventSource.failure) {
- eventSource.failure(error);
- }
- context.dispatch({
- type: 'RECEIVE_EVENT_ERROR',
- sourceId: eventSource.sourceId,
- fetchId: fetchId,
- fetchRange: fetchRange,
- error: error
- });
- });
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, eventSource), { isFetching: true, latestFetchId: fetchId });
-}
-function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
- var _a;
- var eventSource = sourceHash[sourceId];
- if (eventSource && // not already removed
- fetchId === eventSource.latestFetchId) {
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, sourceHash), (_a = {}, _a[sourceId] = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, eventSource), { isFetching: false, fetchRange: fetchRange // also serves as a marker that at least one fetch has completed
- }), _a));
- }
- return sourceHash;
-}
-function excludeStaticSources(eventSources, context) {
- return filterHash(eventSources, function (eventSource) {
- return doesSourceNeedRange(eventSource, context);
- });
-}
-function parseInitialSources(rawOptions, context) {
- var refiners = buildEventSourceRefiners(context);
- var rawSources = [].concat(rawOptions.eventSources || []);
- var sources = []; // parsed
- if (rawOptions.initialEvents) {
- rawSources.unshift(rawOptions.initialEvents);
- }
- if (rawOptions.events) {
- rawSources.unshift(rawOptions.events);
- }
- for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
- var rawSource = rawSources_1[_i];
- var source = parseEventSource(rawSource, context, refiners);
- if (source) {
- sources.push(source);
- }
- }
- return sources;
-}
-function doesSourceNeedRange(eventSource, context) {
- var defs = context.pluginHooks.eventSourceDefs;
- return !defs[eventSource.sourceDefId].ignoreRange;
-}
-
-function reduceDateSelection(currentSelection, action) {
- switch (action.type) {
- case 'UNSELECT_DATES':
- return null;
- case 'SELECT_DATES':
- return action.selection;
- default:
- return currentSelection;
- }
-}
-
-function reduceSelectedEvent(currentInstanceId, action) {
- switch (action.type) {
- case 'UNSELECT_EVENT':
- return '';
- case 'SELECT_EVENT':
- return action.eventInstanceId;
- default:
- return currentInstanceId;
- }
-}
-
-function reduceEventDrag(currentDrag, action) {
- var newDrag;
- switch (action.type) {
- case 'UNSET_EVENT_DRAG':
- return null;
- case 'SET_EVENT_DRAG':
- newDrag = action.state;
- return {
- affectedEvents: newDrag.affectedEvents,
- mutatedEvents: newDrag.mutatedEvents,
- isEvent: newDrag.isEvent
- };
- default:
- return currentDrag;
- }
-}
-
-function reduceEventResize(currentResize, action) {
- var newResize;
- switch (action.type) {
- case 'UNSET_EVENT_RESIZE':
- return null;
- case 'SET_EVENT_RESIZE':
- newResize = action.state;
- return {
- affectedEvents: newResize.affectedEvents,
- mutatedEvents: newResize.mutatedEvents,
- isEvent: newResize.isEvent
- };
- default:
- return currentResize;
- }
-}
-
-function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
- var viewsWithButtons = [];
- var headerToolbar = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
- var footerToolbar = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
- return { headerToolbar: headerToolbar, footerToolbar: footerToolbar, viewsWithButtons: viewsWithButtons };
-}
-function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons // dump side effects
-) {
- return mapHash(sectionStrHash, function (sectionStr) { return parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons); });
-}
-/*
-BAD: querying icons and text here. should be done at render time
-*/
-function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons // dump side effects
-) {
- var isRtl = calendarOptions.direction === 'rtl';
- var calendarCustomButtons = calendarOptions.customButtons || {};
- var calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};
- var calendarButtonText = calendarOptions.buttonText || {};
- var sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];
- return sectionSubstrs.map(function (buttonGroupStr) {
- return buttonGroupStr.split(',').map(function (buttonName) {
- if (buttonName === 'title') {
- return { buttonName: buttonName };
- }
- else {
- var customButtonProps_1;
- var viewSpec = void 0;
- var buttonClick = void 0;
- var buttonIcon = void 0; // only one of these will be set
- var buttonText = void 0; // "
- if ((customButtonProps_1 = calendarCustomButtons[buttonName])) {
- buttonClick = function (ev) {
- if (customButtonProps_1.click) {
- customButtonProps_1.click.call(ev.target, ev); // TODO: correct to use `target`?
- }
- };
- (buttonIcon = theme.getCustomButtonIconClass(customButtonProps_1)) ||
- (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
- (buttonText = customButtonProps_1.text);
- }
- else if ((viewSpec = viewSpecs[buttonName])) {
- viewsWithButtons.push(buttonName);
- buttonClick = function () {
- calendarApi.changeView(buttonName);
- };
- (buttonText = viewSpec.buttonTextOverride) ||
- (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
- (buttonText = viewSpec.buttonTextDefault);
- }
- else if (calendarApi[buttonName]) { // a calendarApi method
- buttonClick = function () {
- calendarApi[buttonName]();
- };
- (buttonText = calendarButtonTextOverrides[buttonName]) ||
- (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
- (buttonText = calendarButtonText[buttonName]);
- // ^ everything else is considered default
- }
- return { buttonName: buttonName, buttonClick: buttonClick, buttonIcon: buttonIcon, buttonText: buttonText };
- }
- });
- });
-}
-
-var eventSourceDef = {
- ignoreRange: true,
- parseMeta: function (refined) {
- if (Array.isArray(refined.events)) {
- return refined.events;
- }
- return null;
- },
- fetch: function (arg, success) {
- success({
- rawEvents: arg.eventSource.meta
- });
- }
-};
-var arrayEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef]
-});
-
-var eventSourceDef$1 = {
- parseMeta: function (refined) {
- if (typeof refined.events === 'function') {
- return refined.events;
- }
- return null;
- },
- fetch: function (arg, success, failure) {
- var dateEnv = arg.context.dateEnv;
- var func = arg.eventSource.meta;
- unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), function (rawEvents) {
- success({ rawEvents: rawEvents }); // needs an object response
- }, failure // send errorObj directly to failure callback
- );
- }
-};
-var funcEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef$1]
-});
-
-function requestJson(method, url, params, successCallback, failureCallback) {
- method = method.toUpperCase();
- var body = null;
- if (method === 'GET') {
- url = injectQueryStringParams(url, params);
- }
- else {
- body = encodeParams(params);
- }
- var xhr = new XMLHttpRequest();
- xhr.open(method, url, true);
- if (method !== 'GET') {
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- }
- xhr.onload = function () {
- if (xhr.status >= 200 && xhr.status < 400) {
- var parsed = false;
- var res = void 0;
- try {
- res = JSON.parse(xhr.responseText);
- parsed = true;
- }
- catch (err) {
- // will handle parsed=false
- }
- if (parsed) {
- successCallback(res, xhr);
- }
- else {
- failureCallback('Failure parsing JSON', xhr);
- }
- }
- else {
- failureCallback('Request failed', xhr);
- }
- };
- xhr.onerror = function () {
- failureCallback('Request failed', xhr);
- };
- xhr.send(body);
-}
-function injectQueryStringParams(url, params) {
- return url +
- (url.indexOf('?') === -1 ? '?' : '&') +
- encodeParams(params);
-}
-function encodeParams(params) {
- var parts = [];
- for (var key in params) {
- parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));
- }
- return parts.join('&');
-}
-
-var JSON_FEED_EVENT_SOURCE_REFINERS = {
- method: String,
- extraParams: identity,
- startParam: String,
- endParam: String,
- timeZoneParam: String
-};
-
-var eventSourceDef$2 = {
- parseMeta: function (refined) {
- if (refined.url) {
- return {
- url: refined.url,
- method: (refined.method || 'GET').toUpperCase(),
- extraParams: refined.extraParams,
- startParam: refined.startParam,
- endParam: refined.endParam,
- timeZoneParam: refined.timeZoneParam
- };
- }
- return null;
- },
- fetch: function (arg, success, failure) {
- var meta = arg.eventSource.meta;
- var requestParams = buildRequestParams(meta, arg.range, arg.context);
- requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) {
- success({ rawEvents: rawEvents, xhr: xhr });
- }, function (errorMessage, xhr) {
- failure({ message: errorMessage, xhr: xhr });
- });
- }
-};
-var jsonFeedEventSourcePlugin = createPlugin({
- eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
- eventSourceDefs: [eventSourceDef$2]
-});
-function buildRequestParams(meta, range, context) {
- var dateEnv = context.dateEnv, options = context.options;
- var startParam;
- var endParam;
- var timeZoneParam;
- var customRequestParams;
- var params = {};
- startParam = meta.startParam;
- if (startParam == null) {
- startParam = options.startParam;
- }
- endParam = meta.endParam;
- if (endParam == null) {
- endParam = options.endParam;
- }
- timeZoneParam = meta.timeZoneParam;
- if (timeZoneParam == null) {
- timeZoneParam = options.timeZoneParam;
- }
- // retrieve any outbound GET/POST data from the options
- if (typeof meta.extraParams === 'function') {
- // supplied as a function that returns a key/value object
- customRequestParams = meta.extraParams();
- }
- else {
- // probably supplied as a straight key/value object
- customRequestParams = meta.extraParams || {};
- }
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(params, customRequestParams);
- params[startParam] = dateEnv.formatIso(range.start);
- params[endParam] = dateEnv.formatIso(range.end);
- if (dateEnv.timeZone !== 'local') {
- params[timeZoneParam] = dateEnv.timeZone;
- }
- return params;
-}
-
-var SIMPLE_RECURRING_REFINERS = {
- daysOfWeek: identity,
- startTime: createDuration,
- endTime: createDuration,
- duration: createDuration,
- startRecur: identity,
- endRecur: identity
-};
-
-var recurring = {
- parse: function (refined, dateEnv) {
- if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {
- var recurringData = {
- daysOfWeek: refined.daysOfWeek || null,
- startTime: refined.startTime || null,
- endTime: refined.endTime || null,
- startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,
- endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null
- };
- var duration = void 0;
- if (refined.duration) {
- duration = refined.duration;
- }
- if (!duration && refined.startTime && refined.endTime) {
- duration = subtractDurations(refined.endTime, refined.startTime);
- }
- return {
- allDayGuess: Boolean(!refined.startTime && !refined.endTime),
- duration: duration,
- typeData: recurringData // doesn't need endTime anymore but oh well
- };
- }
- return null;
- },
- expand: function (typeData, framingRange, dateEnv) {
- var clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
- if (clippedFramingRange) {
- return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
- }
- else {
- return [];
- }
- }
-};
-var simpleRecurringEventsPlugin = createPlugin({
- recurringTypes: [recurring],
- eventRefiners: SIMPLE_RECURRING_REFINERS
-});
-function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
- var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
- var dayMarker = startOfDay(framingRange.start);
- var endMarker = framingRange.end;
- var instanceStarts = [];
- while (dayMarker < endMarker) {
- var instanceStart
- // if everyday, or this particular day-of-week
- = void 0;
- // if everyday, or this particular day-of-week
- if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
- if (startTime) {
- instanceStart = dateEnv.add(dayMarker, startTime);
- }
- else {
- instanceStart = dayMarker;
- }
- instanceStarts.push(instanceStart);
- }
- dayMarker = addDays(dayMarker, 1);
- }
- return instanceStarts;
-}
-
-var changeHandlerPlugin = createPlugin({
- optionChangeHandlers: {
- events: function (events, context) {
- handleEventSources([events], context);
- },
- eventSources: handleEventSources
- }
-});
-/*
-BUG: if `event` was supplied, all previously-given `eventSources` will be wiped out
-*/
-function handleEventSources(inputs, context) {
- var unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);
- var newInputs = [];
- for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
- var input = inputs_1[_i];
- var inputFound = false;
- for (var i = 0; i < unfoundSources.length; i++) {
- if (unfoundSources[i]._raw === input) {
- unfoundSources.splice(i, 1); // delete
- inputFound = true;
- break;
- }
- }
- if (!inputFound) {
- newInputs.push(input);
- }
- }
- for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) {
- var unfoundSource = unfoundSources_1[_a];
- context.dispatch({
- type: 'REMOVE_EVENT_SOURCE',
- sourceId: unfoundSource.sourceId
- });
- }
- for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) {
- var newInput = newInputs_1[_b];
- context.calendarApi.addEventSource(newInput);
- }
-}
-
-function handleDateProfile(dateProfile, context) {
- context.emitter.trigger('datesSet', Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
-}
-
-function handleEventStore(eventStore, context) {
- var emitter = context.emitter;
- if (emitter.hasHandlers('eventsSet')) {
- emitter.trigger('eventsSet', buildEventApis(eventStore, context));
- }
-}
-
-/*
-this array is exposed on the root namespace so that UMD plugins can add to it.
-see the rollup-bundles script.
-*/
-var globalPlugins = [
- arrayEventSourcePlugin,
- funcEventSourcePlugin,
- jsonFeedEventSourcePlugin,
- simpleRecurringEventsPlugin,
- changeHandlerPlugin,
- createPlugin({
- contentTypeHandlers: {
- html: function () { return injectHtml; },
- domNodes: function () { return injectDomNodes; }
- },
- propSetHandlers: {
- dateProfile: handleDateProfile,
- eventStore: handleEventStore
- }
- })
-];
-
-var DelayedRunner = /** @class */ (function () {
- function DelayedRunner(drainedOption) {
- this.drainedOption = drainedOption;
- this.isRunning = false;
- this.isDirty = false;
- this.pauseDepths = {};
- this.timeoutId = 0;
- }
- DelayedRunner.prototype.request = function (delay) {
- this.isDirty = true;
- if (!this.isPaused()) {
- this.clearTimeout();
- if (delay == null) {
- this.tryDrain();
- }
- else {
- this.timeoutId = setTimeout(// NOT OPTIMAL! TODO: look at debounce
- this.tryDrain.bind(this), delay);
- }
- }
- };
- DelayedRunner.prototype.pause = function (scope) {
- if (scope === void 0) { scope = ''; }
- var pauseDepths = this.pauseDepths;
- pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;
- this.clearTimeout();
- };
- DelayedRunner.prototype.resume = function (scope, force) {
- if (scope === void 0) { scope = ''; }
- var pauseDepths = this.pauseDepths;
- if (scope in pauseDepths) {
- if (force) {
- delete pauseDepths[scope];
- }
- else {
- var depth = --pauseDepths[scope];
- if (depth <= 0) {
- delete pauseDepths[scope];
- }
- }
- this.tryDrain();
- }
- };
- DelayedRunner.prototype.isPaused = function () {
- return Object.keys(this.pauseDepths).length;
- };
- DelayedRunner.prototype.tryDrain = function () {
- if (!this.isRunning && !this.isPaused()) {
- this.isRunning = true;
- while (this.isDirty) {
- this.isDirty = false;
- this.drained(); // might set isDirty to true again
- }
- this.isRunning = false;
- }
- };
- DelayedRunner.prototype.clear = function () {
- this.clearTimeout();
- this.isDirty = false;
- this.pauseDepths = {};
- };
- DelayedRunner.prototype.clearTimeout = function () {
- if (this.timeoutId) {
- clearTimeout(this.timeoutId);
- this.timeoutId = 0;
- }
- };
- DelayedRunner.prototype.drained = function () {
- if (this.drainedOption) {
- this.drainedOption();
- }
- };
- return DelayedRunner;
-}());
-var TaskRunner = /** @class */ (function () {
- function TaskRunner(runTaskOption, drainedOption) {
- this.runTaskOption = runTaskOption;
- this.drainedOption = drainedOption;
- this.queue = [];
- this.delayedRunner = new DelayedRunner(this.drain.bind(this));
- }
- TaskRunner.prototype.request = function (task, delay) {
- this.queue.push(task);
- this.delayedRunner.request(delay);
- };
- TaskRunner.prototype.pause = function (scope) {
- this.delayedRunner.pause(scope);
- };
- TaskRunner.prototype.resume = function (scope, force) {
- this.delayedRunner.resume(scope, force);
- };
- TaskRunner.prototype.drain = function () {
- var queue = this.queue;
- while (queue.length) {
- var completedTasks = [];
- var task = void 0;
- while ((task = queue.shift())) {
- this.runTask(task);
- completedTasks.push(task);
- }
- this.drained(completedTasks);
- } // keep going, in case new tasks were added in the drained handler
- };
- TaskRunner.prototype.runTask = function (task) {
- if (this.runTaskOption) {
- this.runTaskOption(task);
- }
- };
- TaskRunner.prototype.drained = function (completedTasks) {
- if (this.drainedOption) {
- this.drainedOption(completedTasks);
- }
- };
- return TaskRunner;
-}());
-
-// Computes what the title at the top of the calendarApi should be for this view
-function buildTitle(dateProfile, viewOptions, dateEnv) {
- var range;
- // for views that span a large unit of time, show the proper interval, ignoring stray days before and after
- if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {
- range = dateProfile.currentRange;
- }
- else { // for day units or smaller, use the actual day range
- range = dateProfile.activeRange;
- }
- return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {
- isEndExclusive: dateProfile.isRangeAllDay,
- defaultSeparator: viewOptions.titleRangeSeparator
- });
-}
-// Generates the format string that should be used to generate the title for the current date range.
-// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.
-function buildTitleFormat(dateProfile) {
- var currentRangeUnit = dateProfile.currentRangeUnit;
- if (currentRangeUnit === 'year') {
- return { year: 'numeric' };
- }
- else if (currentRangeUnit === 'month') {
- return { year: 'numeric', month: 'long' }; // like "September 2014"
- }
- else {
- var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
- if (days !== null && days > 1) {
- // multi-day range. shorter, like "Sep 9 - 10 2014"
- return { year: 'numeric', month: 'short', day: 'numeric' };
- }
- else {
- // one day. longer, like "September 9 2014"
- return { year: 'numeric', month: 'long', day: 'numeric' };
- }
- }
-}
-
-// in future refactor, do the redux-style function(state=initial) for initial-state
-// also, whatever is happening in constructor, have it happen in action queue too
-var CalendarDataManager = /** @class */ (function () {
- function CalendarDataManager(props) {
- var _this = this;
- this.computeOptionsData = memoize(this._computeOptionsData);
- this.computeCurrentViewData = memoize(this._computeCurrentViewData);
- this.organizeRawLocales = memoize(organizeRawLocales);
- this.buildLocale = memoize(buildLocale);
- this.buildPluginHooks = buildBuildPluginHooks();
- this.buildDateEnv = memoize(buildDateEnv$1);
- this.buildTheme = memoize(buildTheme);
- this.parseToolbars = memoize(parseToolbars);
- this.buildViewSpecs = memoize(buildViewSpecs);
- this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);
- this.buildViewApi = memoize(buildViewApi);
- this.buildViewUiProps = memoizeObjArg(buildViewUiProps);
- this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);
- this.buildEventUiBases = memoize(buildEventUiBases);
- this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);
- this.buildTitle = memoize(buildTitle);
- this.emitter = new Emitter();
- this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));
- this.currentCalendarOptionsInput = {};
- this.currentCalendarOptionsRefined = {};
- this.currentViewOptionsInput = {};
- this.currentViewOptionsRefined = {};
- this.currentCalendarOptionsRefiners = {};
- this.getCurrentData = function () {
- return _this.data;
- };
- this.dispatch = function (action) {
- _this.actionRunner.request(action); // protects against recursive calls to _handleAction
- };
- this.props = props;
- this.actionRunner.pause();
- var dynamicOptionOverrides = {};
- var optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
- var currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;
- var currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
- // wire things up
- // TODO: not DRY
- props.calendarApi.currentDataManager = this;
- this.emitter.setThisContext(props.calendarApi);
- this.emitter.setOptions(currentViewData.options);
- var currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);
- var dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
- if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {
- currentDate = dateProfile.currentRange.start;
- }
- var calendarContext = {
- dateEnv: optionsData.dateEnv,
- options: optionsData.calendarOptions,
- pluginHooks: optionsData.pluginHooks,
- calendarApi: props.calendarApi,
- dispatch: this.dispatch,
- emitter: this.emitter,
- getCurrentData: this.getCurrentData
- };
- // needs to be after setThisContext
- for (var _i = 0, _a = optionsData.pluginHooks.contextInit; _i < _a.length; _i++) {
- var callback = _a[_i];
- callback(calendarContext);
- }
- // NOT DRY
- var eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
- var initialState = {
- dynamicOptionOverrides: dynamicOptionOverrides,
- currentViewType: currentViewType,
- currentDate: currentDate,
- dateProfile: dateProfile,
- businessHours: this.parseContextBusinessHours(calendarContext),
- eventSources: eventSources,
- eventUiBases: {},
- loadingLevel: computeEventSourceLoadingLevel(eventSources),
- eventStore: createEmptyEventStore(),
- renderableEventStore: createEmptyEventStore(),
- dateSelection: null,
- eventSelection: '',
- eventDrag: null,
- eventResize: null,
- selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig
- };
- var contextAndState = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, calendarContext), initialState);
- for (var _b = 0, _c = optionsData.pluginHooks.reducers; _b < _c.length; _b++) {
- var reducer = _c[_b];
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(initialState, reducer(null, null, contextAndState));
- }
- if (initialState.loadingLevel) {
- this.emitter.trigger('loading', true); // NOT DRY
- }
- this.state = initialState;
- this.updateData();
- this.actionRunner.resume();
- }
- CalendarDataManager.prototype.resetOptions = function (optionOverrides, append) {
- var props = this.props;
- props.optionOverrides = append
- ? Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, props.optionOverrides), optionOverrides) : optionOverrides;
- this.actionRunner.request({
- type: 'NOTHING'
- });
- };
- CalendarDataManager.prototype._handleAction = function (action) {
- var _a = this, props = _a.props, state = _a.state, emitter = _a.emitter;
- var dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);
- var optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
- var currentViewType = reduceViewType(state.currentViewType, action);
- var currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
- // wire things up
- // TODO: not DRY
- props.calendarApi.currentDataManager = this;
- emitter.setThisContext(props.calendarApi);
- emitter.setOptions(currentViewData.options);
- var calendarContext = {
- dateEnv: optionsData.dateEnv,
- options: optionsData.calendarOptions,
- pluginHooks: optionsData.pluginHooks,
- calendarApi: props.calendarApi,
- dispatch: this.dispatch,
- emitter: emitter,
- getCurrentData: this.getCurrentData
- };
- var currentDate = state.currentDate;
- var dateProfile = state.dateProfile;
- if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack
- dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
- }
- currentDate = reduceCurrentDate(currentDate, action);
- dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
- if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {
- currentDate = dateProfile.currentRange.start;
- }
- var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
- var eventSourceLoadingLevel = computeEventSourceLoadingLevel(eventSources);
- var eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
- var renderableEventStore = (eventSourceLoadingLevel && !currentViewData.options.progressiveEventRendering) ?
- (state.renderableEventStore || eventStore) : // try from previous state
- eventStore;
- var _b = this.buildViewUiProps(calendarContext), eventUiSingleBase = _b.eventUiSingleBase, selectionConfig = _b.selectionConfig; // will memoize obj
- var eventUiBySource = this.buildEventUiBySource(eventSources);
- var eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
- var prevLoadingLevel = state.loadingLevel || 0;
- var loadingLevel = eventSourceLoadingLevel;
- var newState = {
- dynamicOptionOverrides: dynamicOptionOverrides,
- currentViewType: currentViewType,
- currentDate: currentDate,
- dateProfile: dateProfile,
- eventSources: eventSources,
- eventStore: eventStore,
- renderableEventStore: renderableEventStore,
- selectionConfig: selectionConfig,
- eventUiBases: eventUiBases,
- loadingLevel: loadingLevel,
- businessHours: this.parseContextBusinessHours(calendarContext),
- dateSelection: reduceDateSelection(state.dateSelection, action),
- eventSelection: reduceSelectedEvent(state.eventSelection, action),
- eventDrag: reduceEventDrag(state.eventDrag, action),
- eventResize: reduceEventResize(state.eventResize, action)
- };
- var contextAndState = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, calendarContext), newState);
- for (var _i = 0, _c = optionsData.pluginHooks.reducers; _i < _c.length; _i++) {
- var reducer = _c[_i];
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value
- }
- // TODO: use propSetHandlers in plugin system
- if (!prevLoadingLevel && loadingLevel) {
- emitter.trigger('loading', true);
- }
- else if (prevLoadingLevel && !loadingLevel) {
- emitter.trigger('loading', false);
- }
- this.state = newState;
- if (props.onAction) {
- props.onAction(action);
- }
- };
- CalendarDataManager.prototype.updateData = function () {
- var _a = this, props = _a.props, state = _a.state;
- var oldData = this.data;
- var optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);
- var currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);
- var data = this.data = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);
- var changeHandlers = optionsData.pluginHooks.optionChangeHandlers;
- var oldCalendarOptions = oldData && oldData.calendarOptions;
- var newCalendarOptions = optionsData.calendarOptions;
- if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {
- if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
- // hack
- state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
- state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
- }
- for (var optionName in changeHandlers) {
- if (oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {
- changeHandlers[optionName](newCalendarOptions[optionName], data);
- }
- }
- }
- if (props.onData) {
- props.onData(data);
- }
- };
- CalendarDataManager.prototype._computeOptionsData = function (optionOverrides, dynamicOptionOverrides, calendarApi) {
- // TODO: blacklist options that are handled by optionChangeHandlers
- var _a = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides), refinedOptions = _a.refinedOptions, pluginHooks = _a.pluginHooks, localeDefaults = _a.localeDefaults, availableLocaleData = _a.availableLocaleData, extra = _a.extra;
- warnUnknownOptions(extra);
- var dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);
- var viewSpecs = this.buildViewSpecs(pluginHooks.views, optionOverrides, dynamicOptionOverrides, localeDefaults);
- var theme = this.buildTheme(refinedOptions, pluginHooks);
- var toolbarConfig = this.parseToolbars(refinedOptions, optionOverrides, theme, viewSpecs, calendarApi);
- return {
- calendarOptions: refinedOptions,
- pluginHooks: pluginHooks,
- dateEnv: dateEnv,
- viewSpecs: viewSpecs,
- theme: theme,
- toolbarConfig: toolbarConfig,
- localeDefaults: localeDefaults,
- availableRawLocales: availableLocaleData.map
- };
- };
- // always called from behind a memoizer
- CalendarDataManager.prototype.processRawCalendarOptions = function (optionOverrides, dynamicOptionOverrides) {
- var _a = mergeRawOptions([
- BASE_OPTION_DEFAULTS,
- optionOverrides,
- dynamicOptionOverrides
- ]), locales = _a.locales, locale = _a.locale;
- var availableLocaleData = this.organizeRawLocales(locales);
- var availableRawLocales = availableLocaleData.map;
- var localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
- var pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
- var refiners = this.currentCalendarOptionsRefiners = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
- var extra = {};
- var raw = mergeRawOptions([
- BASE_OPTION_DEFAULTS,
- localeDefaults,
- optionOverrides,
- dynamicOptionOverrides
- ]);
- var refined = {};
- var currentRaw = this.currentCalendarOptionsInput;
- var currentRefined = this.currentCalendarOptionsRefined;
- var anyChanges = false;
- for (var optionName in raw) {
- if (optionName !== 'plugins') { // because plugins is special-cased
- if (raw[optionName] === currentRaw[optionName] ||
- (COMPLEX_OPTION_COMPARATORS[optionName] && (optionName in currentRaw) && COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))) {
- refined[optionName] = currentRefined[optionName];
- }
- else if (refiners[optionName]) {
- refined[optionName] = refiners[optionName](raw[optionName]);
- anyChanges = true;
- }
- else {
- extra[optionName] = currentRaw[optionName];
- }
- }
- }
- if (anyChanges) {
- this.currentCalendarOptionsInput = raw;
- this.currentCalendarOptionsRefined = refined;
- }
- return {
- rawOptions: this.currentCalendarOptionsInput,
- refinedOptions: this.currentCalendarOptionsRefined,
- pluginHooks: pluginHooks,
- availableLocaleData: availableLocaleData,
- localeDefaults: localeDefaults,
- extra: extra
- };
- };
- CalendarDataManager.prototype._computeCurrentViewData = function (viewType, optionsData, optionOverrides, dynamicOptionOverrides) {
- var viewSpec = optionsData.viewSpecs[viewType];
- if (!viewSpec) {
- throw new Error("viewType \"" + viewType + "\" is not available. Please make sure you've loaded all neccessary plugins");
- }
- var _a = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides), refinedOptions = _a.refinedOptions, extra = _a.extra;
- warnUnknownOptions(extra);
- var dateProfileGenerator = this.buildDateProfileGenerator({
- dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,
- duration: viewSpec.duration,
- durationUnit: viewSpec.durationUnit,
- usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,
- dateEnv: optionsData.dateEnv,
- calendarApi: this.props.calendarApi,
- slotMinTime: refinedOptions.slotMinTime,
- slotMaxTime: refinedOptions.slotMaxTime,
- showNonCurrentDates: refinedOptions.showNonCurrentDates,
- dayCount: refinedOptions.dayCount,
- dateAlignment: refinedOptions.dateAlignment,
- dateIncrement: refinedOptions.dateIncrement,
- hiddenDays: refinedOptions.hiddenDays,
- weekends: refinedOptions.weekends,
- nowInput: refinedOptions.now,
- validRangeInput: refinedOptions.validRange,
- visibleRangeInput: refinedOptions.visibleRange,
- monthMode: refinedOptions.monthMode,
- fixedWeekCount: refinedOptions.fixedWeekCount
- });
- var viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);
- return { viewSpec: viewSpec, options: refinedOptions, dateProfileGenerator: dateProfileGenerator, viewApi: viewApi };
- };
- CalendarDataManager.prototype.processRawViewOptions = function (viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {
- var raw = mergeRawOptions([
- BASE_OPTION_DEFAULTS,
- viewSpec.optionDefaults,
- localeDefaults,
- optionOverrides,
- viewSpec.optionOverrides,
- dynamicOptionOverrides
- ]);
- var refiners = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
- var refined = {};
- var currentRaw = this.currentViewOptionsInput;
- var currentRefined = this.currentViewOptionsRefined;
- var anyChanges = false;
- var extra = {};
- for (var optionName in raw) {
- if (raw[optionName] === currentRaw[optionName]) {
- refined[optionName] = currentRefined[optionName];
- }
- else {
- if (raw[optionName] === this.currentCalendarOptionsInput[optionName]) {
- if (optionName in this.currentCalendarOptionsRefined) { // might be an "extra" prop
- refined[optionName] = this.currentCalendarOptionsRefined[optionName];
- }
- }
- else if (refiners[optionName]) {
- refined[optionName] = refiners[optionName](raw[optionName]);
- }
- else {
- extra[optionName] = raw[optionName];
- }
- anyChanges = true;
- }
- }
- if (anyChanges) {
- this.currentViewOptionsInput = raw;
- this.currentViewOptionsRefined = refined;
- }
- return {
- rawOptions: this.currentViewOptionsInput,
- refinedOptions: this.currentViewOptionsRefined,
- extra: extra
- };
- };
- return CalendarDataManager;
-}());
-function buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
- var locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
- return new DateEnv({
- calendarSystem: 'gregory',
- timeZone: timeZone,
- namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,
- locale: locale,
- weekNumberCalculation: weekNumberCalculation,
- firstDay: firstDay,
- weekText: weekText,
- cmdFormatter: pluginHooks.cmdFormatter,
- defaultSeparator: defaultSeparator
- });
-}
-function buildTheme(options, pluginHooks) {
- var ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;
- return new ThemeClass(options);
-}
-function buildDateProfileGenerator(props) {
- var DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;
- return new DateProfileGeneratorClass(props);
-}
-function buildViewApi(type, getCurrentData, dateEnv) {
- return new ViewApi(type, getCurrentData, dateEnv);
-}
-function buildEventUiBySource(eventSources) {
- return mapHash(eventSources, function (eventSource) {
- return eventSource.ui;
- });
-}
-function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
- var eventUiBases = { '': eventUiSingleBase };
- for (var defId in eventDefs) {
- var def = eventDefs[defId];
- if (def.sourceId && eventUiBySource[def.sourceId]) {
- eventUiBases[defId] = eventUiBySource[def.sourceId];
- }
- }
- return eventUiBases;
-}
-function buildViewUiProps(calendarContext) {
- var options = calendarContext.options;
- return {
- eventUiSingleBase: createEventUi({
- display: options.eventDisplay,
- editable: options.editable,
- startEditable: options.eventStartEditable,
- durationEditable: options.eventDurationEditable,
- constraint: options.eventConstraint,
- overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,
- allow: options.eventAllow,
- backgroundColor: options.eventBackgroundColor,
- borderColor: options.eventBorderColor,
- textColor: options.eventTextColor,
- color: options.eventColor
- // classNames: options.eventClassNames // render hook will handle this
- }, calendarContext),
- selectionConfig: createEventUi({
- constraint: options.selectConstraint,
- overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,
- allow: options.selectAllow
- }, calendarContext)
- };
-}
-function parseContextBusinessHours(calendarContext) {
- return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
-}
-function warnUnknownOptions(options, viewName) {
- for (var optionName in options) {
- console.warn("Unknown option '" + optionName + "'" +
- (viewName ? " for view '" + viewName + "'" : ''));
- }
-}
-
-// TODO: move this to react plugin?
-var CalendarDataProvider = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(CalendarDataProvider, _super);
- function CalendarDataProvider(props) {
- var _this = _super.call(this, props) || this;
- _this.handleData = function (data) {
- if (!_this.dataManager) { // still within initial run, before assignment in constructor
- // eslint-disable-next-line react/no-direct-mutation-state
- _this.state = data; // can't use setState yet
- }
- else {
- _this.setState(data);
- }
- };
- _this.dataManager = new CalendarDataManager({
- optionOverrides: props.optionOverrides,
- calendarApi: props.calendarApi,
- onData: _this.handleData
- });
- return _this;
- }
- CalendarDataProvider.prototype.render = function () {
- return this.props.children(this.state);
- };
- CalendarDataProvider.prototype.componentDidUpdate = function (prevProps) {
- var newOptionOverrides = this.props.optionOverrides;
- if (newOptionOverrides !== prevProps.optionOverrides) { // prevent recursive handleData
- this.dataManager.resetOptions(newOptionOverrides);
- }
- };
- return CalendarDataProvider;
-}(_vdom__WEBPACK_IMPORTED_MODULE_2__["Component"]));
-
-// HELPERS
-/*
-if nextDayThreshold is specified, slicing is done in an all-day fashion.
-you can get nextDayThreshold from context.nextDayThreshold
-*/
-function sliceEvents(props, allDay) {
- return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
-}
-
-var NamedTimeZoneImpl = /** @class */ (function () {
- function NamedTimeZoneImpl(timeZoneName) {
- this.timeZoneName = timeZoneName;
- }
- return NamedTimeZoneImpl;
-}());
-
-var Interaction = /** @class */ (function () {
- function Interaction(settings) {
- this.component = settings.component;
- }
- Interaction.prototype.destroy = function () {
- };
- return Interaction;
-}());
-function parseInteractionSettings(component, input) {
- return {
- component: component,
- el: input.el,
- useEventCenter: input.useEventCenter != null ? input.useEventCenter : true
- };
-}
-function interactionSettingsToStore(settings) {
- var _a;
- return _a = {},
- _a[settings.component.uid] = settings,
- _a;
-}
-// global state
-var interactionSettingsStore = {};
-
-/*
-An abstraction for a dragging interaction originating on an event.
-Does higher-level things than PointerDragger, such as possibly:
-- a "mirror" that moves with the pointer
-- a minimum number of pixels or other criteria for a true drag to begin
-
-subclasses must emit:
-- pointerdown
-- dragstart
-- dragmove
-- pointerup
-- dragend
-*/
-var ElementDragging = /** @class */ (function () {
- function ElementDragging(el, selector) {
- this.emitter = new Emitter();
- }
- ElementDragging.prototype.destroy = function () {
- };
- ElementDragging.prototype.setMirrorIsVisible = function (bool) {
- // optional if subclass doesn't want to support a mirror
- };
- ElementDragging.prototype.setMirrorNeedsRevert = function (bool) {
- // optional if subclass doesn't want to support a mirror
- };
- ElementDragging.prototype.setAutoScrollEnabled = function (bool) {
- // optional
- };
- return ElementDragging;
-}());
-
-// TODO: get rid of this in favor of options system,
-// tho it's really easy to access this globally rather than pass thru options.
-var config = {};
-
-/*
-Information about what will happen when an external element is dragged-and-dropped
-onto a calendar. Contains information for creating an event.
-*/
-var DRAG_META_REFINERS = {
- startTime: createDuration,
- duration: createDuration,
- create: Boolean,
- sourceId: String
-};
-function parseDragMeta(raw) {
- var _a = refineProps(raw, DRAG_META_REFINERS), refined = _a.refined, extra = _a.extra;
- return {
- startTime: refined.startTime || null,
- duration: refined.duration || null,
- create: refined.create != null ? refined.create : true,
- sourceId: refined.sourceId,
- leftoverProps: extra
- };
-}
-
-var Toolbar = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(Toolbar, _super);
- function Toolbar() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Toolbar.prototype.render = function () {
- var _a = this.props, model = _a.model, extraClassName = _a.extraClassName;
- var forceLtr = false;
- var startContent, endContent;
- var centerContent = model.center;
- if (model.left) {
- forceLtr = true;
- startContent = model.left;
- }
- else {
- startContent = model.start;
- }
- if (model.right) {
- forceLtr = true;
- endContent = model.right;
- }
- else {
- endContent = model.end;
- }
- var classNames = [
- extraClassName || '',
- 'fc-toolbar',
- forceLtr ? 'fc-toolbar-ltr' : ''
- ];
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: classNames.join(' ') },
- this.renderSection('start', startContent || []),
- this.renderSection('center', centerContent || []),
- this.renderSection('end', endContent || [])));
- };
- Toolbar.prototype.renderSection = function (key, widgetGroups) {
- var props = this.props;
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
- };
- return Toolbar;
-}(BaseComponent));
-var ToolbarSection = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(ToolbarSection, _super);
- function ToolbarSection() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ToolbarSection.prototype.render = function () {
- var _this = this;
- var children = this.props.widgetGroups.map(function (widgetGroup) { return _this.renderWidgetGroup(widgetGroup); });
- return _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])(['div', { className: 'fc-toolbar-chunk' }], children));
- };
- ToolbarSection.prototype.renderWidgetGroup = function (widgetGroup) {
- var props = this.props;
- var theme = this.context.theme;
- var children = [];
- var isOnlyButtons = true;
- for (var _i = 0, widgetGroup_1 = widgetGroup; _i < widgetGroup_1.length; _i++) {
- var widget = widgetGroup_1[_i];
- var buttonName = widget.buttonName, buttonClick = widget.buttonClick, buttonText = widget.buttonText, buttonIcon = widget.buttonIcon;
- if (buttonName === 'title') {
- isOnlyButtons = false;
- children.push(Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("h2", { className: 'fc-toolbar-title' }, props.title));
- }
- else {
- var ariaAttrs = buttonIcon ? { 'aria-label': buttonName } : {};
- var buttonClasses = ['fc-' + buttonName + '-button', theme.getClass('button')];
- if (buttonName === props.activeButton) {
- buttonClasses.push(theme.getClass('buttonActive'));
- }
- var isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
- (!props.isPrevEnabled && buttonName === 'prev') ||
- (!props.isNextEnabled && buttonName === 'next');
- children.push(Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("button", Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ disabled: isDisabled, className: buttonClasses.join(' '), onClick: buttonClick, type: 'button' }, ariaAttrs), buttonText || (buttonIcon ? Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("span", { className: buttonIcon }) : '')));
- }
- }
- if (children.length > 1) {
- var groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';
- return _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])(['div', { className: groupClassName }], children));
- }
- else {
- return children[0];
- }
- };
- return ToolbarSection;
-}(BaseComponent));
-
-// TODO: do function component?
-var ViewContainer = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(ViewContainer, _super);
- function ViewContainer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- ViewContainer.prototype.render = function () {
- var props = this.props;
- var aspectRatio = props.aspectRatio;
- var classNames = [
- 'fc-view-harness',
- (aspectRatio || props.liquid || props.height)
- ? 'fc-view-harness-active' // harness controls the height
- : 'fc-view-harness-passive' // let the view do the height
- ];
- var height = '';
- var paddingBottom = '';
- if (aspectRatio) {
- paddingBottom = (1 / aspectRatio) * 100 + '%';
- }
- else {
- height = props.height || '';
- }
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { ref: props.elRef, onClick: props.onClick, className: classNames.join(' '), style: { height: height, paddingBottom: paddingBottom } }, props.children));
- };
- return ViewContainer;
-}(BaseComponent));
-
-/*
-Detects when the user clicks on an event within a DateComponent
-*/
-var EventClicking = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(EventClicking, _super);
- function EventClicking(settings) {
- var _this = _super.call(this, settings) || this;
- _this.handleSegClick = function (ev, segEl) {
- var component = _this.component;
- var context = component.context;
- var seg = getElSeg(segEl);
- if (seg && // might be the surrounding the more link
- component.isValidSegDownEl(ev.target)) {
- // our way to simulate a link click for elements that can't be
tags
- // grab before trigger fired in case trigger trashes DOM thru rerendering
- var hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');
- var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
- context.emitter.trigger('eventClick', {
- el: segEl,
- event: new EventApi(component.context, seg.eventRange.def, seg.eventRange.instance),
- jsEvent: ev,
- view: context.viewApi
- });
- if (url && !ev.defaultPrevented) {
- window.location.href = url;
- }
- }
- };
- _this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events
- _this.handleSegClick);
- return _this;
- }
- return EventClicking;
-}(Interaction));
-
-/*
-Triggers events and adds/removes core classNames when the user's pointer
-enters/leaves event-elements of a component.
-*/
-var EventHovering = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(EventHovering, _super);
- function EventHovering(settings) {
- var _this = _super.call(this, settings) || this;
- // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it
- _this.handleEventElRemove = function (el) {
- if (el === _this.currentSegEl) {
- _this.handleSegLeave(null, _this.currentSegEl);
- }
- };
- _this.handleSegEnter = function (ev, segEl) {
- if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
- _this.currentSegEl = segEl;
- _this.triggerEvent('eventMouseEnter', ev, segEl);
- }
- };
- _this.handleSegLeave = function (ev, segEl) {
- if (_this.currentSegEl) {
- _this.currentSegEl = null;
- _this.triggerEvent('eventMouseLeave', ev, segEl);
- }
- };
- _this.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events
- _this.handleSegEnter, _this.handleSegLeave);
- return _this;
- }
- EventHovering.prototype.destroy = function () {
- this.removeHoverListeners();
- };
- EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {
- var component = this.component;
- var context = component.context;
- var seg = getElSeg(segEl);
- if (!ev || component.isValidSegDownEl(ev.target)) {
- context.emitter.trigger(publicEvName, {
- el: segEl,
- event: new EventApi(context, seg.eventRange.def, seg.eventRange.instance),
- jsEvent: ev,
- view: context.viewApi
- });
- }
- };
- return EventHovering;
-}(Interaction));
-
-var CalendarContent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(CalendarContent, _super);
- function CalendarContent() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildViewContext = memoize(buildViewContext);
- _this.buildViewPropTransformers = memoize(buildViewPropTransformers);
- _this.buildToolbarProps = memoize(buildToolbarProps);
- _this.handleNavLinkClick = buildDelegationHandler('a[data-navlink]', _this._handleNavLinkClick.bind(_this));
- _this.headerRef = Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createRef"])();
- _this.footerRef = Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createRef"])();
- _this.interactionsStore = {};
- // Component Registration
- // -----------------------------------------------------------------------------------------------------------------
- _this.registerInteractiveComponent = function (component, settingsInput) {
- var settings = parseInteractionSettings(component, settingsInput);
- var DEFAULT_INTERACTIONS = [
- EventClicking,
- EventHovering
- ];
- var interactionClasses = DEFAULT_INTERACTIONS.concat(_this.props.pluginHooks.componentInteractions);
- var interactions = interactionClasses.map(function (interactionClass) {
- return new interactionClass(settings);
- });
- _this.interactionsStore[component.uid] = interactions;
- interactionSettingsStore[component.uid] = settings;
- };
- _this.unregisterInteractiveComponent = function (component) {
- for (var _i = 0, _a = _this.interactionsStore[component.uid]; _i < _a.length; _i++) {
- var listener = _a[_i];
- listener.destroy();
- }
- delete _this.interactionsStore[component.uid];
- delete interactionSettingsStore[component.uid];
- };
- // Resizing
- // -----------------------------------------------------------------------------------------------------------------
- _this.resizeRunner = new DelayedRunner(function () {
- _this.props.emitter.trigger('_resize', true); // should window resizes be considered "forced" ?
- _this.props.emitter.trigger('windowResize', { view: _this.props.viewApi });
- });
- _this.handleWindowResize = function (ev) {
- var options = _this.props.options;
- if (options.handleWindowResize &&
- ev.target === window // avoid jqui events
- ) {
- _this.resizeRunner.request(options.windowResizeDelay);
- }
- };
- return _this;
- }
- /*
- renders INSIDE of an outer div
- */
- CalendarContent.prototype.render = function () {
- var props = this.props;
- var toolbarConfig = props.toolbarConfig, options = props.options;
- var toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????
- props.viewTitle);
- var viewVGrow = false;
- var viewHeight = '';
- var viewAspectRatio;
- if (props.isHeightAuto || props.forPrint) {
- viewHeight = '';
- }
- else if (options.height != null) {
- viewVGrow = true;
- }
- else if (options.contentHeight != null) {
- viewHeight = options.contentHeight;
- }
- else {
- viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall
- }
- var viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ViewContextType.Provider, { value: viewContext },
- toolbarConfig.headerToolbar &&
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(Toolbar, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ ref: this.headerRef, extraClassName: 'fc-header-toolbar', model: toolbarConfig.headerToolbar }, toolbarProps)),
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, onClick: this.handleNavLinkClick },
- this.renderView(props),
- this.buildAppendContent()),
- toolbarConfig.footerToolbar &&
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(Toolbar, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ ref: this.footerRef, extraClassName: 'fc-footer-toolbar', model: toolbarConfig.footerToolbar }, toolbarProps))));
- };
- CalendarContent.prototype.componentDidMount = function () {
- var props = this.props;
- this.calendarInteractions = props.pluginHooks.calendarInteractions
- .map(function (calendarInteractionClass) {
- return new calendarInteractionClass(props);
- });
- window.addEventListener('resize', this.handleWindowResize);
- var propSetHandlers = props.pluginHooks.propSetHandlers;
- for (var propName in propSetHandlers) {
- propSetHandlers[propName](props[propName], props);
- }
- };
- CalendarContent.prototype.componentDidUpdate = function (prevProps) {
- var props = this.props;
- var propSetHandlers = props.pluginHooks.propSetHandlers;
- for (var propName in propSetHandlers) {
- if (props[propName] !== prevProps[propName]) {
- propSetHandlers[propName](props[propName], props);
- }
- }
- };
- CalendarContent.prototype.componentWillUnmount = function () {
- window.removeEventListener('resize', this.handleWindowResize);
- this.resizeRunner.clear();
- for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) {
- var interaction = _a[_i];
- interaction.destroy();
- }
- this.props.emitter.trigger('_unmount');
- };
- CalendarContent.prototype._handleNavLinkClick = function (ev, anchorEl) {
- var _a = this.props, dateEnv = _a.dateEnv, options = _a.options, calendarApi = _a.calendarApi;
- var navLinkOptions = anchorEl.getAttribute('data-navlink');
- navLinkOptions = navLinkOptions ? JSON.parse(navLinkOptions) : {};
- var dateMarker = dateEnv.createMarker(navLinkOptions.date);
- var viewType = navLinkOptions.type;
- var customAction = viewType === 'day' ? options.navLinkDayClick :
- viewType === 'week' ? options.navLinkWeekClick : null;
- if (typeof customAction === 'function') {
- customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
- }
- else {
- if (typeof customAction === 'string') {
- viewType = customAction;
- }
- calendarApi.zoomTo(dateMarker, viewType);
- }
- };
- CalendarContent.prototype.buildAppendContent = function () {
- var props = this.props;
- var children = props.pluginHooks.viewContainerAppends.map(function (buildAppendContent) { return buildAppendContent(props); });
- return _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([_vdom__WEBPACK_IMPORTED_MODULE_2__["Fragment"], {}], children));
- };
- CalendarContent.prototype.renderView = function (props) {
- var pluginHooks = props.pluginHooks;
- var viewSpec = props.viewSpec;
- var viewProps = {
- dateProfile: props.dateProfile,
- businessHours: props.businessHours,
- eventStore: props.renderableEventStore,
- eventUiBases: props.eventUiBases,
- dateSelection: props.dateSelection,
- eventSelection: props.eventSelection,
- eventDrag: props.eventDrag,
- eventResize: props.eventResize,
- isHeightAuto: props.isHeightAuto,
- forPrint: props.forPrint
- };
- var transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);
- for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
- var transformer = transformers_1[_i];
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(viewProps, transformer.transform(viewProps, props));
- }
- var ViewComponent = viewSpec.component;
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ViewComponent, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({}, viewProps)));
- };
- return CalendarContent;
-}(PureComponent));
-function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {
- // don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid
- var todayInfo = dateProfileGenerator.build(now, undefined, false); // TODO: need `undefined` or else INFINITE LOOP for some reason
- var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);
- var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);
- return {
- title: title,
- activeButton: viewSpec.type,
- isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
- isPrevEnabled: prevInfo.isValid,
- isNextEnabled: nextInfo.isValid
- };
-}
-// Plugin
-// -----------------------------------------------------------------------------------------------------------------
-function buildViewPropTransformers(theClasses) {
- return theClasses.map(function (theClass) {
- return new theClass();
- });
-}
-
-var canVGrowWithinCell;
-function getCanVGrowWithinCell() {
- if (canVGrowWithinCell == null) {
- canVGrowWithinCell = computeCanVGrowWithinCell();
- }
- return canVGrowWithinCell;
-}
-function computeCanVGrowWithinCell() {
- // TODO: abstraction for creating these temporary detection-based els
- var el = document.createElement('div');
- el.style.position = 'absolute'; // for not interfering with current layout
- el.style.top = '0';
- el.style.left = '0';
- el.innerHTML = ' ';
- document.body.appendChild(el);
- var div = el.querySelector('div');
- var possible = div.offsetHeight > 0;
- document.body.removeChild(el);
- return possible;
-}
-
-var CalendarRoot = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(CalendarRoot, _super);
- function CalendarRoot() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.state = {
- forPrint: false
- };
- _this.handleBeforePrint = function () {
- _this.setState({ forPrint: true });
- };
- _this.handleAfterPrint = function () {
- _this.setState({ forPrint: false });
- };
- return _this;
- }
- CalendarRoot.prototype.render = function () {
- var props = this.props;
- var options = props.options;
- var forPrint = this.state.forPrint;
- var isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto';
- var height = (!isHeightAuto && options.height != null) ? options.height : '';
- var classNames = [
- 'fc',
- forPrint ? 'fc-media-print' : 'fc-media-screen',
- 'fc-direction-' + options.direction,
- props.theme.getClass('root')
- ];
- if (!getCanVGrowWithinCell()) {
- classNames.push('fc-liquid-hack');
- }
- return props.children(classNames, height, isHeightAuto, forPrint);
- };
- CalendarRoot.prototype.componentDidMount = function () {
- var emitter = this.props.emitter;
- emitter.on('_beforeprint', this.handleBeforePrint);
- emitter.on('_afterprint', this.handleAfterPrint);
- };
- CalendarRoot.prototype.componentWillUnmount = function () {
- var emitter = this.props.emitter;
- emitter.off('_beforeprint', this.handleBeforePrint);
- emitter.off('_afterprint', this.handleAfterPrint);
- };
- return CalendarRoot;
-}(BaseComponent));
-
-// Computes a default column header formatting string if `colFormat` is not explicitly defined
-function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
- // if more than one week row, or if there are a lot of columns with not much space,
- // put just the day numbers will be in each cell
- if (!datesRepDistinctDays || dayCnt > 10) {
- return createFormatter({ weekday: 'short' }); // "Sat"
- }
- else if (dayCnt > 1) {
- return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }); // "Sat 11/12"
- }
- else {
- return createFormatter({ weekday: 'long' }); // "Saturday"
- }
-}
-
-var CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no
-var TableDateCell = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(TableDateCell, _super);
- function TableDateCell() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TableDateCell.prototype.render = function () {
- var _a = this.context, dateEnv = _a.dateEnv, options = _a.options, theme = _a.theme, viewApi = _a.viewApi;
- var props = this.props;
- var date = props.date, dateProfile = props.dateProfile;
- var dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);
- var classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));
- var text = dateEnv.format(date, props.dayHeaderFormat);
- // if colCnt is 1, we are already in a day-view and don't need a navlink
- var navLinkAttrs = (options.navLinks && !dayMeta.isDisabled && props.colCnt > 1)
- ? { 'data-navlink': buildNavLinkData(date), tabIndex: 0 }
- : {};
- var hookProps = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ date: dateEnv.toDate(date), view: viewApi }, props.extraHookProps), { text: text }), dayMeta);
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("th", Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-date": !dayMeta.isDisabled ? formatDayString(date) : undefined, colSpan: props.colSpan }, props.extraDataAttrs),
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-scrollgrid-sync-inner' }, !dayMeta.isDisabled &&
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("a", Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ ref: innerElRef, className: [
- 'fc-col-header-cell-cushion',
- props.isSticky ? 'fc-sticky' : ''
- ].join(' ') }, navLinkAttrs), innerContent)))); }));
- };
- return TableDateCell;
-}(BaseComponent));
-var TableDowCell = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(TableDowCell, _super);
- function TableDowCell() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TableDowCell.prototype.render = function () {
- var props = this.props;
- var _a = this.context, dateEnv = _a.dateEnv, theme = _a.theme, viewApi = _a.viewApi, options = _a.options;
- var date = addDays(new Date(259200000), props.dow); // start with Sun, 04 Jan 1970 00:00:00 GMT
- var dateMeta = {
- dow: props.dow,
- isDisabled: false,
- isFuture: false,
- isPast: false,
- isToday: false,
- isOther: false
- };
- var classNames = [CLASS_NAME].concat(getDayClassNames(dateMeta, theme), props.extraClassNames || []);
- var text = dateEnv.format(date, props.dayHeaderFormat);
- var hookProps = Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ // TODO: make this public?
- date: date }, dateMeta), { view: viewApi }), props.extraHookProps), { text: text });
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("th", Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ ref: rootElRef, className: classNames.concat(customClassNames).join(' '), colSpan: props.colSpan }, props.extraDataAttrs),
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-scrollgrid-sync-inner' },
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("a", { className: [
- 'fc-col-header-cell-cushion',
- props.isSticky ? 'fc-sticky' : ''
- ].join(' '), ref: innerElRef }, innerContent)))); }));
- };
- return TableDowCell;
-}(BaseComponent));
-function renderInner(hookProps) {
- return hookProps.text;
-}
-
-var NowTimer = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(NowTimer, _super);
- function NowTimer(props, context) {
- var _this = _super.call(this, props, context) || this;
- _this.initialNowDate = getNow(context.options.now, context.dateEnv);
- _this.initialNowQueriedMs = new Date().valueOf();
- _this.state = _this.computeTiming().currentState;
- return _this;
- }
- NowTimer.prototype.render = function () {
- var _a = this, props = _a.props, state = _a.state;
- return props.children(state.nowDate, state.todayRange);
- };
- NowTimer.prototype.componentDidMount = function () {
- this.setTimeout();
- };
- NowTimer.prototype.componentDidUpdate = function (prevProps) {
- if (prevProps.unit !== this.props.unit) {
- this.clearTimeout();
- this.setTimeout();
- }
- };
- NowTimer.prototype.componentWillUnmount = function () {
- this.clearTimeout();
- };
- NowTimer.prototype.computeTiming = function () {
- var _a = this, props = _a.props, context = _a.context;
- var unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs);
- var currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);
- var nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));
- var waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();
- return {
- currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },
- nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },
- waitMs: waitMs
- };
- };
- NowTimer.prototype.setTimeout = function () {
- var _this = this;
- var _a = this.computeTiming(), nextState = _a.nextState, waitMs = _a.waitMs;
- this.timeoutId = setTimeout(function () {
- _this.setState(nextState, function () {
- _this.setTimeout();
- });
- }, waitMs);
- };
- NowTimer.prototype.clearTimeout = function () {
- if (this.timeoutId) {
- clearTimeout(this.timeoutId);
- }
- };
- NowTimer.contextType = ViewContextType;
- return NowTimer;
-}(_vdom__WEBPACK_IMPORTED_MODULE_2__["Component"]));
-function buildDayRange(date) {
- var start = startOfDay(date);
- var end = addDays(start, 1);
- return { start: start, end: end };
-}
-
-var DayHeader = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(DayHeader, _super);
- function DayHeader() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.createDayHeaderFormatter = memoize(createDayHeaderFormatter);
- return _this;
- }
- DayHeader.prototype.render = function () {
- var context = this.context;
- var _a = this.props, dates = _a.dates, dateProfile = _a.dateProfile, datesRepDistinctDays = _a.datesRepDistinctDays, renderIntro = _a.renderIntro;
- var dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(NowTimer, { unit: 'day' }, function (nowDate, todayRange) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("tr", null,
- renderIntro && renderIntro(),
- dates.map(function (date) { return (datesRepDistinctDays ?
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(TableDateCell, { key: date.toISOString(), date: date, dateProfile: dateProfile, todayRange: todayRange, colCnt: dates.length, dayHeaderFormat: dayHeaderFormat }) :
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat: dayHeaderFormat })); }))); }));
- };
- return DayHeader;
-}(BaseComponent));
-function createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {
- return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);
-}
-
-var DaySeriesModel = /** @class */ (function () {
- function DaySeriesModel(range, dateProfileGenerator) {
- var date = range.start;
- var end = range.end;
- var indices = [];
- var dates = [];
- var dayIndex = -1;
- while (date < end) { // loop each day from start to end
- if (dateProfileGenerator.isHiddenDay(date)) {
- indices.push(dayIndex + 0.5); // mark that it's between indices
- }
- else {
- dayIndex++;
- indices.push(dayIndex);
- dates.push(date);
- }
- date = addDays(date, 1);
- }
- this.dates = dates;
- this.indices = indices;
- this.cnt = dates.length;
- }
- DaySeriesModel.prototype.sliceRange = function (range) {
- var firstIndex = this.getDateDayIndex(range.start); // inclusive first index
- var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index
- var clippedFirstIndex = Math.max(0, firstIndex);
- var clippedLastIndex = Math.min(this.cnt - 1, lastIndex);
- // deal with in-between indices
- clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell
- clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell
- if (clippedFirstIndex <= clippedLastIndex) {
- return {
- firstIndex: clippedFirstIndex,
- lastIndex: clippedLastIndex,
- isStart: firstIndex === clippedFirstIndex,
- isEnd: lastIndex === clippedLastIndex
- };
- }
- else {
- return null;
- }
- };
- // Given a date, returns its chronolocial cell-index from the first cell of the grid.
- // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.
- // If before the first offset, returns a negative number.
- // If after the last offset, returns an offset past the last cell offset.
- // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.
- DaySeriesModel.prototype.getDateDayIndex = function (date) {
- var indices = this.indices;
- var dayOffset = Math.floor(diffDays(this.dates[0], date));
- if (dayOffset < 0) {
- return indices[0] - 1;
- }
- else if (dayOffset >= indices.length) {
- return indices[indices.length - 1] + 1;
- }
- else {
- return indices[dayOffset];
- }
- };
- return DaySeriesModel;
-}());
-
-var DayTableModel = /** @class */ (function () {
- function DayTableModel(daySeries, breakOnWeeks) {
- var dates = daySeries.dates;
- var daysPerRow;
- var firstDay;
- var rowCnt;
- if (breakOnWeeks) {
- // count columns until the day-of-week repeats
- firstDay = dates[0].getUTCDay();
- for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) {
- if (dates[daysPerRow].getUTCDay() === firstDay) {
- break;
- }
- }
- rowCnt = Math.ceil(dates.length / daysPerRow);
- }
- else {
- rowCnt = 1;
- daysPerRow = dates.length;
- }
- this.rowCnt = rowCnt;
- this.colCnt = daysPerRow;
- this.daySeries = daySeries;
- this.cells = this.buildCells();
- this.headerDates = this.buildHeaderDates();
- }
- DayTableModel.prototype.buildCells = function () {
- var rows = [];
- for (var row = 0; row < this.rowCnt; row++) {
- var cells = [];
- for (var col = 0; col < this.colCnt; col++) {
- cells.push(this.buildCell(row, col));
- }
- rows.push(cells);
- }
- return rows;
- };
- DayTableModel.prototype.buildCell = function (row, col) {
- var date = this.daySeries.dates[row * this.colCnt + col];
- return {
- key: date.toISOString(),
- date: date
- };
- };
- DayTableModel.prototype.buildHeaderDates = function () {
- var dates = [];
- for (var col = 0; col < this.colCnt; col++) {
- dates.push(this.cells[0][col].date);
- }
- return dates;
- };
- DayTableModel.prototype.sliceRange = function (range) {
- var colCnt = this.colCnt;
- var seriesSeg = this.daySeries.sliceRange(range);
- var segs = [];
- if (seriesSeg) {
- var firstIndex = seriesSeg.firstIndex, lastIndex = seriesSeg.lastIndex;
- var index = firstIndex;
- while (index <= lastIndex) {
- var row = Math.floor(index / colCnt);
- var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);
- segs.push({
- row: row,
- firstCol: index % colCnt,
- lastCol: (nextIndex - 1) % colCnt,
- isStart: seriesSeg.isStart && index === firstIndex,
- isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex
- });
- index = nextIndex;
- }
- }
- return segs;
- };
- return DayTableModel;
-}());
-
-var Slicer = /** @class */ (function () {
- function Slicer() {
- this.sliceBusinessHours = memoize(this._sliceBusinessHours);
- this.sliceDateSelection = memoize(this._sliceDateSpan);
- this.sliceEventStore = memoize(this._sliceEventStore);
- this.sliceEventDrag = memoize(this._sliceInteraction);
- this.sliceEventResize = memoize(this._sliceInteraction);
- this.forceDayIfListItem = false; // hack
- }
- Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, context) {
- var extraArgs = [];
- for (var _i = 4; _i < arguments.length; _i++) {
- extraArgs[_i - 4] = arguments[_i];
- }
- var eventUiBases = props.eventUiBases;
- var eventSegs = this.sliceEventStore.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([props.eventStore, eventUiBases, dateProfile, nextDayThreshold], extraArgs));
- return {
- dateSelectionSegs: this.sliceDateSelection.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([props.dateSelection, eventUiBases, context], extraArgs)),
- businessHourSegs: this.sliceBusinessHours.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([props.businessHours, dateProfile, nextDayThreshold, context], extraArgs)),
- fgEventSegs: eventSegs.fg,
- bgEventSegs: eventSegs.bg,
- eventDrag: this.sliceEventDrag.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([props.eventDrag, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
- eventResize: this.sliceEventResize.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([props.eventResize, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
- eventSelection: props.eventSelection
- }; // TODO: give interactionSegs?
- };
- Slicer.prototype.sliceNowDate = function (// does not memoize
- date, context) {
- var extraArgs = [];
- for (var _i = 2; _i < arguments.length; _i++) {
- extraArgs[_i - 2] = arguments[_i];
- }
- return this._sliceDateSpan.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([{ range: { start: date, end: addMs(date, 1) }, allDay: false },
- {},
- context], extraArgs));
- };
- Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, context) {
- var extraArgs = [];
- for (var _i = 4; _i < arguments.length; _i++) {
- extraArgs[_i - 4] = arguments[_i];
- }
- if (!businessHours) {
- return [];
- }
- return this._sliceEventStore.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context),
- {},
- dateProfile,
- nextDayThreshold], extraArgs)).bg;
- };
- Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold) {
- var extraArgs = [];
- for (var _i = 4; _i < arguments.length; _i++) {
- extraArgs[_i - 4] = arguments[_i];
- }
- if (eventStore) {
- var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
- return {
- bg: this.sliceEventRanges(rangeRes.bg, extraArgs),
- fg: this.sliceEventRanges(rangeRes.fg, extraArgs)
- };
- }
- else {
- return { bg: [], fg: [] };
- }
- };
- Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold) {
- var extraArgs = [];
- for (var _i = 4; _i < arguments.length; _i++) {
- extraArgs[_i - 4] = arguments[_i];
- }
- if (!interaction) {
- return null;
- }
- var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
- return {
- segs: this.sliceEventRanges(rangeRes.fg, extraArgs),
- affectedInstances: interaction.affectedEvents.instances,
- isEvent: interaction.isEvent
- };
- };
- Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, context) {
- var extraArgs = [];
- for (var _i = 3; _i < arguments.length; _i++) {
- extraArgs[_i - 3] = arguments[_i];
- }
- if (!dateSpan) {
- return [];
- }
- var eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
- var segs = this.sliceRange.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([dateSpan.range], extraArgs));
- for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
- var seg = segs_1[_a];
- seg.eventRange = eventRange;
- }
- return segs;
- };
- /*
- "complete" seg means it has component and eventRange
- */
- Slicer.prototype.sliceEventRanges = function (eventRanges, extraArgs) {
- var segs = [];
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
- var eventRange = eventRanges_1[_i];
- segs.push.apply(segs, this.sliceEventRange(eventRange, extraArgs));
- }
- return segs;
- };
- /*
- "complete" seg means it has component and eventRange
- */
- Slicer.prototype.sliceEventRange = function (eventRange, extraArgs) {
- var dateRange = eventRange.range;
- // hack to make multi-day events that are being force-displayed as list-items to take up only one day
- if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
- dateRange = {
- start: dateRange.start,
- end: addDays(dateRange.start, 1)
- };
- }
- var segs = this.sliceRange.apply(this, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])([dateRange], extraArgs));
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- seg.eventRange = eventRange;
- seg.isStart = eventRange.isStart && seg.isStart;
- seg.isEnd = eventRange.isEnd && seg.isEnd;
- }
- return segs;
- };
- return Slicer;
-}());
-/*
-for incorporating slotMinTime/slotMaxTime if appropriate
-TODO: should be part of DateProfile!
-TimelineDateProfile already does this btw
-*/
-function computeActiveRange(dateProfile, isComponentAllDay) {
- var range = dateProfile.activeRange;
- if (isComponentAllDay) {
- return range;
- }
- return {
- start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
- end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5) // 864e5 = ms in a day
- };
-}
-
-var VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;
-var Scroller = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(Scroller, _super);
- function Scroller() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.handleEl = function (el) {
- _this.el = el;
- setRef(_this.props.elRef, el);
- };
- return _this;
- }
- Scroller.prototype.render = function () {
- var props = this.props;
- var liquid = props.liquid, liquidIsAbsolute = props.liquidIsAbsolute;
- var isAbsolute = liquid && liquidIsAbsolute;
- var className = ['fc-scroller'];
- if (liquid) {
- if (liquidIsAbsolute) {
- className.push('fc-scroller-liquid-absolute');
- }
- else {
- className.push('fc-scroller-liquid');
- }
- }
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { ref: this.handleEl, className: className.join(' '), style: {
- overflowX: props.overflowX,
- overflowY: props.overflowY,
- left: (isAbsolute && -(props.overcomeLeft || 0)) || '',
- right: (isAbsolute && -(props.overcomeRight || 0)) || '',
- bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',
- marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',
- marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',
- marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',
- maxHeight: props.maxHeight || ''
- } }, props.children));
- };
- Scroller.prototype.needsXScrolling = function () {
- if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
- return false;
- }
- // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.
- // much more reliable to see if children are taller than the scroller, even tho doesn't account for
- // inner-child margins and absolute positioning
- var el = this.el;
- var realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();
- var children = el.children;
- for (var i = 0; i < children.length; i++) {
- var childEl = children[i];
- if (childEl.getBoundingClientRect().width > realClientWidth) {
- return true;
- }
- }
- return false;
- };
- Scroller.prototype.needsYScrolling = function () {
- if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
- return false;
- }
- // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.
- // much more reliable to see if children are taller than the scroller, even tho doesn't account for
- // inner-child margins and absolute positioning
- var el = this.el;
- var realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();
- var children = el.children;
- for (var i = 0; i < children.length; i++) {
- var childEl = children[i];
- if (childEl.getBoundingClientRect().height > realClientHeight) {
- return true;
- }
- }
- return false;
- };
- Scroller.prototype.getXScrollbarWidth = function () {
- if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
- return 0;
- }
- else {
- return this.el.offsetHeight - this.el.clientHeight; // only works because we guarantee no borders. TODO: add to CSS with important?
- }
- };
- Scroller.prototype.getYScrollbarWidth = function () {
- if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
- return 0;
- }
- else {
- return this.el.offsetWidth - this.el.clientWidth; // only works because we guarantee no borders. TODO: add to CSS with important?
- }
- };
- return Scroller;
-}(BaseComponent));
-
-/*
-TODO: somehow infer OtherArgs from masterCallback?
-TODO: infer RefType from masterCallback if provided
-*/
-var RefMap = /** @class */ (function () {
- function RefMap(masterCallback) {
- var _this = this;
- this.masterCallback = masterCallback;
- this.currentMap = {};
- this.depths = {};
- this.callbackMap = {};
- this.handleValue = function (val, key) {
- var _a = _this, depths = _a.depths, currentMap = _a.currentMap;
- var removed = false;
- var added = false;
- if (val !== null) {
- removed = (key in currentMap); // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore
- currentMap[key] = val;
- depths[key] = (depths[key] || 0) + 1;
- added = true;
- }
- else if (--depths[key] === 0) {
- delete currentMap[key];
- delete _this.callbackMap[key];
- removed = true;
- }
- if (_this.masterCallback) {
- if (removed) {
- _this.masterCallback(null, String(key));
- }
- if (added) {
- _this.masterCallback(val, String(key));
- }
- }
- };
- }
- RefMap.prototype.createRef = function (key) {
- var _this = this;
- var refCallback = this.callbackMap[key];
- if (!refCallback) {
- refCallback = this.callbackMap[key] = function (val) {
- _this.handleValue(val, String(key));
- };
- }
- return refCallback;
- };
- // TODO: check callers that don't care about order. should use getAll instead
- // NOTE: this method has become less valuable now that we are encouraged to map order by some other index
- // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and "collect"
- RefMap.prototype.collect = function (startIndex, endIndex, step) {
- return collectFromHash(this.currentMap, startIndex, endIndex, step);
- };
- RefMap.prototype.getAll = function () {
- return hashValuesToArray(this.currentMap);
- };
- return RefMap;
-}());
-
-function computeShrinkWidth(chunkEls) {
- var shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink');
- var largestWidth = 0;
- for (var _i = 0, shrinkCells_1 = shrinkCells; _i < shrinkCells_1.length; _i++) {
- var shrinkCell = shrinkCells_1[_i];
- largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));
- }
- return Math.ceil(largestWidth); //
elements work best with integers. round up to ensure contents fits
-}
-function getSectionHasLiquidHeight(props, sectionConfig) {
- return props.liquid && sectionConfig.liquid; // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)
-}
-function getAllowYScrolling(props, sectionConfig) {
- return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars
- getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars
-}
-// TODO: ONLY use `arg`. force out internal function to use same API
-function renderChunkContent(sectionConfig, chunkConfig, arg) {
- var expandRows = arg.expandRows;
- var content = typeof chunkConfig.content === 'function' ?
- chunkConfig.content(arg) :
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])('table', {
- className: [
- chunkConfig.tableClassName,
- sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : ''
- ].join(' '),
- style: {
- minWidth: arg.tableMinWidth,
- width: arg.clientWidth,
- height: expandRows ? arg.clientHeight : '' // css `height` on a serves as a min-height
- }
- }, arg.tableColGroupNode, Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])('tbody', {}, typeof chunkConfig.rowContent === 'function' ? chunkConfig.rowContent(arg) : chunkConfig.rowContent));
- return content;
-}
-function isColPropsEqual(cols0, cols1) {
- return isArraysEqual(cols0, cols1, isPropsEqual);
-}
-function renderMicroColGroup(cols, shrinkWidth) {
- var colNodes = [];
- /*
- for ColProps with spans, it would have been great to make a single
- HOWEVER, Chrome was getting messing up distributing the width to / elements with colspans.
- SOLUTION: making individual elements makes Chrome behave.
- */
- for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {
- var colProps = cols_1[_i];
- var span = colProps.span || 1;
- for (var i = 0; i < span; i++) {
- colNodes.push(Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("col", { style: {
- width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),
- minWidth: colProps.minWidth || ''
- } }));
- }
- }
- return _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])(['colgroup', {}], colNodes));
-}
-function sanitizeShrinkWidth(shrinkWidth) {
- /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth
- 4 accounts for 2 2-pixel borders. TODO: better solution? */
- return shrinkWidth == null ? 4 : shrinkWidth;
-}
-function hasShrinkWidth(cols) {
- for (var _i = 0, cols_2 = cols; _i < cols_2.length; _i++) {
- var col = cols_2[_i];
- if (col.width === 'shrink') {
- return true;
- }
- }
- return false;
-}
-function getScrollGridClassNames(liquid, context) {
- var classNames = [
- 'fc-scrollgrid',
- context.theme.getClass('table')
- ];
- if (liquid) {
- classNames.push('fc-scrollgrid-liquid');
- }
- return classNames;
-}
-function getSectionClassNames(sectionConfig, wholeTableVGrow) {
- var classNames = [
- 'fc-scrollgrid-section',
- sectionConfig.className // used?
- ];
- if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {
- classNames.push('fc-scrollgrid-section-liquid');
- }
- if (sectionConfig.isSticky) {
- classNames.push('fc-scrollgrid-section-sticky');
- }
- return classNames;
-}
-function renderScrollShim(arg) {
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-scrollgrid-sticky-shim', style: {
- width: arg.clientWidth,
- minWidth: arg.tableMinWidth
- } }));
-}
-function getStickyHeaderDates(options) {
- var stickyHeaderDates = options.stickyHeaderDates;
- if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {
- stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto';
- }
- return stickyHeaderDates;
-}
-function getStickyFooterScrollbar(options) {
- var stickyFooterScrollbar = options.stickyFooterScrollbar;
- if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {
- stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto';
- }
- return stickyFooterScrollbar;
-}
-
-var SimpleScrollGrid = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(SimpleScrollGrid, _super);
- function SimpleScrollGrid() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.processCols = memoize(function (a) { return a; }, isColPropsEqual); // so we get same `cols` props every time
- _this.renderMicroColGroup = memoize(renderMicroColGroup); // yucky to memoize VNodes, but much more efficient for consumers
- _this.scrollerRefs = new RefMap();
- _this.scrollerElRefs = new RefMap(_this._handleScrollerEl.bind(_this));
- _this.state = {
- shrinkWidth: null,
- forceYScrollbars: false,
- scrollerClientWidths: {},
- scrollerClientHeights: {}
- };
- // TODO: can do a really simple print-view. dont need to join rows
- _this.handleSizing = function () {
- _this.setState(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ shrinkWidth: _this.computeShrinkWidth() }, _this.computeScrollerDims()));
- };
- return _this;
- }
- SimpleScrollGrid.prototype.render = function () {
- var _a = this, props = _a.props, state = _a.state, context = _a.context;
- var sectionConfigs = props.sections || [];
- var cols = this.processCols(props.cols);
- var microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);
- var classNames = getScrollGridClassNames(props.liquid, context);
- // TODO: make DRY
- var configCnt = sectionConfigs.length;
- var configI = 0;
- var currentConfig;
- var headSectionNodes = [];
- var bodySectionNodes = [];
- var footSectionNodes = [];
- while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {
- headSectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
- configI++;
- }
- while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {
- bodySectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
- configI++;
- }
- while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {
- footSectionNodes.push(this.renderSection(currentConfig, configI, microColGroupNode));
- configI++;
- }
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("table", { className: classNames.join(' '), style: { height: props.height } },
- Boolean(headSectionNodes.length) && _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])(['thead', {}], headSectionNodes)),
- Boolean(bodySectionNodes.length) && _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])(['tbody', {}], bodySectionNodes)),
- Boolean(footSectionNodes.length) && _vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__spreadArrays"])(['tfoot', {}], footSectionNodes))));
- };
- SimpleScrollGrid.prototype.renderSection = function (sectionConfig, sectionI, microColGroupNode) {
- if ('outerContent' in sectionConfig) {
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_vdom__WEBPACK_IMPORTED_MODULE_2__["Fragment"], { key: sectionConfig.key }, sectionConfig.outerContent));
- }
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("tr", { key: sectionConfig.key, className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, sectionI, microColGroupNode, sectionConfig.chunk)));
- };
- SimpleScrollGrid.prototype.renderChunkTd = function (sectionConfig, sectionI, microColGroupNode, chunkConfig) {
- if ('outerContent' in chunkConfig) {
- return chunkConfig.outerContent;
- }
- var props = this.props;
- var _a = this.state, forceYScrollbars = _a.forceYScrollbars, scrollerClientWidths = _a.scrollerClientWidths, scrollerClientHeights = _a.scrollerClientHeights;
- var needsYScrolling = getAllowYScrolling(props, sectionConfig); // TODO: do lazily. do in section config?
- var isLiquid = getSectionHasLiquidHeight(props, sectionConfig);
- // for `!props.liquid` - is WHOLE scrollgrid natural height?
- // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars
- var overflowY = !props.liquid ? 'visible' :
- forceYScrollbars ? 'scroll' :
- !needsYScrolling ? 'hidden' :
- 'auto';
- var content = renderChunkContent(sectionConfig, chunkConfig, {
- tableColGroupNode: microColGroupNode,
- tableMinWidth: '',
- clientWidth: scrollerClientWidths[sectionI] !== undefined ? scrollerClientWidths[sectionI] : null,
- clientHeight: scrollerClientHeights[sectionI] !== undefined ? scrollerClientHeights[sectionI] : null,
- expandRows: sectionConfig.expandRows,
- syncRowHeights: false,
- rowSyncHeights: [],
- reportRowHeightChange: function () { }
- });
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("td", { ref: chunkConfig.elRef },
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-scroller-harness' + (isLiquid ? ' fc-scroller-harness-liquid' : '') },
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(Scroller, { ref: this.scrollerRefs.createRef(sectionI), elRef: this.scrollerElRefs.createRef(sectionI), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute: true /* because its within a harness */ }, content))));
- };
- SimpleScrollGrid.prototype._handleScrollerEl = function (scrollerEl, key) {
- var sectionI = parseInt(key, 10);
- var chunkConfig = this.props.sections[sectionI].chunk;
- setRef(chunkConfig.scrollerElRef, scrollerEl);
- };
- SimpleScrollGrid.prototype.componentDidMount = function () {
- this.handleSizing();
- this.context.addResizeHandler(this.handleSizing);
- };
- SimpleScrollGrid.prototype.componentDidUpdate = function () {
- // TODO: need better solution when state contains non-sizing things
- this.handleSizing();
- };
- SimpleScrollGrid.prototype.componentWillUnmount = function () {
- this.context.removeResizeHandler(this.handleSizing);
- };
- SimpleScrollGrid.prototype.computeShrinkWidth = function () {
- return hasShrinkWidth(this.props.cols)
- ? computeShrinkWidth(this.scrollerElRefs.getAll())
- : 0;
- };
- SimpleScrollGrid.prototype.computeScrollerDims = function () {
- var scrollbarWidth = getScrollbarWidths();
- var sectionCnt = this.props.sections.length;
- var _a = this, scrollerRefs = _a.scrollerRefs, scrollerElRefs = _a.scrollerElRefs;
- var forceYScrollbars = false;
- var scrollerClientWidths = {};
- var scrollerClientHeights = {};
- for (var sectionI = 0; sectionI < sectionCnt; sectionI++) { // along edge
- var scroller = scrollerRefs.currentMap[sectionI];
- if (scroller && scroller.needsYScrolling()) {
- forceYScrollbars = true;
- break;
- }
- }
- for (var sectionI = 0; sectionI < sectionCnt; sectionI++) { // along edge
- var scrollerEl = scrollerElRefs.currentMap[sectionI];
- if (scrollerEl) {
- var harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders
- scrollerClientWidths[sectionI] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
- ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future
- : 0));
- scrollerClientHeights[sectionI] = Math.floor(harnessEl.getBoundingClientRect().height // never has horizontal scrollbars
- );
- }
- }
- return { forceYScrollbars: forceYScrollbars, scrollerClientWidths: scrollerClientWidths, scrollerClientHeights: scrollerClientHeights };
- };
- return SimpleScrollGrid;
-}(BaseComponent));
-SimpleScrollGrid.addStateEquality({
- scrollerClientWidths: isPropsEqual,
- scrollerClientHeights: isPropsEqual
-});
-
-var EventRoot = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(EventRoot, _super);
- function EventRoot() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.elRef = Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createRef"])();
- return _this;
- }
- EventRoot.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- var options = context.options;
- var seg = props.seg;
- var eventRange = seg.eventRange;
- var ui = eventRange.ui;
- var hookProps = {
- event: new EventApi(context, eventRange.def, eventRange.instance),
- view: context.viewApi,
- timeText: props.timeText,
- textColor: ui.textColor,
- backgroundColor: ui.backgroundColor,
- borderColor: ui.borderColor,
- isDraggable: !props.disableDragging && computeSegDraggable(seg, context),
- isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),
- isEndResizable: !props.disableResizing && computeSegEndResizable(seg),
- isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),
- isStart: Boolean(seg.isStart),
- isEnd: Boolean(seg.isEnd),
- isPast: Boolean(props.isPast),
- isFuture: Boolean(props.isFuture),
- isToday: Boolean(props.isToday),
- isSelected: Boolean(props.isSelected),
- isDragging: Boolean(props.isDragging),
- isResizing: Boolean(props.isResizing)
- };
- var standardClassNames = getEventClassNames(hookProps).concat(ui.classNames);
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(RenderHook, { hookProps: hookProps, classNames: options.eventClassNames, content: options.eventContent, defaultContent: props.defaultContent, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount, elRef: this.elRef }, function (rootElRef, customClassNames, innerElRef, innerContent) { return props.children(rootElRef, standardClassNames.concat(customClassNames), innerElRef, innerContent, hookProps); }));
- };
- EventRoot.prototype.componentDidMount = function () {
- setElSeg(this.elRef.current, this.props.seg);
- };
- /*
- need to re-assign seg to the element if seg changes, even if the element is the same
- */
- EventRoot.prototype.componentDidUpdate = function (prevProps) {
- var seg = this.props.seg;
- if (seg !== prevProps.seg) {
- setElSeg(this.elRef.current, seg);
- }
- };
- return EventRoot;
-}(BaseComponent));
-
-// should not be a purecomponent
-var StandardEvent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(StandardEvent, _super);
- function StandardEvent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- StandardEvent.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- var seg = props.seg;
- var timeFormat = context.options.eventTimeFormat || props.defaultTimeFormat;
- var timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(EventRoot, { seg: seg, timeText: timeText, disableDragging: props.disableDragging, disableResizing: props.disableResizing, defaultContent: props.defaultContent || renderInnerContent, isDragging: props.isDragging, isResizing: props.isResizing, isDateSelecting: props.isDateSelecting, isSelected: props.isSelected, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("a", Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ className: props.extraClassNames.concat(classNames).join(' '), style: {
- borderColor: hookProps.borderColor,
- backgroundColor: hookProps.backgroundColor
- }, ref: rootElRef }, getSegAnchorAttrs(seg)),
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-main', ref: innerElRef, style: { color: hookProps.textColor } }, innerContent),
- hookProps.isStartResizable &&
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-resizer fc-event-resizer-start' }),
- hookProps.isEndResizable &&
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-resizer fc-event-resizer-end' }))); }));
- };
- return StandardEvent;
-}(BaseComponent));
-function renderInnerContent(innerProps) {
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-main-frame' },
- innerProps.timeText &&
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-time' }, innerProps.timeText),
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-title-container' },
- Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-title fc-sticky' }, innerProps.event.title || Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_vdom__WEBPACK_IMPORTED_MODULE_2__["Fragment"], null, "\u00A0")))));
-}
-function getSegAnchorAttrs(seg) {
- var url = seg.eventRange.def.url;
- return url ? { href: url } : {};
-}
-
-var NowIndicatorRoot = function (props) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ViewContextType.Consumer, null, function (context) {
- var options = context.options;
- var hookProps = {
- isAxis: props.isAxis,
- date: context.dateEnv.toDate(props.date),
- view: context.viewApi
- };
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(RenderHook, { hookProps: hookProps, classNames: options.nowIndicatorClassNames, content: options.nowIndicatorContent, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount }, props.children));
-})); };
-
-var DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
-var DayCellRoot = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(DayCellRoot, _super);
- function DayCellRoot() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.refineHookProps = memoizeObjArg(refineHookProps);
- _this.normalizeClassNames = buildClassNameNormalizer();
- return _this;
- }
- DayCellRoot.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- var options = context.options;
- var hookProps = this.refineHookProps({
- date: props.date,
- dateProfile: props.dateProfile,
- todayRange: props.todayRange,
- showDayNumber: props.showDayNumber,
- extraProps: props.extraHookProps,
- viewApi: context.viewApi,
- dateEnv: context.dateEnv
- });
- var classNames = getDayClassNames(hookProps, context.theme).concat(hookProps.isDisabled
- ? [] // don't use custom classNames if disabled
- : this.normalizeClassNames(options.dayCellClassNames, hookProps));
- var dataAttrs = hookProps.isDisabled ? {} : {
- 'data-date': formatDayString(props.date)
- };
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(MountHook, { hookProps: hookProps, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount, elRef: props.elRef }, function (rootElRef) { return props.children(rootElRef, classNames, dataAttrs, hookProps.isDisabled); }));
- };
- return DayCellRoot;
-}(BaseComponent));
-var DayCellContent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(DayCellContent, _super);
- function DayCellContent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- DayCellContent.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- var options = context.options;
- var hookProps = refineHookProps({
- date: props.date,
- dateProfile: props.dateProfile,
- todayRange: props.todayRange,
- showDayNumber: props.showDayNumber,
- extraProps: props.extraHookProps,
- viewApi: context.viewApi,
- dateEnv: context.dateEnv
- });
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ContentHook, { hookProps: hookProps, content: options.dayCellContent, defaultContent: props.defaultContent }, props.children));
- };
- return DayCellContent;
-}(BaseComponent));
-function refineHookProps(raw) {
- var date = raw.date, dateEnv = raw.dateEnv;
- var dayMeta = getDateMeta(date, raw.todayRange, null, raw.dateProfile);
- return Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { dayNumberText: raw.showDayNumber ? dateEnv.format(date, DAY_NUM_FORMAT) : '' }), raw.extraProps);
-}
-
-function renderFill(fillType) {
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: "fc-" + fillType }));
-}
-var BgEvent = function (props) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(EventRoot, { defaultContent: renderInnerContent$1, seg: props.seg /* uselesss i think */, timeText: '' /* weird */, disableDragging: true, disableResizing: true, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { ref: rootElRef, className: ['fc-bg-event'].concat(classNames).join(' '), style: {
- backgroundColor: hookProps.backgroundColor
- } }, innerContent)); })); };
-function renderInnerContent$1(props) {
- var title = props.event.title;
- return title && (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])("div", { className: 'fc-event-title' }, props.event.title));
-}
-
-var WeekNumberRoot = function (props) { return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(ViewContextType.Consumer, null, function (context) {
- var dateEnv = context.dateEnv, options = context.options;
- var date = props.date;
- var format = options.weekNumberFormat || props.defaultFormat;
- var num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?
- var text = dateEnv.format(date, format);
- var hookProps = { num: num, text: text, date: date };
- return (Object(_vdom__WEBPACK_IMPORTED_MODULE_2__["createElement"])(RenderHook, { hookProps: hookProps, classNames: options.weekNumberClassNames, content: options.weekNumberContent, defaultContent: renderInner$1, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount }, props.children));
-})); };
-function renderInner$1(innerProps) {
- return innerProps.text;
-}
-
-// exports
-// --------------------------------------------------------------------------------------------------
-var version = '<%= version %>'; // important to type it, so .d.ts has generic string
-
-
-//# sourceMappingURL=main.js.map
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/common/node_modules/tslib/tslib.es6.js":
-/*!***************************************************************************!*\
- !*** ./node_modules/@fullcalendar/common/node_modules/tslib/tslib.es6.js ***!
- \***************************************************************************/
-/*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- }
- return __assign.apply(this, arguments);
-}
-
-function __rest(s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
-}
-
-function __decorate(decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-
-function __param(paramIndex, decorator) {
- return function (target, key) { decorator(target, key, paramIndex); }
-}
-
-function __metadata(metadataKey, metadataValue) {
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
-}
-
-function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-}
-
-function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-}
-
-var __createBinding = Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-});
-
-function __exportStar(m, exports) {
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
-}
-
-function __values(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m) return m.call(o);
- if (o && typeof o.length === "number") return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-
-function __read(o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
-}
-
-function __spread() {
- for (var ar = [], i = 0; i < arguments.length; i++)
- ar = ar.concat(__read(arguments[i]));
- return ar;
-}
-
-function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
-};
-
-function __await(v) {
- return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-
-function __asyncGenerator(thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
- function fulfill(value) { resume("next", value); }
- function reject(value) { resume("throw", value); }
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-}
-
-function __asyncDelegator(o) {
- var i, p;
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
-}
-
-function __asyncValues(o) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var m = o[Symbol.asyncIterator], i;
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
-}
-
-function __makeTemplateObject(cooked, raw) {
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
- return cooked;
-};
-
-var __setModuleDefault = Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-};
-
-function __importStar(mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-}
-
-function __importDefault(mod) {
- return (mod && mod.__esModule) ? mod : { default: mod };
-}
-
-function __classPrivateFieldGet(receiver, privateMap) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to get private field on non-instance");
- }
- return privateMap.get(receiver);
-}
-
-function __classPrivateFieldSet(receiver, privateMap, value) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to set private field on non-instance");
- }
- privateMap.set(receiver, value);
- return value;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/common/vdom.js":
-/*!***************************************************!*\
- !*** ./node_modules/@fullcalendar/common/vdom.js ***!
- \***************************************************/
-/*! exports provided: Component, createElement, render, createRef, Fragment, createContext, flushToDom */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return Component; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return createElement; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return createRef; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Fragment", function() { return Fragment; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createContext", function() { return createContext; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "flushToDom", function() { return flushToDom; });
-
-if (typeof FullCalendarVDom === 'undefined') {
- throw new Error('Please import the top-level fullcalendar lib before attempting to import a plugin.');
-}
-var Component = FullCalendarVDom.Component;
-var createElement = FullCalendarVDom.createElement;
-var render = FullCalendarVDom.render;
-var createRef = FullCalendarVDom.createRef;
-var Fragment = FullCalendarVDom.Fragment;
-var createContext = FullCalendarVDom.createContext;
-var flushToDom = FullCalendarVDom.flushToDom;
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/core/main.js":
-/*!*************************************************!*\
- !*** ./node_modules/@fullcalendar/core/main.js ***!
- \*************************************************/
-/*! exports provided: Component, createElement, render, createRef, Fragment, createContext, flushToDom, BASE_OPTION_DEFAULTS, BASE_OPTION_REFINERS, BaseComponent, BgEvent, CalendarApi, CalendarContent, CalendarDataManager, CalendarDataProvider, CalendarRoot, ContentHook, CustomContentRenderContext, DateComponent, DateEnv, DateProfileGenerator, DayCellContent, DayCellRoot, DayHeader, DaySeriesModel, DayTableModel, DelayedRunner, ElementDragging, ElementScrollController, Emitter, EventApi, EventRoot, EventSourceApi, Interaction, MountHook, NamedTimeZoneImpl, NowIndicatorRoot, NowTimer, PositionCache, RefMap, RenderHook, ScrollController, ScrollResponder, Scroller, SimpleScrollGrid, Slicer, Splitter, StandardEvent, TableDateCell, TableDowCell, Theme, ViewApi, ViewContextType, ViewRoot, WeekNumberRoot, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildClassNameNormalizer, buildEventApis, buildEventRangeKey, buildHashFromArray, buildNavLinkData, buildSegCompareObj, buildSegTimeText, collectFromHash, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compareObjs, computeEdges, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeSegDraggable, computeSegEndResizable, computeSegStartResizable, computeShrinkWidth, computeSmallestCellWidth, computeVisibleDayRange, config, constrainPoint, createDuration, createEmptyEventStore, createEventInstance, createEventUi, createFormatter, createPlugin, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findDirectChildren, findElements, flexibleCompare, formatDate, formatDayString, formatIsoTimeString, formatRange, getAllowYScrolling, getClippingParents, getDateMeta, getDayClassNames, getDefaultEventEnd, getElSeg, getEventClassNames, getIsRtlScrollbarOnLeft, getRectCenter, getRelevantEvents, getScrollGridClassNames, getScrollbarWidths, getSectionClassNames, getSectionHasLiquidHeight, getSegMeta, getSlotClassNames, getStickyFooterScrollbar, getStickyHeaderDates, getUnequalProps, globalLocales, globalPlugins, greatestDurationDenominator, guid, hasBgRendering, hasShrinkWidth, htmlToElement, identity, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isColPropsEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, memoize, memoizeArraylike, memoizeHashlike, memoizeObjArg, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseClassNames, parseDragMeta, parseEventDef, parseFieldSpecs, parseMarker, pointInsideRect, preventContextMenu, preventDefault, preventSelection, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineEventDef, refineProps, removeElement, removeExact, renderChunkContent, renderFill, renderMicroColGroup, renderScrollShim, requestJson, sanitizeShrinkWidth, setElSeg, setRef, sliceEventStore, sliceEvents, sortEventSegs, startOfDay, translateRect, triggerDateSelect, unpromisify, version, whenTransitionDone, wholeDivideDurations, Calendar */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Calendar", function() { return Calendar; });
-/* harmony import */ var _vdom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vdom */ "./node_modules/@fullcalendar/core/vdom.js");
-/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tslib */ "./node_modules/@fullcalendar/core/node_modules/tslib/tslib.es6.js");
-/* harmony import */ var _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @fullcalendar/common */ "./node_modules/@fullcalendar/common/main.js");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Component", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Component"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createElement", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createElement"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["render"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createRef", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createRef"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Fragment", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Fragment"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createContext", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createContext"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flushToDom", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["flushToDom"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BASE_OPTION_DEFAULTS", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["BASE_OPTION_DEFAULTS"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BASE_OPTION_REFINERS", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["BASE_OPTION_REFINERS"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BaseComponent", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["BaseComponent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BgEvent", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["BgEvent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CalendarApi", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarApi"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CalendarContent", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarContent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CalendarDataManager", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarDataManager"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CalendarDataProvider", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarDataProvider"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CalendarRoot", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarRoot"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ContentHook", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ContentHook"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CustomContentRenderContext", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CustomContentRenderContext"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DateComponent", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DateComponent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DateEnv", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DateEnv"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DateProfileGenerator", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DateProfileGenerator"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DayCellContent", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DayCellContent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DayCellRoot", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DayCellRoot"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DayHeader", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DayHeader"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DaySeriesModel", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DaySeriesModel"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DayTableModel", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DayTableModel"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DelayedRunner", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DelayedRunner"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ElementDragging", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ElementDragging"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ElementScrollController", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ElementScrollController"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Emitter", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Emitter"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventApi", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["EventApi"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventRoot", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["EventRoot"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EventSourceApi", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["EventSourceApi"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Interaction", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Interaction"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MountHook", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["MountHook"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NamedTimeZoneImpl", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["NamedTimeZoneImpl"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NowIndicatorRoot", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["NowIndicatorRoot"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NowTimer", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["NowTimer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PositionCache", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["PositionCache"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RefMap", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["RefMap"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RenderHook", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["RenderHook"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ScrollController", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ScrollController"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ScrollResponder", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ScrollResponder"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Scroller", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Scroller"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SimpleScrollGrid", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["SimpleScrollGrid"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Slicer", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Slicer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Splitter", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Splitter"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StandardEvent", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["StandardEvent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TableDateCell", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["TableDateCell"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TableDowCell", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["TableDowCell"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Theme", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["Theme"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewApi", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ViewApi"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewContextType", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ViewContextType"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ViewRoot", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["ViewRoot"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WeekNumberRoot", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["WeekNumberRoot"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WindowScrollController", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["WindowScrollController"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addDays", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["addDays"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addDurations", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["addDurations"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addMs", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["addMs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "addWeeks", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["addWeeks"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "allowContextMenu", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["allowContextMenu"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "allowSelection", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["allowSelection"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyMutationToEventStore", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["applyMutationToEventStore"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyStyle", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["applyStyle"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "applyStyleProp", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["applyStyleProp"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asRoughMinutes", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["asRoughMinutes"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asRoughMs", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["asRoughMs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asRoughSeconds", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["asRoughSeconds"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildClassNameNormalizer", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["buildClassNameNormalizer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildEventApis", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["buildEventApis"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildEventRangeKey", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["buildEventRangeKey"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildHashFromArray", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["buildHashFromArray"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildNavLinkData", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["buildNavLinkData"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildSegCompareObj", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["buildSegCompareObj"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildSegTimeText", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["buildSegTimeText"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "collectFromHash", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["collectFromHash"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineEventUis", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["combineEventUis"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "compareByFieldSpec", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["compareByFieldSpec"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "compareByFieldSpecs", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["compareByFieldSpecs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "compareNumbers", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["compareNumbers"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "compareObjs", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["compareObjs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeEdges", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeEdges"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeFallbackHeaderFormat", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeFallbackHeaderFormat"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeHeightAndMargins", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeHeightAndMargins"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeInnerRect", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeInnerRect"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeRect", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeRect"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeSegDraggable", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeSegDraggable"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeSegEndResizable", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeSegEndResizable"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeSegStartResizable", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeSegStartResizable"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeShrinkWidth", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeShrinkWidth"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeSmallestCellWidth", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeSmallestCellWidth"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "computeVisibleDayRange", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["computeVisibleDayRange"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "config", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["config"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "constrainPoint", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["constrainPoint"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createDuration", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createDuration"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createEmptyEventStore", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createEmptyEventStore"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createEventInstance", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createEventInstance"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createEventUi", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createEventUi"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createFormatter", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createFormatter"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createPlugin", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createPlugin"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "diffDates", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["diffDates"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "diffDayAndTime", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["diffDayAndTime"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "diffDays", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["diffDays"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "diffPoints", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["diffPoints"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "diffWeeks", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["diffWeeks"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "diffWholeDays", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["diffWholeDays"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "diffWholeWeeks", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["diffWholeWeeks"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "disableCursor", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["disableCursor"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementClosest", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["elementClosest"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementMatches", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["elementMatches"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "enableCursor", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["enableCursor"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "eventTupleToStore", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["eventTupleToStore"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filterEventStoreDefs", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["filterEventStoreDefs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filterHash", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["filterHash"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findDirectChildren", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["findDirectChildren"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findElements", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["findElements"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flexibleCompare", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["flexibleCompare"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatDate", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["formatDate"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatDayString", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["formatDayString"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatIsoTimeString", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["formatIsoTimeString"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "formatRange", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["formatRange"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getAllowYScrolling", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getAllowYScrolling"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getClippingParents", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getClippingParents"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDateMeta", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getDateMeta"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDayClassNames", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getDayClassNames"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getDefaultEventEnd", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getDefaultEventEnd"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getElSeg", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getElSeg"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getEventClassNames", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getEventClassNames"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getIsRtlScrollbarOnLeft", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getIsRtlScrollbarOnLeft"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getRectCenter", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getRectCenter"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getRelevantEvents", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getRelevantEvents"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getScrollGridClassNames", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getScrollGridClassNames"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getScrollbarWidths", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getScrollbarWidths"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSectionClassNames", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getSectionClassNames"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSectionHasLiquidHeight", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getSectionHasLiquidHeight"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSegMeta", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getSegMeta"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getSlotClassNames", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getSlotClassNames"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getStickyFooterScrollbar", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getStickyFooterScrollbar"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getStickyHeaderDates", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getStickyHeaderDates"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getUnequalProps", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["getUnequalProps"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "globalLocales", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["globalLocales"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "globalPlugins", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["globalPlugins"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "greatestDurationDenominator", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["greatestDurationDenominator"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "guid", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["guid"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasBgRendering", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["hasBgRendering"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hasShrinkWidth", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["hasShrinkWidth"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "htmlToElement", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["htmlToElement"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["identity"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interactionSettingsStore", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["interactionSettingsStore"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interactionSettingsToStore", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["interactionSettingsToStore"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "intersectRanges", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["intersectRanges"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "intersectRects", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["intersectRects"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isArraysEqual", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isArraysEqual"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isColPropsEqual", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isColPropsEqual"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isDateSpansEqual", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isDateSpansEqual"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isInt", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isInt"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isInteractionValid", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isInteractionValid"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isMultiDayRange", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isMultiDayRange"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isPropsEqual", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isPropsEqual"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isPropsValid", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isPropsValid"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isSingleDay", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isSingleDay"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isValidDate", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isValidDate"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "listenBySelector", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["listenBySelector"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mapHash", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["mapHash"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "memoize", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["memoize"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "memoizeArraylike", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["memoizeArraylike"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "memoizeHashlike", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["memoizeHashlike"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "memoizeObjArg", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["memoizeObjArg"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeEventStores", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["mergeEventStores"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multiplyDuration", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["multiplyDuration"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "padStart", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["padStart"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseBusinessHours", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["parseBusinessHours"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseClassNames", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["parseClassNames"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseDragMeta", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["parseDragMeta"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseEventDef", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["parseEventDef"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseFieldSpecs", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["parseFieldSpecs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "parseMarker", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["parseMarker"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pointInsideRect", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["pointInsideRect"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "preventContextMenu", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["preventContextMenu"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "preventDefault", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["preventDefault"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "preventSelection", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["preventSelection"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rangeContainsMarker", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["rangeContainsMarker"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rangeContainsRange", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["rangeContainsRange"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rangesEqual", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["rangesEqual"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "rangesIntersect", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["rangesIntersect"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refineEventDef", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["refineEventDef"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refineProps", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["refineProps"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeElement", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["removeElement"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeExact", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["removeExact"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderChunkContent", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["renderChunkContent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderFill", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["renderFill"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderMicroColGroup", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["renderMicroColGroup"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "renderScrollShim", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["renderScrollShim"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "requestJson", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["requestJson"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sanitizeShrinkWidth", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["sanitizeShrinkWidth"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setElSeg", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["setElSeg"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "setRef", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["setRef"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sliceEventStore", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["sliceEventStore"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sliceEvents", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["sliceEvents"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sortEventSegs", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["sortEventSegs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startOfDay", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["startOfDay"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "translateRect", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["translateRect"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "triggerDateSelect", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["triggerDateSelect"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "unpromisify", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["unpromisify"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "version", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["version"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "whenTransitionDone", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["whenTransitionDone"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "wholeDivideDurations", function() { return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["wholeDivideDurations"]; });
-
-/*!
-FullCalendar v5.1.0
-Docs & License: https://fullcalendar.io/
-(c) 2020 Adam Shaw
-*/
-
-
-
-
-
-var Calendar = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__extends"])(Calendar, _super);
- function Calendar(el, optionOverrides) {
- if (optionOverrides === void 0) { optionOverrides = {}; }
- var _this = _super.call(this) || this;
- _this.isRendering = false;
- _this.isRendered = false;
- _this.currentClassNames = [];
- _this.customContentRenderId = 0; // will affect custom generated classNames?
- _this.handleAction = function (action) {
- // actions we know we want to render immediately
- switch (action.type) {
- case 'SET_EVENT_DRAG':
- case 'SET_EVENT_RESIZE':
- _this.renderRunner.tryDrain();
- }
- };
- _this.handleData = function (data) {
- _this.currentData = data;
- _this.renderRunner.request(data.calendarOptions.rerenderDelay);
- };
- _this.handleRenderRequest = function () {
- if (_this.isRendering) {
- _this.isRendered = true;
- var currentData_1 = _this.currentData;
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["render"])(Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarRoot"], { options: currentData_1.calendarOptions, theme: currentData_1.theme, emitter: currentData_1.emitter }, function (classNames, height, isHeightAuto, forPrint) {
- _this.setClassNames(classNames);
- _this.setHeight(height);
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CustomContentRenderContext"].Provider, { value: _this.customContentRenderId },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarContent"], Object(tslib__WEBPACK_IMPORTED_MODULE_1__["__assign"])({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData_1))));
- }), _this.el);
- }
- else if (_this.isRendered) {
- _this.isRendered = false;
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["render"])(null, _this.el);
- _this.setClassNames([]);
- _this.setHeight('');
- }
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["flushToDom"])();
- };
- _this.el = el;
- _this.renderRunner = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["DelayedRunner"](_this.handleRenderRequest);
- new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarDataManager"]({
- optionOverrides: optionOverrides,
- calendarApi: _this,
- onAction: _this.handleAction,
- onData: _this.handleData
- });
- return _this;
- }
- Object.defineProperty(Calendar.prototype, "view", {
- get: function () { return this.currentData.viewApi; } // for public API
- ,
- enumerable: false,
- configurable: true
- });
- Calendar.prototype.render = function () {
- if (!this.isRendering) {
- this.isRendering = true;
- }
- else {
- this.customContentRenderId++;
- }
- this.renderRunner.request();
- };
- Calendar.prototype.destroy = function () {
- if (this.isRendering) {
- this.isRendering = false;
- this.renderRunner.request();
- }
- };
- Calendar.prototype.updateSize = function () {
- _super.prototype.updateSize.call(this);
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["flushToDom"])();
- };
- Calendar.prototype.batchRendering = function (func) {
- this.renderRunner.pause('batchRendering');
- func();
- this.renderRunner.resume('batchRendering');
- };
- Calendar.prototype.pauseRendering = function () {
- this.renderRunner.pause('pauseRendering');
- };
- Calendar.prototype.resumeRendering = function () {
- this.renderRunner.resume('pauseRendering', true);
- };
- Calendar.prototype.resetOptions = function (optionOverrides, append) {
- this.currentDataManager.resetOptions(optionOverrides, append);
- };
- Calendar.prototype.setClassNames = function (classNames) {
- if (!Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["isArraysEqual"])(classNames, this.currentClassNames)) {
- var classList = this.el.classList;
- for (var _i = 0, _a = this.currentClassNames; _i < _a.length; _i++) {
- var className = _a[_i];
- classList.remove(className);
- }
- for (var _b = 0, classNames_1 = classNames; _b < classNames_1.length; _b++) {
- var className = classNames_1[_b];
- classList.add(className);
- }
- this.currentClassNames = classNames;
- }
- };
- Calendar.prototype.setHeight = function (height) {
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["applyStyleProp"])(this.el, 'height', height);
- };
- return Calendar;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_2__["CalendarApi"]));
-
-
-//# sourceMappingURL=main.js.map
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/core/node_modules/tslib/tslib.es6.js":
-/*!*************************************************************************!*\
- !*** ./node_modules/@fullcalendar/core/node_modules/tslib/tslib.es6.js ***!
- \*************************************************************************/
-/*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- }
- return __assign.apply(this, arguments);
-}
-
-function __rest(s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
-}
-
-function __decorate(decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-
-function __param(paramIndex, decorator) {
- return function (target, key) { decorator(target, key, paramIndex); }
-}
-
-function __metadata(metadataKey, metadataValue) {
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
-}
-
-function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-}
-
-function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-}
-
-var __createBinding = Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-});
-
-function __exportStar(m, exports) {
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
-}
-
-function __values(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m) return m.call(o);
- if (o && typeof o.length === "number") return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-
-function __read(o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
-}
-
-function __spread() {
- for (var ar = [], i = 0; i < arguments.length; i++)
- ar = ar.concat(__read(arguments[i]));
- return ar;
-}
-
-function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
-};
-
-function __await(v) {
- return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-
-function __asyncGenerator(thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
- function fulfill(value) { resume("next", value); }
- function reject(value) { resume("throw", value); }
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-}
-
-function __asyncDelegator(o) {
- var i, p;
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
-}
-
-function __asyncValues(o) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var m = o[Symbol.asyncIterator], i;
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
-}
-
-function __makeTemplateObject(cooked, raw) {
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
- return cooked;
-};
-
-var __setModuleDefault = Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-};
-
-function __importStar(mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-}
-
-function __importDefault(mod) {
- return (mod && mod.__esModule) ? mod : { default: mod };
-}
-
-function __classPrivateFieldGet(receiver, privateMap) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to get private field on non-instance");
- }
- return privateMap.get(receiver);
-}
-
-function __classPrivateFieldSet(receiver, privateMap, value) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to set private field on non-instance");
- }
- privateMap.set(receiver, value);
- return value;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/core/vdom.js":
-/*!*************************************************!*\
- !*** ./node_modules/@fullcalendar/core/vdom.js ***!
- \*************************************************/
-/*! no exports provided */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@fullcalendar/core/node_modules/tslib/tslib.es6.js");
-/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! preact */ "./node_modules/preact/dist/preact.module.js");
-
-
-window.FullCalendarVDom = {
- Component: preact__WEBPACK_IMPORTED_MODULE_1__["Component"],
- createElement: preact__WEBPACK_IMPORTED_MODULE_1__["createElement"],
- render: preact__WEBPACK_IMPORTED_MODULE_1__["render"],
- createRef: preact__WEBPACK_IMPORTED_MODULE_1__["createRef"],
- Fragment: preact__WEBPACK_IMPORTED_MODULE_1__["Fragment"],
- createContext: createContext,
- flushToDom: flushToDom
-};
-
-
-
-function flushToDom() {
- var oldDebounceRendering = preact__WEBPACK_IMPORTED_MODULE_1__["options"].debounceRendering;
- var callbackQ = [];
- function execCallbackSync(callback) {
- callbackQ.push(callback);
- }
- preact__WEBPACK_IMPORTED_MODULE_1__["options"].debounceRendering = execCallbackSync;
- preact__WEBPACK_IMPORTED_MODULE_1__["render"](preact__WEBPACK_IMPORTED_MODULE_1__["createElement"](FakeComponent, {}), document.createElement('div'));
- while (callbackQ.length) {
- callbackQ.shift()();
- }
- preact__WEBPACK_IMPORTED_MODULE_1__["options"].debounceRendering = oldDebounceRendering;
-}
-var FakeComponent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(FakeComponent, _super);
- function FakeComponent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- FakeComponent.prototype.render = function () { return preact__WEBPACK_IMPORTED_MODULE_1__["createElement"]('div', {}); };
- FakeComponent.prototype.componentDidMount = function () { this.setState({}); };
- return FakeComponent;
-}(preact__WEBPACK_IMPORTED_MODULE_1__["Component"]));
-function createContext(defaultValue) {
- var ContextType = preact__WEBPACK_IMPORTED_MODULE_1__["createContext"](defaultValue);
- var origProvider = ContextType.Provider;
- ContextType.Provider = function () {
- var _this = this;
- var isNew = !this.getChildContext;
- var children = origProvider.apply(this, arguments);
- if (isNew) {
- var subs_1 = [];
- this.shouldComponentUpdate = function (_props) {
- if (_this.props.value !== _props.value) {
- subs_1.some(function (c) {
- c.context = _props.value;
- c.forceUpdate();
- });
- }
- };
- this.sub = function (c) {
- subs_1.push(c);
- var old = c.componentWillUnmount;
- c.componentWillUnmount = function () {
- subs_1.splice(subs_1.indexOf(c), 1);
- old && old.call(c);
- };
- };
- }
- return children;
- };
- return ContextType;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/daygrid/main.css":
-/*!*****************************************************!*\
- !*** ./node_modules/@fullcalendar/daygrid/main.css ***!
- \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-
-var content = __webpack_require__(/*! !../../css-loader??ref--6-1!../../postcss-loader/src??ref--6-2!./main.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/@fullcalendar/daygrid/main.css");
-
-if(typeof content === 'string') content = [[module.i, content, '']];
-
-var transform;
-var insertInto;
-
-
-
-var options = {"hmr":true}
-
-options.transform = transform
-options.insertInto = undefined;
-
-var update = __webpack_require__(/*! ../../style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
-
-if(content.locals) module.exports = content.locals;
-
-if(false) {}
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/daygrid/main.js":
-/*!****************************************************!*\
- !*** ./node_modules/@fullcalendar/daygrid/main.js ***!
- \****************************************************/
-/*! exports provided: default, DayGridView, DayTable, DayTableSlicer, Table, TableView, buildDayTableModel */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayGridView", function() { return DayTableView; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayTable", function() { return DayTable; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayTableSlicer", function() { return DayTableSlicer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Table", function() { return Table; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TableView", function() { return TableView; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildDayTableModel", function() { return buildDayTableModel; });
-/* harmony import */ var _main_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main.css */ "./node_modules/@fullcalendar/daygrid/main.css");
-/* harmony import */ var _main_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_main_css__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @fullcalendar/common */ "./node_modules/@fullcalendar/common/main.js");
-/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ "./node_modules/@fullcalendar/daygrid/node_modules/tslib/tslib.es6.js");
-/*!
-FullCalendar v5.1.0
-Docs & License: https://fullcalendar.io/
-(c) 2020 Adam Shaw
-*/
-
-
-
-
-
-/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
-----------------------------------------------------------------------------------------------------------------------*/
-// It is a manager for a Table subcomponent, which does most of the heavy lifting.
-// It is responsible for managing width/height.
-var TableView = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TableView, _super);
- function TableView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.headerElRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- return _this;
- }
- TableView.prototype.renderSimpleLayout = function (headerRowContent, bodyContent) {
- var _a = this, props = _a.props, context = _a.context;
- var sections = [];
- var stickyHeaderDates = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getStickyHeaderDates"])(context.options);
- if (headerRowContent) {
- sections.push({
- type: 'header',
- key: 'header',
- isSticky: stickyHeaderDates,
- chunk: {
- elRef: this.headerElRef,
- tableClassName: 'fc-col-header',
- rowContent: headerRowContent
- }
- });
- }
- sections.push({
- type: 'body',
- key: 'body',
- liquid: true,
- chunk: { content: bodyContent }
- });
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["ViewRoot"], { viewSpec: context.viewSpec }, function (rootElRef, classNames) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { ref: rootElRef, className: ['fc-daygrid'].concat(classNames).join(' ') },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["SimpleScrollGrid"], { liquid: !props.isHeightAuto && !props.forPrint, cols: [] /* TODO: make optional? */, sections: sections }))); }));
- };
- TableView.prototype.renderHScrollLayout = function (headerRowContent, bodyContent, colCnt, dayMinWidth) {
- var ScrollGrid = this.context.pluginHooks.scrollGridImpl;
- if (!ScrollGrid) {
- throw new Error('No ScrollGrid implementation');
- }
- var _a = this, props = _a.props, context = _a.context;
- var stickyHeaderDates = !props.forPrint && Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getStickyHeaderDates"])(context.options);
- var stickyFooterScrollbar = !props.forPrint && Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getStickyFooterScrollbar"])(context.options);
- var sections = [];
- if (headerRowContent) {
- sections.push({
- type: 'header',
- key: 'header',
- isSticky: stickyHeaderDates,
- chunks: [{
- key: 'main',
- elRef: this.headerElRef,
- tableClassName: 'fc-col-header',
- rowContent: headerRowContent
- }]
- });
- }
- sections.push({
- type: 'body',
- key: 'body',
- liquid: true,
- chunks: [{
- key: 'main',
- content: bodyContent
- }]
- });
- if (stickyFooterScrollbar) {
- sections.push({
- type: 'footer',
- key: 'footer',
- isSticky: true,
- chunks: [{
- key: 'main',
- content: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["renderScrollShim"]
- }]
- });
- }
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["ViewRoot"], { viewSpec: context.viewSpec }, function (rootElRef, classNames) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { ref: rootElRef, className: ['fc-daygrid'].concat(classNames).join(' ') },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections }))); }));
- };
- return TableView;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-
-function splitSegsByRow(segs, rowCnt) {
- var byRow = [];
- for (var i = 0; i < rowCnt; i++) {
- byRow[i] = [];
- }
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- byRow[seg.row].push(seg);
- }
- return byRow;
-}
-function splitSegsByFirstCol(segs, colCnt) {
- var byCol = [];
- for (var i = 0; i < colCnt; i++) {
- byCol[i] = [];
- }
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- byCol[seg.firstCol].push(seg);
- }
- return byCol;
-}
-function splitInteractionByRow(ui, rowCnt) {
- var byRow = [];
- if (!ui) {
- for (var i = 0; i < rowCnt; i++) {
- byRow[i] = null;
- }
- }
- else {
- for (var i = 0; i < rowCnt; i++) {
- byRow[i] = {
- affectedInstances: ui.affectedInstances,
- isEvent: ui.isEvent,
- segs: []
- };
- }
- for (var _i = 0, _a = ui.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- byRow[seg.row].segs.push(seg);
- }
- }
- return byRow;
-}
-
-var DEFAULT_WEEK_NUM_FORMAT = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createFormatter"])({ week: 'narrow' });
-var TableCell = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TableCell, _super);
- function TableCell() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.handleRootEl = function (el) {
- _this.rootEl = el;
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["setRef"])(_this.props.elRef, el);
- };
- _this.handleMoreLinkClick = function (ev) {
- var props = _this.props;
- if (props.onMoreClick) {
- var allSegs = props.segsByEachCol;
- var hiddenSegs = allSegs.filter(function (seg) { return props.segIsHidden[seg.eventRange.instance.instanceId]; });
- props.onMoreClick({
- date: props.date,
- allSegs: allSegs,
- hiddenSegs: hiddenSegs,
- moreCnt: props.moreCnt,
- dayEl: _this.rootEl,
- ev: ev
- });
- }
- };
- return _this;
- }
- TableCell.prototype.render = function () {
- var _this = this;
- var _a = this.context, options = _a.options, viewApi = _a.viewApi;
- var props = this.props;
- var date = props.date, dateProfile = props.dateProfile;
- var hookProps = {
- num: props.moreCnt,
- text: props.buildMoreLinkText(props.moreCnt),
- view: viewApi
- };
- var navLinkAttrs = options.navLinks
- ? { 'data-navlink': Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["buildNavLinkData"])(date, 'week'), tabIndex: 0 }
- : {};
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayCellRoot"], { date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, extraHookProps: props.extraHookProps, elRef: this.handleRootEl }, function (rootElRef, classNames, rootDataAttrs, isDisabled) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ ref: rootElRef, className: ['fc-daygrid-day'].concat(classNames, props.extraClassNames || []).join(' ') }, rootDataAttrs, props.extraDataAttrs),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-day-frame fc-scrollgrid-sync-inner', ref: props.innerElRef /* different from hook system! RENAME */ },
- props.showWeekNumber &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["WeekNumberRoot"], { date: date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }, function (rootElRef, classNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("a", Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ ref: rootElRef, className: ['fc-daygrid-week-number'].concat(classNames).join(' ') }, navLinkAttrs), innerContent)); }),
- !isDisabled &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TableCellTop, { date: date, dateProfile: dateProfile, showDayNumber: props.showDayNumber, todayRange: props.todayRange, extraHookProps: props.extraHookProps }),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-day-events', ref: props.fgContentElRef, style: { paddingBottom: props.fgPaddingBottom } },
- props.fgContent,
- Boolean(props.moreCnt) &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-day-bottom', style: { marginTop: props.moreMarginTop } },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RenderHook"], { hookProps: hookProps, classNames: options.moreLinkClassNames, content: options.moreLinkContent, defaultContent: renderMoreLinkInner, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, function (rootElRef, classNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("a", { onClick: _this.handleMoreLinkClick, ref: rootElRef, className: ['fc-daygrid-more-link'].concat(classNames).join(' ') }, innerContent)); }))),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-day-bg' }, props.bgContent)))); }));
- };
- return TableCell;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-function renderTopInner(props) {
- return props.dayNumberText;
-}
-function renderMoreLinkInner(props) {
- return props.text;
-}
-var TableCellTop = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TableCellTop, _super);
- function TableCellTop() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TableCellTop.prototype.render = function () {
- var props = this.props;
- var navLinkAttrs = this.context.options.navLinks
- ? { 'data-navlink': Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["buildNavLinkData"])(props.date), tabIndex: 0 }
- : {};
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayCellContent"], { date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, extraHookProps: props.extraHookProps, defaultContent: renderTopInner }, function (innerElRef, innerContent) { return (innerContent &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-day-top', ref: innerElRef },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("a", Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ className: 'fc-daygrid-day-number' }, navLinkAttrs), innerContent))); }));
- };
- return TableCellTop;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-
-var DEFAULT_TABLE_EVENT_TIME_FORMAT = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createFormatter"])({
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true,
- meridiem: 'narrow'
-});
-function hasListItemDisplay(seg) {
- var display = seg.eventRange.ui.display;
- return display === 'list-item' || (display === 'auto' &&
- !seg.eventRange.def.allDay &&
- seg.firstCol === seg.lastCol // can't be multi-day
- );
-}
-
-var TableListItemEvent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TableListItemEvent, _super);
- function TableListItemEvent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TableListItemEvent.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- var timeFormat = context.options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
- var timeText = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["buildSegTimeText"])(props.seg, timeFormat, context, true, props.defaultDisplayEventEnd);
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["EventRoot"], { seg: props.seg, timeText: timeText, defaultContent: renderInnerContent, isDragging: props.isDragging, isResizing: false, isDateSelecting: false, isSelected: props.isSelected, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent) { return ( // we don't use styles!
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("a", Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ className: ['fc-daygrid-event', 'fc-daygrid-dot-event'].concat(classNames).join(' '), ref: rootElRef }, getSegAnchorAttrs(props.seg)), innerContent)); }));
- };
- return TableListItemEvent;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-function renderInnerContent(innerProps) {
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-event-dot', style: { borderColor: innerProps.borderColor || innerProps.backgroundColor } }),
- innerProps.timeText &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-event-time' }, innerProps.timeText),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-event-title' }, innerProps.event.title || Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, "\u00A0"))));
-}
-function getSegAnchorAttrs(seg) {
- var url = seg.eventRange.def.url;
- return url ? { href: url } : {};
-}
-
-var TableBlockEvent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TableBlockEvent, _super);
- function TableBlockEvent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TableBlockEvent.prototype.render = function () {
- var props = this.props;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["StandardEvent"], Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, props, { extraClassNames: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));
- };
- return TableBlockEvent;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-
-function computeFgSegPlacement(// for one row. TODO: print mode?
-cellModels, segs, dayMaxEvents, dayMaxEventRows, eventHeights, maxContentHeight, colCnt, eventOrderSpecs) {
- var colPlacements = []; // if event spans multiple cols, its present in each col
- var moreCnts = []; // by-col
- var segIsHidden = {};
- var segTops = {}; // always populated for each seg
- var segMarginTops = {}; // simetimes populated for each seg
- var moreTops = {};
- var paddingBottoms = {}; // for each cell's inner-wrapper div
- for (var i = 0; i < colCnt; i++) {
- colPlacements.push([]);
- moreCnts.push(0);
- }
- segs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["sortEventSegs"])(segs, eventOrderSpecs);
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- var instanceId = seg.eventRange.instance.instanceId;
- var eventHeight = eventHeights[instanceId + ':' + seg.firstCol];
- placeSeg(seg, eventHeight || 0); // will keep colPlacements sorted by top
- }
- if (dayMaxEvents === true || dayMaxEventRows === true) {
- limitByMaxHeight(moreCnts, segIsHidden, colPlacements, maxContentHeight); // populates moreCnts/segIsHidden
- }
- else if (typeof dayMaxEvents === 'number') {
- limitByMaxEvents(moreCnts, segIsHidden, colPlacements, dayMaxEvents); // populates moreCnts/segIsHidden
- }
- else if (typeof dayMaxEventRows === 'number') {
- limitByMaxRows(moreCnts, segIsHidden, colPlacements, dayMaxEventRows); // populates moreCnts/segIsHidden
- }
- // computes segTops/segMarginTops/moreTops/paddingBottoms
- for (var col = 0; col < colCnt; col++) {
- var placements = colPlacements[col];
- var currentNonAbsBottom = 0;
- var runningAbsHeight = 0;
- for (var _a = 0, placements_1 = placements; _a < placements_1.length; _a++) {
- var placement = placements_1[_a];
- var seg = placement.seg;
- if (!segIsHidden[seg.eventRange.instance.instanceId]) {
- segTops[seg.eventRange.instance.instanceId] = placement.top; // from top of container
- if (seg.firstCol === seg.lastCol && seg.isStart && seg.isEnd) { // TODO: simpler way? NOT DRY
- segMarginTops[seg.eventRange.instance.instanceId] =
- placement.top - currentNonAbsBottom; // from previous seg bottom
- runningAbsHeight = 0;
- currentNonAbsBottom = placement.bottom;
- }
- else { // multi-col event, abs positioned
- runningAbsHeight += placement.bottom - placement.top;
- }
- }
- }
- if (runningAbsHeight) {
- if (moreCnts[col]) {
- moreTops[col] = runningAbsHeight;
- }
- else {
- paddingBottoms[col] = runningAbsHeight;
- }
- }
- }
- function placeSeg(seg, segHeight) {
- if (!tryPlaceSegAt(seg, segHeight, 0)) {
- for (var col = seg.firstCol; col <= seg.lastCol; col++) {
- for (var _i = 0, _a = colPlacements[col]; _i < _a.length; _i++) { // will repeat multi-day segs!!!!!!! bad!!!!!!
- var placement = _a[_i];
- if (tryPlaceSegAt(seg, segHeight, placement.bottom)) {
- return;
- }
- }
- }
- }
- }
- function tryPlaceSegAt(seg, segHeight, top) {
- if (canPlaceSegAt(seg, segHeight, top)) {
- for (var col = seg.firstCol; col <= seg.lastCol; col++) {
- var placements = colPlacements[col];
- var insertionIndex = 0;
- while (insertionIndex < placements.length &&
- top >= placements[insertionIndex].top) {
- insertionIndex++;
- }
- placements.splice(insertionIndex, 0, {
- seg: seg,
- top: top,
- bottom: top + segHeight
- });
- }
- return true;
- }
- else {
- return false;
- }
- }
- function canPlaceSegAt(seg, segHeight, top) {
- for (var col = seg.firstCol; col <= seg.lastCol; col++) {
- for (var _i = 0, _a = colPlacements[col]; _i < _a.length; _i++) {
- var placement = _a[_i];
- if (top < placement.bottom && top + segHeight > placement.top) { // collide?
- return false;
- }
- }
- }
- return true;
- }
- // what does this do!?
- for (var instanceIdAndFirstCol in eventHeights) {
- if (!eventHeights[instanceIdAndFirstCol]) {
- segIsHidden[instanceIdAndFirstCol.split(':')[0]] = true;
- }
- }
- var segsByFirstCol = colPlacements.map(extractFirstColSegs); // operates on the sorted cols
- var segsByEachCol = colPlacements.map(function (placements, col) {
- var segs = extractAllColSegs(placements);
- segs = resliceDaySegs(segs, cellModels[col].date, col);
- return segs;
- });
- return {
- segsByFirstCol: segsByFirstCol,
- segsByEachCol: segsByEachCol,
- segIsHidden: segIsHidden,
- segTops: segTops,
- segMarginTops: segMarginTops,
- moreCnts: moreCnts,
- moreTops: moreTops,
- paddingBottoms: paddingBottoms
- };
-}
-function extractFirstColSegs(oneColPlacements, col) {
- var segs = [];
- for (var _i = 0, oneColPlacements_1 = oneColPlacements; _i < oneColPlacements_1.length; _i++) {
- var placement = oneColPlacements_1[_i];
- if (placement.seg.firstCol === col) {
- segs.push(placement.seg);
- }
- }
- return segs;
-}
-function extractAllColSegs(oneColPlacements) {
- var segs = [];
- for (var _i = 0, oneColPlacements_2 = oneColPlacements; _i < oneColPlacements_2.length; _i++) {
- var placement = oneColPlacements_2[_i];
- segs.push(placement.seg);
- }
- return segs;
-}
-function limitByMaxHeight(hiddenCnts, segIsHidden, colPlacements, maxContentHeight) {
- limitEvents(hiddenCnts, segIsHidden, colPlacements, true, function (placement) {
- return placement.bottom <= maxContentHeight;
- });
-}
-function limitByMaxEvents(hiddenCnts, segIsHidden, colPlacements, dayMaxEvents) {
- limitEvents(hiddenCnts, segIsHidden, colPlacements, false, function (placement, levelIndex) {
- return levelIndex < dayMaxEvents;
- });
-}
-function limitByMaxRows(hiddenCnts, segIsHidden, colPlacements, dayMaxEventRows) {
- limitEvents(hiddenCnts, segIsHidden, colPlacements, true, function (placement, levelIndex) {
- return levelIndex < dayMaxEventRows;
- });
-}
-/*
-populates the given hiddenCnts/segIsHidden, which are supplied empty.
-TODO: return them instead
-*/
-function limitEvents(hiddenCnts, segIsHidden, colPlacements, moreLinkConsumesLevel, isPlacementInBounds) {
- var colCnt = hiddenCnts.length;
- var segIsVisible = {}; // TODO: instead, use segIsHidden with true/false?
- var visibleColPlacements = []; // will mirror colPlacements
- for (var col = 0; col < colCnt; col++) {
- visibleColPlacements.push([]);
- }
- for (var col = 0; col < colCnt; col++) {
- var placements = colPlacements[col];
- var level = 0;
- for (var _i = 0, placements_2 = placements; _i < placements_2.length; _i++) {
- var placement = placements_2[_i];
- if (isPlacementInBounds(placement, level)) {
- recordVisible(placement);
- }
- else {
- recordHidden(placement);
- }
- // only considered a level if the seg had height
- if (placement.top !== placement.bottom) {
- level++;
- }
- }
- }
- function recordVisible(placement) {
- var seg = placement.seg;
- var instanceId = seg.eventRange.instance.instanceId;
- if (!segIsVisible[instanceId]) {
- segIsVisible[instanceId] = true;
- for (var col = seg.firstCol; col <= seg.lastCol; col++) {
- visibleColPlacements[col].push(placement);
- }
- }
- }
- function recordHidden(placement) {
- var seg = placement.seg;
- var instanceId = seg.eventRange.instance.instanceId;
- if (!segIsHidden[instanceId]) {
- segIsHidden[instanceId] = true;
- for (var col = seg.firstCol; col <= seg.lastCol; col++) {
- var hiddenCnt = ++hiddenCnts[col];
- if (moreLinkConsumesLevel && hiddenCnt === 1) {
- var lastVisiblePlacement = visibleColPlacements[col].pop();
- if (lastVisiblePlacement) {
- recordHidden(lastVisiblePlacement);
- }
- }
- }
- }
- }
-}
-// Given the events within an array of segment objects, reslice them to be in a single day
-function resliceDaySegs(segs, dayDate, colIndex) {
- var dayStart = dayDate;
- var dayEnd = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addDays"])(dayStart, 1);
- var dayRange = { start: dayStart, end: dayEnd };
- var newSegs = [];
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- var eventRange = seg.eventRange;
- var origRange = eventRange.range;
- var slicedRange = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["intersectRanges"])(origRange, dayRange);
- if (slicedRange) {
- newSegs.push(Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, seg), { firstCol: colIndex, lastCol: colIndex, eventRange: {
- def: eventRange.def,
- ui: Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, eventRange.ui), { durationEditable: false }),
- instance: eventRange.instance,
- range: slicedRange
- }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() }));
- }
- }
- return newSegs;
-}
-
-var TableRow = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TableRow, _super);
- function TableRow() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.cellElRefs = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RefMap"](); // the
- _this.frameElRefs = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RefMap"](); // the fc-daygrid-day-frame
- _this.fgElRefs = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RefMap"](); // the fc-daygrid-day-events
- _this.segHarnessRefs = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RefMap"](); // indexed by "instanceId:firstCol"
- _this.rootElRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.state = {
- framePositions: null,
- maxContentHeight: null,
- segHeights: {}
- };
- return _this;
- }
- TableRow.prototype.render = function () {
- var _this = this;
- var _a = this, props = _a.props, state = _a.state, context = _a.context;
- var colCnt = props.cells.length;
- var businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);
- var bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);
- var highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);
- var mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);
- var _b = computeFgSegPlacement(props.cells, props.fgEventSegs, props.dayMaxEvents, props.dayMaxEventRows, state.segHeights, state.maxContentHeight, colCnt, context.options.eventOrder), paddingBottoms = _b.paddingBottoms, segsByFirstCol = _b.segsByFirstCol, segsByEachCol = _b.segsByEachCol, segIsHidden = _b.segIsHidden, segTops = _b.segTops, segMarginTops = _b.segMarginTops, moreCnts = _b.moreCnts, moreTops = _b.moreTops;
- var selectedInstanceHash = // TODO: messy way to compute this
- (props.eventDrag && props.eventDrag.affectedInstances) ||
- (props.eventResize && props.eventResize.affectedInstances) ||
- {};
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", { ref: this.rootElRef },
- props.renderIntro && props.renderIntro(),
- props.cells.map(function (cell, col) {
- var normalFgNodes = _this.renderFgSegs(segsByFirstCol[col], segIsHidden, segTops, segMarginTops, selectedInstanceHash, props.todayRange);
- var mirrorFgNodes = _this.renderFgSegs(mirrorSegsByCol[col], {}, segTops, // use same tops as real rendering
- {}, {}, props.todayRange, Boolean(props.eventDrag), Boolean(props.eventResize), false // date-selecting (because mirror is never drawn for date selection)
- );
- var showWeekNumber = props.showWeekNumbers && col === 0;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TableCell, { key: cell.key, elRef: _this.cellElRefs.createRef(cell.key), innerElRef: _this.frameElRefs.createRef(cell.key) /* FF problem, but okay to use for left/right. TODO: rename prop */, dateProfile: props.dateProfile, date: cell.date, showDayNumber: props.showDayNumbers || showWeekNumber /* for spacing, we need to force day-numbers if week numbers */, showWeekNumber: showWeekNumber, todayRange: props.todayRange, extraHookProps: cell.extraHookProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, moreCnt: moreCnts[col], buildMoreLinkText: props.buildMoreLinkText, onMoreClick: props.onMoreClick, segIsHidden: segIsHidden, moreMarginTop: moreTops[col] /* rename */, segsByEachCol: segsByEachCol[col], fgPaddingBottom: paddingBottoms[col], fgContentElRef: _this.fgElRefs.createRef(cell.key), fgContent: ( // Fragment scopes the keys
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, normalFgNodes),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, mirrorFgNodes))), bgContent: ( // Fragment scopes the keys
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null,
- _this.renderFillSegs(highlightSegsByCol[col], 'highlight'),
- _this.renderFillSegs(businessHoursByCol[col], 'non-business'),
- _this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))) }));
- })));
- };
- TableRow.prototype.componentDidMount = function () {
- this.updateSizing(true);
- };
- TableRow.prototype.componentDidUpdate = function (prevProps, prevState) {
- var currentProps = this.props;
- this.updateSizing(!Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["isPropsEqual"])(prevProps, currentProps));
- };
- TableRow.prototype.getHighlightSegs = function () {
- var props = this.props;
- if (props.eventDrag && props.eventDrag.segs.length) { // messy check
- return props.eventDrag.segs;
- }
- else if (props.eventResize && props.eventResize.segs.length) { // messy check
- return props.eventResize.segs;
- }
- else {
- return props.dateSelectionSegs;
- }
- };
- TableRow.prototype.getMirrorSegs = function () {
- var props = this.props;
- if (props.eventResize && props.eventResize.segs.length) { // messy check
- return props.eventResize.segs;
- }
- else {
- return [];
- }
- };
- TableRow.prototype.renderFgSegs = function (segs, segIsHidden, // does NOT mean display:hidden
- segTops, segMarginTops, selectedInstanceHash, todayRange, isDragging, isResizing, isDateSelecting) {
- var context = this.context;
- var eventSelection = this.props.eventSelection;
- var framePositions = this.state.framePositions;
- var defaultDisplayEventEnd = this.props.cells.length === 1; // colCnt === 1
- var nodes = [];
- if (framePositions) {
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- var instanceId = seg.eventRange.instance.instanceId;
- var isMirror = isDragging || isResizing || isDateSelecting;
- var isSelected = selectedInstanceHash[instanceId];
- var isInvisible = segIsHidden[instanceId] || isSelected;
- var isAbsolute = segIsHidden[instanceId] || isMirror || seg.firstCol !== seg.lastCol || !seg.isStart || !seg.isEnd; // TODO: simpler way? NOT DRY
- var marginTop = void 0;
- var top_1 = void 0;
- var left = void 0;
- var right = void 0;
- if (isAbsolute) {
- top_1 = segTops[instanceId];
- if (context.isRtl) {
- right = 0;
- left = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];
- }
- else {
- left = 0;
- right = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];
- }
- }
- else {
- marginTop = segMarginTops[instanceId];
- }
- /*
- known bug: events that are force to be list-item but span multiple days still take up space in later columns
- */
- nodes.push(Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-event-harness' + (isAbsolute ? ' fc-daygrid-event-harness-abs' : ''), key: instanceId, ref: isMirror ? null : this.segHarnessRefs.createRef(instanceId + ':' + seg.firstCol) /* in print mode when in mult cols, could collide */, style: {
- visibility: isInvisible ? 'hidden' : '',
- marginTop: marginTop || '',
- top: top_1 || '',
- left: left || '',
- right: right || ''
- } }, hasListItemDisplay(seg) ?
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TableListItemEvent, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, todayRange))) :
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TableBlockEvent, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, todayRange)))));
- }
- }
- return nodes;
- };
- TableRow.prototype.renderFillSegs = function (segs, fillType) {
- var isRtl = this.context.isRtl;
- var todayRange = this.props.todayRange;
- var framePositions = this.state.framePositions;
- var nodes = [];
- if (framePositions) {
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- var leftRightCss = isRtl ? {
- right: 0,
- left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol]
- } : {
- left: 0,
- right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol],
- };
- nodes.push(Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { key: Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["buildEventRangeKey"])(seg.eventRange), className: 'fc-daygrid-bg-harness', style: leftRightCss }, fillType === 'bg-event' ?
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BgEvent"], Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, todayRange))) :
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["renderFill"])(fillType)));
- }
- }
- return _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"].apply(void 0, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__spreadArrays"])([_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], {}], nodes));
- };
- TableRow.prototype.updateSizing = function (isExternalSizingChange) {
- var _a = this, props = _a.props, frameElRefs = _a.frameElRefs;
- if (props.clientWidth !== null) { // positioning ready?
- if (isExternalSizingChange) {
- var frameEls = props.cells.map(function (cell) { return frameElRefs.currentMap[cell.key]; });
- if (frameEls.length) {
- var originEl = this.rootElRef.current;
- this.setState({
- framePositions: new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["PositionCache"](originEl, frameEls, true, // isHorizontal
- false)
- });
- }
- }
- var limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;
- this.setState({
- segHeights: this.computeSegHeights(),
- maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null
- });
- }
- };
- TableRow.prototype.computeSegHeights = function () {
- return Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["mapHash"])(this.segHarnessRefs.currentMap, function (eventHarnessEl) { return (eventHarnessEl.getBoundingClientRect().height); });
- };
- TableRow.prototype.computeMaxContentHeight = function () {
- var firstKey = this.props.cells[0].key;
- var cellEl = this.cellElRefs.currentMap[firstKey];
- var fcContainerEl = this.fgElRefs.currentMap[firstKey];
- return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;
- };
- TableRow.prototype.getCellEls = function () {
- var elMap = this.cellElRefs.currentMap;
- return this.props.cells.map(function (cell) { return elMap[cell.key]; });
- };
- return TableRow;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-TableRow.addStateEquality({
- segHeights: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["isPropsEqual"]
-});
-
-var PADDING_FROM_VIEWPORT = 10;
-var SCROLL_DEBOUNCE = 10;
-var Popover = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(Popover, _super);
- function Popover() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.repositioner = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DelayedRunner"](_this.updateSize.bind(_this));
- _this.handleRootEl = function (el) {
- _this.rootEl = el;
- if (_this.props.elRef) {
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["setRef"])(_this.props.elRef, el);
- }
- };
- // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
- _this.handleDocumentMousedown = function (ev) {
- var onClose = _this.props.onClose;
- // only hide the popover if the click happened outside the popover
- if (onClose && !_this.rootEl.contains(ev.target)) {
- onClose();
- }
- };
- _this.handleDocumentScroll = function () {
- _this.repositioner.request(SCROLL_DEBOUNCE);
- };
- _this.handleCloseClick = function () {
- var onClose = _this.props.onClose;
- if (onClose) {
- onClose();
- }
- };
- return _this;
- }
- Popover.prototype.render = function () {
- var theme = this.context.theme;
- var props = this.props;
- var classNames = [
- 'fc-popover',
- theme.getClass('popover')
- ].concat(props.extraClassNames || []);
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ className: classNames.join(' ') }, props.extraAttrs, { ref: this.handleRootEl }),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("span", { className: 'fc-popover-title' }, props.title),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), onClick: this.handleCloseClick })),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)));
- };
- Popover.prototype.componentDidMount = function () {
- document.addEventListener('mousedown', this.handleDocumentMousedown);
- document.addEventListener('scroll', this.handleDocumentScroll);
- this.updateSize();
- };
- Popover.prototype.componentWillUnmount = function () {
- document.removeEventListener('mousedown', this.handleDocumentMousedown);
- document.removeEventListener('scroll', this.handleDocumentScroll);
- };
- // TODO: adjust on window resize
- /*
- NOTE: the popover is position:fixed, so coordinates are relative to the viewport
- NOTE: the PARENT calls this as well, on window resize. we would have wanted to use the repositioner,
- but need to ensure that all other components have updated size first (for alignmentEl)
- */
- Popover.prototype.updateSize = function () {
- var _a = this.props, alignmentEl = _a.alignmentEl, topAlignmentEl = _a.topAlignmentEl;
- var rootEl = this.rootEl;
- if (!rootEl) {
- return; // not sure why this was null, but we shouldn't let external components call updateSize() anyway
- }
- var dims = rootEl.getBoundingClientRect(); // only used for width,height
- var alignment = alignmentEl.getBoundingClientRect();
- var top = topAlignmentEl ? topAlignmentEl.getBoundingClientRect().top : alignment.top;
- top = Math.min(top, window.innerHeight - dims.height - PADDING_FROM_VIEWPORT);
- top = Math.max(top, PADDING_FROM_VIEWPORT);
- var left;
- if (this.context.isRtl) {
- left = alignment.right - dims.width;
- }
- else {
- left = alignment.left;
- }
- left = Math.min(left, window.innerWidth - dims.width - PADDING_FROM_VIEWPORT);
- left = Math.max(left, PADDING_FROM_VIEWPORT);
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["applyStyle"])(rootEl, { top: top, left: left });
- };
- return Popover;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-
-var MorePopover = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(MorePopover, _super);
- function MorePopover() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.handlePopoverEl = function (popoverEl) {
- _this.popoverEl = popoverEl;
- if (popoverEl) {
- _this.context.registerInteractiveComponent(_this, {
- el: popoverEl,
- useEventCenter: false
- });
- }
- else {
- _this.context.unregisterInteractiveComponent(_this);
- }
- };
- return _this;
- }
- MorePopover.prototype.render = function () {
- var _a = this.context, options = _a.options, dateEnv = _a.dateEnv;
- var props = this.props;
- var date = props.date, hiddenInstances = props.hiddenInstances, todayRange = props.todayRange, dateProfile = props.dateProfile, selectedInstanceId = props.selectedInstanceId;
- var title = dateEnv.format(date, options.dayPopoverFormat);
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayCellRoot"], { date: date, dateProfile: dateProfile, todayRange: todayRange, elRef: this.handlePopoverEl }, function (rootElRef, dayClassNames, dataAttrs) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(Popover, { elRef: rootElRef, title: title, extraClassNames: ['fc-more-popover'].concat(dayClassNames), extraAttrs: dataAttrs, onClose: props.onCloseClick, alignmentEl: props.alignmentEl, topAlignmentEl: props.topAlignmentEl },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayCellContent"], { date: date, dateProfile: dateProfile, todayRange: todayRange }, function (innerElRef, innerContent) { return (innerContent &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-more-popover-misc', ref: innerElRef }, innerContent)); }),
- props.segs.map(function (seg) {
- var instanceId = seg.eventRange.instance.instanceId;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-daygrid-event-harness', key: instanceId, style: {
- visibility: hiddenInstances[instanceId] ? 'hidden' : ''
- } }, hasListItemDisplay(seg) ?
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TableListItemEvent, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg, isDragging: false, isSelected: instanceId === selectedInstanceId, defaultDisplayEventEnd: false }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, todayRange))) :
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TableBlockEvent, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === selectedInstanceId, defaultDisplayEventEnd: false }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, todayRange)))));
- }))); }));
- };
- MorePopover.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
- var date = this.props.date;
- if (positionLeft < elWidth && positionTop < elHeight) {
- return {
- component: this,
- dateSpan: {
- allDay: true,
- range: { start: date, end: Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addDays"])(date, 1) }
- },
- dayEl: this.popoverEl,
- rect: {
- left: 0,
- top: 0,
- right: elWidth,
- bottom: elHeight
- },
- layer: 1
- };
- }
- };
- MorePopover.prototype.isPopover = function () {
- return true; // gross
- };
- return MorePopover;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-
-var Table = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(Table, _super);
- function Table() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.splitBusinessHourSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByRow);
- _this.splitBgEventSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByRow);
- _this.splitFgEventSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByRow);
- _this.splitDateSelectionSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByRow);
- _this.splitEventDrag = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitInteractionByRow);
- _this.splitEventResize = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitInteractionByRow);
- _this.buildBuildMoreLinkText = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(buildBuildMoreLinkText);
- _this.rowRefs = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RefMap"]();
- _this.state = {
- morePopoverState: null
- };
- _this.handleRootEl = function (rootEl) {
- _this.rootEl = rootEl;
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["setRef"])(_this.props.elRef, rootEl);
- };
- _this.handleMoreLinkClick = function (arg) {
- var context = _this.context;
- var dateEnv = context.dateEnv;
- var clickOption = context.options.moreLinkClick;
- function segForPublic(seg) {
- var _a = seg.eventRange, def = _a.def, instance = _a.instance, range = _a.range;
- return {
- event: new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["EventApi"](context, def, instance),
- start: dateEnv.toDate(range.start),
- end: dateEnv.toDate(range.end),
- isStart: seg.isStart,
- isEnd: seg.isEnd
- };
- }
- if (typeof clickOption === 'function') {
- clickOption = clickOption({
- date: dateEnv.toDate(arg.date),
- allDay: true,
- allSegs: arg.allSegs.map(segForPublic),
- hiddenSegs: arg.hiddenSegs.map(segForPublic),
- jsEvent: arg.ev,
- view: context.viewApi
- }); // hack to handle void
- }
- if (!clickOption || clickOption === 'popover') {
- _this.setState({
- morePopoverState: Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, arg), { currentFgEventSegs: _this.props.fgEventSegs })
- });
- }
- else if (typeof clickOption === 'string') { // a view name
- context.calendarApi.zoomTo(arg.date, clickOption);
- }
- };
- _this.handleMorePopoverClose = function () {
- _this.setState({
- morePopoverState: null
- });
- };
- return _this;
- }
- Table.prototype.render = function () {
- var _this = this;
- var props = this.props;
- var dateProfile = props.dateProfile, dayMaxEventRows = props.dayMaxEventRows, dayMaxEvents = props.dayMaxEvents, expandRows = props.expandRows;
- var morePopoverState = this.state.morePopoverState;
- var rowCnt = props.cells.length;
- var businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);
- var bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);
- var fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);
- var dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);
- var eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);
- var eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);
- var buildMoreLinkText = this.buildBuildMoreLinkText(this.context.options.moreLinkText);
- var limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true;
- // if rows can't expand to fill fixed height, can't do balanced-height event limit
- // TODO: best place to normalize these options?
- if (limitViaBalanced && !expandRows) {
- limitViaBalanced = false;
- dayMaxEventRows = null;
- dayMaxEvents = null;
- }
- var classNames = [
- 'fc-daygrid-body',
- limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced',
- expandRows ? '' : 'fc-daygrid-body-natural' // will height of one row depend on the others?
- ];
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: classNames.join(' '), ref: this.handleRootEl, style: {
- // these props are important to give this wrapper correct dimensions for interactions
- // TODO: if we set it here, can we avoid giving to inner tables?
- width: props.clientWidth,
- minWidth: props.tableMinWidth
- } },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["NowTimer"], { unit: 'day' }, function (nowDate, todayRange) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("table", { className: 'fc-scrollgrid-sync-table', style: {
- width: props.clientWidth,
- minWidth: props.tableMinWidth,
- height: expandRows ? props.clientHeight : ''
- } },
- props.colGroupNode,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tbody", null, props.cells.map(function (cells, row) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TableRow, { ref: _this.rowRefs.createRef(row), key: cells.length
- ? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */
- : row // in case there are no cells (like when resource view is loading)
- , showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* hack */, fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, buildMoreLinkText: buildMoreLinkText, onMoreClick: _this.handleMoreLinkClick })); }))),
- (!props.forPrint && morePopoverState && morePopoverState.currentFgEventSegs === props.fgEventSegs) && // clear popover on event mod
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(MorePopover, { date: morePopoverState.date, dateProfile: dateProfile, segs: morePopoverState.allSegs, alignmentEl: morePopoverState.dayEl, topAlignmentEl: rowCnt === 1 ? props.headerAlignElRef.current : null, onCloseClick: _this.handleMorePopoverClose, selectedInstanceId: props.eventSelection, hiddenInstances: // yuck
- (props.eventDrag ? props.eventDrag.affectedInstances : null) ||
- (props.eventResize ? props.eventResize.affectedInstances : null) ||
- {}, todayRange: todayRange }))); })));
- };
- // Hit System
- // ----------------------------------------------------------------------------------------------------
- Table.prototype.prepareHits = function () {
- this.rowPositions = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["PositionCache"](this.rootEl, this.rowRefs.collect().map(function (rowObj) { return rowObj.getCellEls()[0]; }), // first cell el in each row. TODO: not optimal
- false, true // vertical
- );
- this.colPositions = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["PositionCache"](this.rootEl, this.rowRefs.currentMap[0].getCellEls(), // cell els in first row
- true, // horizontal
- false);
- };
- Table.prototype.positionToHit = function (leftPosition, topPosition) {
- var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;
- var col = colPositions.leftToIndex(leftPosition);
- var row = rowPositions.topToIndex(topPosition);
- if (row != null && col != null) {
- return {
- row: row,
- col: col,
- dateSpan: {
- range: this.getCellRange(row, col),
- allDay: true
- },
- dayEl: this.getCellEl(row, col),
- relativeRect: {
- left: colPositions.lefts[col],
- right: colPositions.rights[col],
- top: rowPositions.tops[row],
- bottom: rowPositions.bottoms[row]
- }
- };
- }
- };
- Table.prototype.getCellEl = function (row, col) {
- return this.rowRefs.currentMap[row].getCellEls()[col]; // TODO: not optimal
- };
- Table.prototype.getCellRange = function (row, col) {
- var start = this.props.cells[row][col].date;
- var end = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addDays"])(start, 1);
- return { start: start, end: end };
- };
- return Table;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-function buildBuildMoreLinkText(moreLinkTextInput) {
- if (typeof moreLinkTextInput === 'function') {
- return moreLinkTextInput;
- }
- else {
- return function (num) {
- return "+" + num + " " + moreLinkTextInput;
- };
- }
-}
-function isSegAllDay(seg) {
- return seg.eventRange.def.allDay;
-}
-
-var DayTable = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(DayTable, _super);
- function DayTable() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.slicer = new DayTableSlicer();
- _this.tableRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.handleRootEl = function (rootEl) {
- if (rootEl) {
- _this.context.registerInteractiveComponent(_this, { el: rootEl });
- }
- else {
- _this.context.unregisterInteractiveComponent(_this);
- }
- };
- return _this;
- }
- DayTable.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(Table, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ ref: this.tableRef, elRef: this.handleRootEl }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), { dateProfile: props.dateProfile, cells: props.dayTableModel.cells, colGroupNode: props.colGroupNode, tableMinWidth: props.tableMinWidth, renderRowIntro: props.renderRowIntro, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, showWeekNumbers: props.showWeekNumbers, expandRows: props.expandRows, headerAlignElRef: props.headerAlignElRef, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })));
- };
- DayTable.prototype.prepareHits = function () {
- this.tableRef.current.prepareHits();
- };
- DayTable.prototype.queryHit = function (positionLeft, positionTop) {
- var rawHit = this.tableRef.current.positionToHit(positionLeft, positionTop);
- if (rawHit) {
- return {
- component: this,
- dateSpan: rawHit.dateSpan,
- dayEl: rawHit.dayEl,
- rect: {
- left: rawHit.relativeRect.left,
- right: rawHit.relativeRect.right,
- top: rawHit.relativeRect.top,
- bottom: rawHit.relativeRect.bottom
- },
- layer: 0
- };
- }
- };
- return DayTable;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-var DayTableSlicer = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(DayTableSlicer, _super);
- function DayTableSlicer() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.forceDayIfListItem = true;
- return _this;
- }
- DayTableSlicer.prototype.sliceRange = function (dateRange, dayTableModel) {
- return dayTableModel.sliceRange(dateRange);
- };
- return DayTableSlicer;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Slicer"]));
-
-var DayTableView = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(DayTableView, _super);
- function DayTableView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildDayTableModel = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(buildDayTableModel);
- _this.headerRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.tableRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- return _this;
- }
- DayTableView.prototype.render = function () {
- var _this = this;
- var _a = this.context, options = _a.options, dateProfileGenerator = _a.dateProfileGenerator;
- var props = this.props;
- var dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);
- var headerContent = options.dayHeaders &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayHeader"], { ref: this.headerRef, dateProfile: props.dateProfile, dates: dayTableModel.headerDates, datesRepDistinctDays: dayTableModel.rowCnt === 1 });
- var bodyContent = function (contentArg) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(DayTable, { ref: _this.tableRef, dateProfile: props.dateProfile, dayTableModel: dayTableModel, businessHours: props.businessHours, dateSelection: props.dateSelection, eventStore: props.eventStore, eventUiBases: props.eventUiBases, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, nextDayThreshold: options.nextDayThreshold, colGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, dayMaxEvents: options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows, showWeekNumbers: options.weekNumbers, expandRows: !props.isHeightAuto, headerAlignElRef: _this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint })); };
- return options.dayMinWidth
- ? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth)
- : this.renderSimpleLayout(headerContent, bodyContent);
- };
- return DayTableView;
-}(TableView));
-function buildDayTableModel(dateProfile, dateProfileGenerator) {
- var daySeries = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DaySeriesModel"](dateProfile.renderRange, dateProfileGenerator);
- return new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayTableModel"](daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
-}
-
-var TableDateProfileGenerator = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TableDateProfileGenerator, _super);
- function TableDateProfileGenerator() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Computes the date range that will be rendered.
- TableDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
- var dateEnv = this.props.dateEnv;
- var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);
- var start = renderRange.start;
- var end = renderRange.end;
- var endOfWeek;
- // year and month views should be aligned with weeks. this is already done for week
- if (/^(year|month)$/.test(currentRangeUnit)) {
- start = dateEnv.startOfWeek(start);
- // make end-of-week if not already
- endOfWeek = dateEnv.startOfWeek(end);
- if (endOfWeek.valueOf() !== end.valueOf()) {
- end = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addWeeks"])(endOfWeek, 1);
- }
- }
- // ensure 6 weeks
- if (this.props.monthMode &&
- this.props.fixedWeekCount) {
- var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["diffWeeks"])(start, end));
- end = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addWeeks"])(end, 6 - rowCnt);
- }
- return { start: start, end: end };
- };
- return TableDateProfileGenerator;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateProfileGenerator"]));
-
-var OPTION_REFINERS = {
- moreLinkClick: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["identity"],
- moreLinkClassNames: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["identity"],
- moreLinkContent: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["identity"],
- moreLinkDidMount: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["identity"],
- moreLinkWillUnmount: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["identity"],
-};
-
-var main = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createPlugin"])({
- initialView: 'dayGridMonth',
- optionRefiners: OPTION_REFINERS,
- views: {
- dayGrid: {
- component: DayTableView,
- dateProfileGeneratorClass: TableDateProfileGenerator
- },
- dayGridDay: {
- type: 'dayGrid',
- duration: { days: 1 }
- },
- dayGridWeek: {
- type: 'dayGrid',
- duration: { weeks: 1 }
- },
- dayGridMonth: {
- type: 'dayGrid',
- duration: { months: 1 },
- monthMode: true,
- fixedWeekCount: true
- }
- }
-});
-
-/* harmony default export */ __webpack_exports__["default"] = (main);
-
-//# sourceMappingURL=main.js.map
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/daygrid/node_modules/tslib/tslib.es6.js":
-/*!****************************************************************************!*\
- !*** ./node_modules/@fullcalendar/daygrid/node_modules/tslib/tslib.es6.js ***!
- \****************************************************************************/
-/*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- }
- return __assign.apply(this, arguments);
-}
-
-function __rest(s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
-}
-
-function __decorate(decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-
-function __param(paramIndex, decorator) {
- return function (target, key) { decorator(target, key, paramIndex); }
-}
-
-function __metadata(metadataKey, metadataValue) {
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
-}
-
-function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-}
-
-function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-}
-
-var __createBinding = Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-});
-
-function __exportStar(m, exports) {
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
-}
-
-function __values(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m) return m.call(o);
- if (o && typeof o.length === "number") return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-
-function __read(o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
-}
-
-function __spread() {
- for (var ar = [], i = 0; i < arguments.length; i++)
- ar = ar.concat(__read(arguments[i]));
- return ar;
-}
-
-function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
-};
-
-function __await(v) {
- return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-
-function __asyncGenerator(thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
- function fulfill(value) { resume("next", value); }
- function reject(value) { resume("throw", value); }
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-}
-
-function __asyncDelegator(o) {
- var i, p;
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
-}
-
-function __asyncValues(o) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var m = o[Symbol.asyncIterator], i;
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
-}
-
-function __makeTemplateObject(cooked, raw) {
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
- return cooked;
-};
-
-var __setModuleDefault = Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-};
-
-function __importStar(mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-}
-
-function __importDefault(mod) {
- return (mod && mod.__esModule) ? mod : { default: mod };
-}
-
-function __classPrivateFieldGet(receiver, privateMap) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to get private field on non-instance");
- }
- return privateMap.get(receiver);
-}
-
-function __classPrivateFieldSet(receiver, privateMap, value) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to set private field on non-instance");
- }
- privateMap.set(receiver, value);
- return value;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/timegrid/main.css":
-/*!******************************************************!*\
- !*** ./node_modules/@fullcalendar/timegrid/main.css ***!
- \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-
-var content = __webpack_require__(/*! !../../css-loader??ref--6-1!../../postcss-loader/src??ref--6-2!./main.css */ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/@fullcalendar/timegrid/main.css");
-
-if(typeof content === 'string') content = [[module.i, content, '']];
-
-var transform;
-var insertInto;
-
-
-
-var options = {"hmr":true}
-
-options.transform = transform
-options.insertInto = undefined;
-
-var update = __webpack_require__(/*! ../../style-loader/lib/addStyles.js */ "./node_modules/style-loader/lib/addStyles.js")(content, options);
-
-if(content.locals) module.exports = content.locals;
-
-if(false) {}
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/timegrid/main.js":
-/*!*****************************************************!*\
- !*** ./node_modules/@fullcalendar/timegrid/main.js ***!
- \*****************************************************/
-/*! exports provided: default, DayTimeCols, DayTimeColsSlicer, DayTimeColsView, TimeCols, TimeColsSlatsCoords, TimeColsView, buildDayRanges, buildSlatMetas, buildTimeColsModel */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayTimeCols", function() { return DayTimeCols; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayTimeColsSlicer", function() { return DayTimeColsSlicer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DayTimeColsView", function() { return DayTimeColsView; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeCols", function() { return TimeCols; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeColsSlatsCoords", function() { return TimeColsSlatsCoords; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeColsView", function() { return TimeColsView; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildDayRanges", function() { return buildDayRanges; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildSlatMetas", function() { return buildSlatMetas; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildTimeColsModel", function() { return buildTimeColsModel; });
-/* harmony import */ var _main_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main.css */ "./node_modules/@fullcalendar/timegrid/main.css");
-/* harmony import */ var _main_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_main_css__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @fullcalendar/common */ "./node_modules/@fullcalendar/common/main.js");
-/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ "./node_modules/@fullcalendar/timegrid/node_modules/tslib/tslib.es6.js");
-/* harmony import */ var _fullcalendar_daygrid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @fullcalendar/daygrid */ "./node_modules/@fullcalendar/daygrid/main.js");
-/*!
-FullCalendar v5.1.0
-Docs & License: https://fullcalendar.io/
-(c) 2020 Adam Shaw
-*/
-
-
-
-
-
-
-var AllDaySplitter = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(AllDaySplitter, _super);
- function AllDaySplitter() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- AllDaySplitter.prototype.getKeyInfo = function () {
- return {
- allDay: {},
- timed: {}
- };
- };
- AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {
- if (dateSpan.allDay) {
- return ['allDay'];
- }
- else {
- return ['timed'];
- }
- };
- AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {
- if (!eventDef.allDay) {
- return ['timed'];
- }
- else if (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["hasBgRendering"])(eventDef)) {
- return ['timed', 'allDay'];
- }
- else {
- return ['allDay'];
- }
- };
- return AllDaySplitter;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Splitter"]));
-
-var TimeColsSlatsCoords = /** @class */ (function () {
- function TimeColsSlatsCoords(positions, dateProfile, slatMetas) {
- this.positions = positions;
- this.dateProfile = dateProfile;
- this.slatMetas = slatMetas;
- }
- TimeColsSlatsCoords.prototype.safeComputeTop = function (date) {
- var dateProfile = this.dateProfile;
- if (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["rangeContainsMarker"])(dateProfile.currentRange, date)) {
- var startOfDayDate = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["startOfDay"])(date);
- var timeMs = date.valueOf() - startOfDayDate.valueOf();
- if (timeMs >= Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["asRoughMs"])(dateProfile.slotMinTime) &&
- timeMs < Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["asRoughMs"])(dateProfile.slotMaxTime)) {
- return this.computeTimeTop(Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createDuration"])(timeMs));
- }
- }
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given date.
- // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
- TimeColsSlatsCoords.prototype.computeDateTop = function (when, startOfDayDate) {
- if (!startOfDayDate) {
- startOfDayDate = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["startOfDay"])(when);
- }
- return this.computeTimeTop(Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createDuration"])(when.valueOf() - startOfDayDate.valueOf()));
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
- // This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.
- // Eventually allow computation with arbirary slat dates.
- TimeColsSlatsCoords.prototype.computeTimeTop = function (duration) {
- var _a = this, positions = _a.positions, dateProfile = _a.dateProfile, slatMetas = _a.slatMetas;
- var len = positions.els.length;
- var slotDurationMs = slatMetas[1].date.valueOf() - slatMetas[0].date.valueOf(); // we assume dates are uniform
- var slatCoverage = (duration.milliseconds - Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["asRoughMs"])(dateProfile.slotMinTime)) / slotDurationMs; // floating-point value of # of slots covered
- var slatIndex;
- var slatRemainder;
- // compute a floating-point number for how many slats should be progressed through.
- // from 0 to number of slats (inclusive)
- // constrained because slotMinTime/slotMaxTime might be customized.
- slatCoverage = Math.max(0, slatCoverage);
- slatCoverage = Math.min(len, slatCoverage);
- // an integer index of the furthest whole slat
- // from 0 to number slats (*exclusive*, so len-1)
- slatIndex = Math.floor(slatCoverage);
- slatIndex = Math.min(slatIndex, len - 1);
- // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
- // could be 1.0 if slatCoverage is covering *all* the slots
- slatRemainder = slatCoverage - slatIndex;
- return positions.tops[slatIndex] +
- positions.getHeight(slatIndex) * slatRemainder;
- };
- return TimeColsSlatsCoords;
-}());
-
-// potential nice values for the slot-duration and interval-duration
-// from largest to smallest
-var STOCK_SUB_DURATIONS = [
- { hours: 1 },
- { minutes: 30 },
- { minutes: 15 },
- { seconds: 30 },
- { seconds: 15 }
-];
-/*
-for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
-*/
-var TimeColsSlats = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeColsSlats, _super);
- function TimeColsSlats() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.rootElRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.slatElRefs = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RefMap"]();
- return _this;
- }
- TimeColsSlats.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-slots', ref: this.rootElRef },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("table", { className: context.theme.getClass('table'), style: {
- minWidth: props.tableMinWidth,
- width: props.clientWidth,
- height: props.minHeight
- } },
- props.tableColGroupNode /* relies on there only being a single for the axis */,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColsSlatsBody, { slatElRefs: this.slatElRefs, axis: props.axis, slatMetas: props.slatMetas }))));
- };
- TimeColsSlats.prototype.componentDidMount = function () {
- this.updateSizing();
- };
- TimeColsSlats.prototype.componentDidUpdate = function () {
- this.updateSizing();
- };
- TimeColsSlats.prototype.componentWillUnmount = function () {
- if (this.props.onCoords) {
- this.props.onCoords(null);
- }
- };
- TimeColsSlats.prototype.updateSizing = function () {
- var props = this.props;
- if (props.onCoords &&
- props.clientWidth !== null // means sizing has stabilized
- ) {
- var rootEl = this.rootElRef.current;
- if (rootEl.offsetHeight) { // not hidden by css
- props.onCoords(new TimeColsSlatsCoords(new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["PositionCache"](this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true // vertical
- ), this.props.dateProfile, props.slatMetas));
- }
- }
- };
- return TimeColsSlats;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-function collectSlatEls(elMap, slatMetas) {
- return slatMetas.map(function (slatMeta) { return elMap[slatMeta.key]; });
-}
-var TimeColsSlatsBody = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeColsSlatsBody, _super);
- function TimeColsSlatsBody() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeColsSlatsBody.prototype.render = function () {
- var _a = this, props = _a.props, context = _a.context;
- var options = context.options;
- var slatElRefs = props.slatElRefs;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tbody", null, props.slatMetas.map(function (slatMeta, i) {
- var hookProps = {
- time: slatMeta.time,
- date: context.dateEnv.toDate(slatMeta.date),
- view: context.viewApi
- };
- var classNames = [
- 'fc-timegrid-slot',
- 'fc-timegrid-slot-lane',
- slatMeta.isLabeled ? '' : 'fc-timegrid-slot-minor'
- ];
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", { key: slatMeta.key, ref: slatElRefs.createRef(slatMeta.key) },
- props.axis &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColsAxisCell, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, slatMeta)),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RenderHook"], { hookProps: hookProps, classNames: options.slotLaneClassNames, content: options.slotLaneContent, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", { ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-time": slatMeta.isoTimeStr }, innerContent)); })));
- })));
- };
- return TimeColsSlatsBody;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-var DEFAULT_SLAT_LABEL_FORMAT = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createFormatter"])({
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true,
- meridiem: 'short'
-});
-function TimeColsAxisCell(props) {
- var classNames = [
- 'fc-timegrid-slot',
- 'fc-timegrid-slot-label',
- props.isLabeled ? 'fc-scrollgrid-shrink' : 'fc-timegrid-slot-minor'
- ];
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["ViewContextType"].Consumer, null, function (context) {
- if (!props.isLabeled) {
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", { className: classNames.join(' '), "data-time": props.isoTimeStr }));
- }
- else {
- var dateEnv = context.dateEnv, options = context.options, viewApi = context.viewApi;
- var labelFormat = // TODO: fully pre-parse
- options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT :
- Array.isArray(options.slotLabelFormat) ? Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createFormatter"])(options.slotLabelFormat[0]) :
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createFormatter"])(options.slotLabelFormat);
- var hookProps = {
- time: props.time,
- date: dateEnv.toDate(props.date),
- view: viewApi,
- text: dateEnv.format(props.date, labelFormat)
- };
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RenderHook"], { hookProps: hookProps, classNames: options.slotLabelClassNames, content: options.slotLabelContent, defaultContent: renderInnerContent, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", { ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-time": props.isoTimeStr },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-slot-label-cushion fc-scrollgrid-shrink-cushion', ref: innerElRef }, innerContent)))); }));
- }
- }));
-}
-function renderInnerContent(props) {
- return props.text;
-}
-function buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {
- var dayStart = new Date(0);
- var slatTime = slotMinTime;
- var slatIterator = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createDuration"])(0);
- var labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);
- var metas = [];
- while (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["asRoughMs"])(slatTime) < Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["asRoughMs"])(slotMaxTime)) {
- var date = dateEnv.add(dayStart, slatTime);
- var isLabeled = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["wholeDivideDurations"])(slatIterator, labelInterval) !== null;
- metas.push({
- date: date,
- time: slatTime,
- key: date.toISOString(),
- isoTimeStr: Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["formatIsoTimeString"])(date),
- isLabeled: isLabeled
- });
- slatTime = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addDurations"])(slatTime, slotDuration);
- slatIterator = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addDurations"])(slatIterator, slotDuration);
- }
- return metas;
-}
-// Computes an automatic value for slotLabelInterval
-function computeLabelInterval(slotDuration) {
- var i;
- var labelInterval;
- var slotsPerLabel;
- // find the smallest stock label interval that results in more than one slots-per-label
- for (i = STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
- labelInterval = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createDuration"])(STOCK_SUB_DURATIONS[i]);
- slotsPerLabel = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["wholeDivideDurations"])(labelInterval, slotDuration);
- if (slotsPerLabel !== null && slotsPerLabel > 1) {
- return labelInterval;
- }
- }
- return slotDuration; // fall back
-}
-
-var DEFAULT_WEEK_NUM_FORMAT = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createFormatter"])({ week: 'short' });
-var AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;
-var TimeColsView = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeColsView, _super);
- function TimeColsView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.allDaySplitter = new AllDaySplitter(); // for use by subclasses
- _this.headerElRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.rootElRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.scrollerElRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.state = {
- slatCoords: null
- };
- _this.handleScrollTopRequest = function (scrollTop) {
- var scrollerEl = _this.scrollerElRef.current;
- if (scrollerEl) { // TODO: not sure how this could ever be null. weirdness with the reducer
- scrollerEl.scrollTop = scrollTop;
- }
- };
- /* Header Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- _this.renderHeadAxis = function (frameHeight) {
- if (frameHeight === void 0) { frameHeight = ''; }
- var options = _this.context.options;
- var dateProfile = _this.props.dateProfile;
- var range = dateProfile.renderRange;
- var dayCnt = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["diffDays"])(range.start, range.end);
- var navLinkAttrs = (options.navLinks && dayCnt === 1) // only do in day views (to avoid doing in week views that dont need it)
- ? { 'data-navlink': Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["buildNavLinkData"])(range.start, 'week'), tabIndex: 0 }
- : {};
- if (options.weekNumbers) {
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["WeekNumberRoot"], { date: range.start, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }, function (rootElRef, classNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("th", { ref: rootElRef, className: [
- 'fc-timegrid-axis',
- 'fc-scrollgrid-shrink'
- ].concat(classNames).join(' ') },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-axis-frame fc-scrollgrid-shrink-frame fc-timegrid-axis-frame-liquid', style: { height: frameHeight } },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("a", Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ ref: innerElRef, className: 'fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion' }, navLinkAttrs), innerContent)))); }));
- }
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("th", { className: 'fc-timegrid-axis' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-axis-frame', style: { height: frameHeight } })));
- };
- /* Table Component Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- // only a one-way height sync. we don't send the axis inner-content height to the DayGrid,
- // but DayGrid still needs to have classNames on inner elements in order to measure.
- _this.renderTableRowAxis = function (rowHeight) {
- var _a = _this.context, options = _a.options, viewApi = _a.viewApi;
- var hookProps = {
- text: options.allDayText,
- view: viewApi
- };
- return (
- // TODO: make reusable hook. used in list view too
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RenderHook"], { hookProps: hookProps, classNames: options.allDayClassNames, content: options.allDayContent, defaultContent: renderAllDayInner, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, function (rootElRef, classNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", { ref: rootElRef, className: [
- 'fc-timegrid-axis',
- 'fc-scrollgrid-shrink'
- ].concat(classNames).join(' ') },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-axis-frame fc-scrollgrid-shrink-frame' + (rowHeight == null ? ' fc-timegrid-axis-frame-liquid' : ''), style: { height: rowHeight } },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("span", { className: 'fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion', ref: innerElRef }, innerContent)))); }));
- };
- _this.handleSlatCoords = function (slatCoords) {
- _this.setState({ slatCoords: slatCoords });
- };
- return _this;
- }
- // rendering
- // ----------------------------------------------------------------------------------------------------
- TimeColsView.prototype.renderSimpleLayout = function (headerRowContent, allDayContent, timeContent) {
- var _a = this, context = _a.context, props = _a.props;
- var sections = [];
- var stickyHeaderDates = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getStickyHeaderDates"])(context.options);
- if (headerRowContent) {
- sections.push({
- type: 'header',
- key: 'header',
- isSticky: stickyHeaderDates,
- chunk: {
- elRef: this.headerElRef,
- tableClassName: 'fc-col-header',
- rowContent: headerRowContent
- }
- });
- }
- if (allDayContent) {
- sections.push({
- type: 'body',
- key: 'all-day',
- chunk: { content: allDayContent }
- });
- sections.push({
- type: 'body',
- key: 'all-day-divider',
- outerContent: ( // TODO: rename to cellContent so don't need to define ?
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", { className: 'fc-scrollgrid-section' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", { className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') })))
- });
- }
- sections.push({
- type: 'body',
- key: 'body',
- liquid: true,
- expandRows: Boolean(context.options.expandRows),
- chunk: {
- scrollerElRef: this.scrollerElRef,
- content: timeContent
- }
- });
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["ViewRoot"], { viewSpec: context.viewSpec, elRef: this.rootElRef }, function (rootElRef, classNames) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: ['fc-timegrid'].concat(classNames).join(' '), ref: rootElRef },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["SimpleScrollGrid"], { liquid: !props.isHeightAuto && !props.forPrint, cols: [{ width: 'shrink' }], sections: sections }))); }));
- };
- TimeColsView.prototype.renderHScrollLayout = function (headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords // yuck
- ) {
- var _this = this;
- var ScrollGrid = this.context.pluginHooks.scrollGridImpl;
- if (!ScrollGrid) {
- throw new Error('No ScrollGrid implementation');
- }
- var _a = this, context = _a.context, props = _a.props;
- var stickyHeaderDates = !props.forPrint && Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getStickyHeaderDates"])(context.options);
- var stickyFooterScrollbar = !props.forPrint && Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getStickyFooterScrollbar"])(context.options);
- var sections = [];
- if (headerRowContent) {
- sections.push({
- type: 'header',
- key: 'header',
- isSticky: stickyHeaderDates,
- syncRowHeights: true,
- chunks: [
- {
- key: 'axis',
- rowContent: function (arg) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", null, _this.renderHeadAxis(arg.rowSyncHeights[0]))); }
- },
- {
- key: 'cols',
- elRef: this.headerElRef,
- tableClassName: 'fc-col-header',
- rowContent: headerRowContent
- }
- ]
- });
- }
- if (allDayContent) {
- sections.push({
- type: 'body',
- key: 'all-day',
- syncRowHeights: true,
- chunks: [
- {
- key: 'axis',
- rowContent: function (contentArg) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", null, _this.renderTableRowAxis(contentArg.rowSyncHeights[0]))); },
- },
- {
- key: 'cols',
- content: allDayContent
- }
- ]
- });
- sections.push({
- key: 'all-day-divider',
- type: 'body',
- outerContent: ( // TODO: rename to cellContent so don't need to define ?
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", { className: 'fc-scrollgrid-section' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", { colSpan: 2, className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') })))
- });
- }
- var isNowIndicator = context.options.nowIndicator;
- sections.push({
- type: 'body',
- key: 'body',
- liquid: true,
- expandRows: Boolean(context.options.expandRows),
- chunks: [
- {
- key: 'axis',
- content: function (arg) {
- // TODO: make this now-indicator arrow more DRY with TimeColsContent
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-axis-chunk' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("table", null,
- arg.tableColGroupNode,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tbody", null,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeBodyAxis, { slatMetas: slatMetas }))),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-now-indicator-container' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["NowTimer"], { unit: isNowIndicator ? 'minute' : 'day' /* hacky */ }, function (nowDate) {
- var nowIndicatorTop = isNowIndicator &&
- slatCoords &&
- slatCoords.safeComputeTop(nowDate); // might return void
- if (typeof nowIndicatorTop === 'number') {
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["NowIndicatorRoot"], { isAxis: true, date: nowDate }, function (rootElRef, classNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { ref: rootElRef, className: ['fc-timegrid-now-indicator-arrow'].concat(classNames).join(' '), style: { top: nowIndicatorTop } }, innerContent)); }));
- }
- }))));
- }
- },
- {
- key: 'cols',
- scrollerElRef: this.scrollerElRef,
- content: timeContent
- }
- ]
- });
- if (stickyFooterScrollbar) {
- sections.push({
- key: 'footer',
- type: 'footer',
- isSticky: true,
- chunks: [
- {
- key: 'axis',
- content: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["renderScrollShim"]
- },
- {
- key: 'cols',
- content: _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["renderScrollShim"]
- }
- ]
- });
- }
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["ViewRoot"], { viewSpec: context.viewSpec, elRef: this.rootElRef }, function (rootElRef, classNames) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: ['fc-timegrid'].concat(classNames).join(' '), ref: rootElRef },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, colGroups: [
- { width: 'shrink', cols: [{ width: 'shrink' }] },
- { cols: [{ span: colCnt, minWidth: dayMinWidth }] }
- ], sections: sections }))); }));
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- TimeColsView.prototype.getAllDayMaxEventProps = function () {
- var _a = this.context.options, dayMaxEvents = _a.dayMaxEvents, dayMaxEventRows = _a.dayMaxEventRows;
- if (dayMaxEvents === true || dayMaxEventRows === true) { // is auto?
- dayMaxEvents = undefined;
- dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS; // make sure "auto" goes to a real number
- }
- return { dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows };
- };
- return TimeColsView;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-function renderAllDayInner(hookProps) {
- return hookProps.text;
-}
-var TimeBodyAxis = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeBodyAxis, _super);
- function TimeBodyAxis() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeBodyAxis.prototype.render = function () {
- return this.props.slatMetas.map(function (slatMeta) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", { key: slatMeta.key },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColsAxisCell, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, slatMeta)))); });
- };
- return TimeBodyAxis;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-
-function splitSegsByCol(segs, colCnt) {
- var segsByCol = [];
- var i;
- for (i = 0; i < colCnt; i++) {
- segsByCol.push([]);
- }
- if (segs) {
- for (i = 0; i < segs.length; i++) {
- segsByCol[segs[i].col].push(segs[i]);
- }
- }
- return segsByCol;
-}
-function splitInteractionByCol(ui, colCnt) {
- var byRow = [];
- if (!ui) {
- for (var i = 0; i < colCnt; i++) {
- byRow[i] = null;
- }
- }
- else {
- for (var i = 0; i < colCnt; i++) {
- byRow[i] = {
- affectedInstances: ui.affectedInstances,
- isEvent: ui.isEvent,
- segs: []
- };
- }
- for (var _i = 0, _a = ui.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- byRow[seg.col].segs.push(seg);
- }
- }
- return byRow;
-}
-
-// UNFORTUNATELY, assigns results to the top/bottom/level/forwardCoord/backwardCoord props of the actual segs.
-// TODO: return hash (by instanceId) of results
-function computeSegCoords(segs, dayDate, slatCoords, eventMinHeight, eventOrderSpecs) {
- computeSegVerticals(segs, dayDate, slatCoords, eventMinHeight);
- return computeSegHorizontals(segs, eventOrderSpecs); // requires top/bottom from computeSegVerticals
-}
-// For each segment in an array, computes and assigns its top and bottom properties
-function computeSegVerticals(segs, dayDate, slatCoords, eventMinHeight) {
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- seg.top = slatCoords.computeDateTop(seg.start, dayDate);
- seg.bottom = Math.max(seg.top + (eventMinHeight || 0), // yuck
- slatCoords.computeDateTop(seg.end, dayDate));
- }
-}
-// Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
-// Assumed the segs are already ordered.
-// NOTE: Also reorders the given array by date!
-function computeSegHorizontals(segs, eventOrderSpecs) {
- // IMPORTANT TO CLEAR OLD RESULTS :(
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- seg.level = null;
- seg.forwardCoord = null;
- seg.backwardCoord = null;
- seg.forwardPressure = null;
- }
- segs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["sortEventSegs"])(segs, eventOrderSpecs);
- var level0;
- var levels = buildSlotSegLevels(segs);
- computeForwardSlotSegs(levels);
- if ((level0 = levels[0])) {
- for (var _a = 0, level0_1 = level0; _a < level0_1.length; _a++) {
- var seg = level0_1[_a];
- computeSlotSegPressures(seg);
- }
- for (var _b = 0, level0_2 = level0; _b < level0_2.length; _b++) {
- var seg = level0_2[_b];
- computeSegForwardBack(seg, 0, 0, eventOrderSpecs);
- }
- }
- return segs;
-}
-// Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
-// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
-function buildSlotSegLevels(segs) {
- var levels = [];
- var i;
- var seg;
- var j;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- // go through all the levels and stop on the first level where there are no collisions
- for (j = 0; j < levels.length; j++) {
- if (!computeSlotSegCollisions(seg, levels[j]).length) {
- break;
- }
- }
- seg.level = j;
- (levels[j] || (levels[j] = [])).push(seg);
- }
- return levels;
-}
-// Find all the segments in `otherSegs` that vertically collide with `seg`.
-// Append into an optionally-supplied `results` array and return.
-function computeSlotSegCollisions(seg, otherSegs, results) {
- if (results === void 0) { results = []; }
- for (var i = 0; i < otherSegs.length; i++) {
- if (isSlotSegCollision(seg, otherSegs[i])) {
- results.push(otherSegs[i]);
- }
- }
- return results;
-}
-// Do these segments occupy the same vertical space?
-function isSlotSegCollision(seg1, seg2) {
- return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
-}
-// For every segment, figure out the other segments that are in subsequent
-// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
-function computeForwardSlotSegs(levels) {
- var i;
- var level;
- var j;
- var seg;
- var k;
- for (i = 0; i < levels.length; i++) {
- level = levels[i];
- for (j = 0; j < level.length; j++) {
- seg = level[j];
- seg.forwardSegs = [];
- for (k = i + 1; k < levels.length; k++) {
- computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
- }
- }
- }
-}
-// Figure out which path forward (via seg.forwardSegs) results in the longest path until
-// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
-function computeSlotSegPressures(seg) {
- var forwardSegs = seg.forwardSegs;
- var forwardPressure = 0;
- var i;
- var forwardSeg;
- if (seg.forwardPressure == null) { // not already computed
- for (i = 0; i < forwardSegs.length; i++) {
- forwardSeg = forwardSegs[i];
- // figure out the child's maximum forward path
- computeSlotSegPressures(forwardSeg);
- // either use the existing maximum, or use the child's forward pressure
- // plus one (for the forwardSeg itself)
- forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
- }
- seg.forwardPressure = forwardPressure;
- }
-}
-// Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
-// from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
-// seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
-//
-// The segment might be part of a "series", which means consecutive segments with the same pressure
-// who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
-// segments behind this one in the current series, and `seriesBackwardCoord` is the starting
-// coordinate of the first segment in the series.
-function computeSegForwardBack(seg, seriesBackwardPressure, seriesBackwardCoord, eventOrderSpecs) {
- var forwardSegs = seg.forwardSegs;
- var i;
- if (seg.forwardCoord == null) { // not already computed
- if (!forwardSegs.length) {
- // if there are no forward segments, this segment should butt up against the edge
- seg.forwardCoord = 1;
- }
- else {
- // sort highest pressure first
- sortForwardSegs(forwardSegs, eventOrderSpecs);
- // this segment's forwardCoord will be calculated from the backwardCoord of the
- // highest-pressure forward segment.
- computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord, eventOrderSpecs);
- seg.forwardCoord = forwardSegs[0].backwardCoord;
- }
- // calculate the backwardCoord from the forwardCoord. consider the series
- seg.backwardCoord = seg.forwardCoord -
- (seg.forwardCoord - seriesBackwardCoord) / // available width for series
- (seriesBackwardPressure + 1); // # of segments in the series
- // use this segment's coordinates to computed the coordinates of the less-pressurized
- // forward segments
- for (i = 0; i < forwardSegs.length; i++) {
- computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord, eventOrderSpecs);
- }
- }
-}
-function sortForwardSegs(forwardSegs, eventOrderSpecs) {
- var objs = forwardSegs.map(buildTimeGridSegCompareObj);
- var specs = [
- // put higher-pressure first
- { field: 'forwardPressure', order: -1 },
- // put segments that are closer to initial edge first (and favor ones with no coords yet)
- { field: 'backwardCoord', order: 1 }
- ].concat(eventOrderSpecs);
- objs.sort(function (obj0, obj1) {
- return Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["compareByFieldSpecs"])(obj0, obj1, specs);
- });
- return objs.map(function (c) {
- return c._seg;
- });
-}
-function buildTimeGridSegCompareObj(seg) {
- var obj = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["buildSegCompareObj"])(seg);
- obj.forwardPressure = seg.forwardPressure;
- obj.backwardCoord = seg.backwardCoord;
- return obj;
-}
-
-var DEFAULT_TIME_FORMAT = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createFormatter"])({
- hour: 'numeric',
- minute: '2-digit',
- meridiem: false
-});
-var TimeColEvent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeColEvent, _super);
- function TimeColEvent() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeColEvent.prototype.render = function () {
- var classNames = [
- 'fc-timegrid-event',
- 'fc-v-event'
- ];
- if (this.props.isCondensed) {
- classNames.push('fc-timegrid-event-condensed');
- }
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["StandardEvent"], Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, this.props, { defaultTimeFormat: DEFAULT_TIME_FORMAT, extraClassNames: classNames })));
- };
- return TimeColEvent;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-
-_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["config"].timeGridEventCondensedHeight = 30;
-var TimeCol = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeCol, _super);
- function TimeCol() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeCol.prototype.render = function () {
- var _this = this;
- var _a = this, props = _a.props, context = _a.context;
- var isSelectMirror = context.options.selectMirror;
- var mirrorSegs = (props.eventDrag && props.eventDrag.segs) ||
- (props.eventResize && props.eventResize.segs) ||
- (isSelectMirror && props.dateSelectionSegs) ||
- [];
- var interactionAffectedInstances = // TODO: messy way to compute this
- (props.eventDrag && props.eventDrag.affectedInstances) ||
- (props.eventResize && props.eventResize.affectedInstances) ||
- {};
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayCellRoot"], { elRef: props.elRef, date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraHookProps: props.extraHookProps }, function (rootElRef, classNames, dataAttrs) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ ref: rootElRef, className: ['fc-timegrid-col'].concat(classNames, props.extraClassNames || []).join(' ') }, dataAttrs, props.extraDataAttrs),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-col-frame' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-col-bg' },
- _this.renderFillSegs(props.businessHourSegs, 'non-business'),
- _this.renderFillSegs(props.bgEventSegs, 'bg-event'),
- _this.renderFillSegs(props.dateSelectionSegs, 'highlight')),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-col-events' }, _this.renderFgSegs(props.fgEventSegs, interactionAffectedInstances)),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-col-events' }, _this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror)
- // TODO: pass in left/right instead of using only computeSegTopBottomCss
- )),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-now-indicator-container' }, _this.renderNowIndicator(props.nowIndicatorSegs)),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColMisc, { date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraHookProps: props.extraHookProps })))); }));
- };
- TimeCol.prototype.renderFgSegs = function (segs, segIsInvisible, isDragging, isResizing, isDateSelecting) {
- var props = this.props;
- if (props.forPrint) {
- return this.renderPrintFgSegs(segs);
- }
- else if (props.slatCoords) {
- return this.renderPositionedFgSegs(segs, segIsInvisible, isDragging, isResizing, isDateSelecting);
- }
- };
- TimeCol.prototype.renderPrintFgSegs = function (segs) {
- var props = this.props;
- return segs.map(function (seg) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-event-harness', key: seg.eventRange.instance.instanceId },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColEvent, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isCondensed: false }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, props.todayRange, props.nowDate))))); });
- };
- TimeCol.prototype.renderPositionedFgSegs = function (segs, segIsInvisible, isDragging, isResizing, isDateSelecting) {
- var _this = this;
- var _a = this, context = _a.context, props = _a.props;
- // assigns TO THE SEGS THEMSELVES
- // also, receives resorted array
- segs = computeSegCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight, context.options.eventOrder);
- return segs.map(function (seg) {
- var instanceId = seg.eventRange.instance.instanceId;
- var isMirror = isDragging || isResizing || isDateSelecting;
- var positionCss = isMirror ? Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ left: 0, right: 0 }, _this.computeSegTopBottomCss(seg)) :
- _this.computeFgSegPositionCss(seg);
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-event-harness' + (seg.level > 0 ? ' fc-timegrid-event-harness-inset' : ''), key: instanceId, style: Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ visibility: segIsInvisible[instanceId] ? 'hidden' : '' }, positionCss) },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColEvent, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === props.eventSelection, isCondensed: (seg.bottom - seg.top) < _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["config"].timeGridEventCondensedHeight }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, props.todayRange, props.nowDate)))));
- });
- };
- TimeCol.prototype.renderFillSegs = function (segs, fillType) {
- var _this = this;
- var _a = this, context = _a.context, props = _a.props;
- if (!props.slatCoords) {
- return;
- }
- // BAD: assigns TO THE SEGS THEMSELVES
- computeSegVerticals(segs, props.date, props.slatCoords, context.options.eventMinHeight);
- var children = segs.map(function (seg) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { key: Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["buildEventRangeKey"])(seg.eventRange), className: 'fc-timegrid-bg-harness', style: _this.computeSegTopBottomCss(seg) }, fillType === 'bg-event' ?
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BgEvent"], Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ seg: seg }, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["getSegMeta"])(seg, props.todayRange, props.nowDate))) :
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["renderFill"])(fillType))); });
- return Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, children);
- };
- TimeCol.prototype.renderNowIndicator = function (segs) {
- var _a = this.props, slatCoords = _a.slatCoords, date = _a.date;
- if (!slatCoords) {
- return;
- }
- return segs.map(function (seg, i) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["NowIndicatorRoot"], { isAxis: false, date: date, key: i /* key doesn't matter. will only ever be one */ }, function (rootElRef, classNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { ref: rootElRef, className: ['fc-timegrid-now-indicator-line'].concat(classNames).join(' '), style: { top: slatCoords.computeDateTop(seg.start, date) } }, innerContent)); })); });
- };
- TimeCol.prototype.computeFgSegPositionCss = function (seg) {
- var _a = this.context, isRtl = _a.isRtl, options = _a.options;
- var shouldOverlap = options.slotEventOverlap;
- var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
- var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
- var left; // amount of space from left edge, a fraction of the total width
- var right; // amount of space from right edge, a fraction of the total width
- if (shouldOverlap) {
- // double the width, but don't go beyond the maximum forward coordinate (1.0)
- forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
- }
- if (isRtl) {
- left = 1 - forwardCoord;
- right = backwardCoord;
- }
- else {
- left = backwardCoord;
- right = 1 - forwardCoord;
- }
- var props = {
- zIndex: seg.level + 1,
- left: left * 100 + '%',
- right: right * 100 + '%'
- };
- if (shouldOverlap && seg.forwardPressure) {
- // add padding to the edge so that forward stacked events don't cover the resizer's icon
- props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
- }
- return Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])(Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, props), this.computeSegTopBottomCss(seg));
- };
- TimeCol.prototype.computeSegTopBottomCss = function (seg) {
- return {
- top: seg.top,
- bottom: -seg.bottom
- };
- };
- return TimeCol;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-var TimeColMisc = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeColMisc, _super);
- function TimeColMisc() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeColMisc.prototype.render = function () {
- var props = this.props;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayCellContent"], { date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraHookProps: props.extraHookProps }, function (innerElRef, innerContent) { return (innerContent &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-col-misc', ref: innerElRef }, innerContent)); }));
- };
- return TimeColMisc;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-
-var TimeColsContent = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeColsContent, _super);
- function TimeColsContent() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.splitFgEventSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByCol);
- _this.splitBgEventSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByCol);
- _this.splitBusinessHourSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByCol);
- _this.splitNowIndicatorSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByCol);
- _this.splitDateSelectionSegs = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitSegsByCol);
- _this.splitEventDrag = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitInteractionByCol);
- _this.splitEventResize = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(splitInteractionByCol);
- _this.rootElRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.cellElRefs = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["RefMap"]();
- return _this;
- }
- TimeColsContent.prototype.render = function () {
- var _this = this;
- var _a = this, props = _a.props, context = _a.context;
- var nowIndicatorTop = context.options.nowIndicator &&
- props.slatCoords &&
- props.slatCoords.safeComputeTop(props.nowDate); // might return void
- var colCnt = props.cells.length;
- var fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);
- var bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);
- var businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);
- var nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);
- var dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);
- var eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);
- var eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-cols', ref: this.rootElRef },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("table", { style: {
- minWidth: props.tableMinWidth,
- width: props.clientWidth
- } },
- props.tableColGroupNode,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tbody", null,
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("tr", null,
- props.axis &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("td", { className: 'fc-timegrid-col fc-timegrid-axis' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-col-frame' },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-now-indicator-container' }, typeof nowIndicatorTop === 'number' &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["NowIndicatorRoot"], { isAxis: true, date: props.nowDate }, function (rootElRef, classNames, innerElRef, innerContent) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { ref: rootElRef, className: ['fc-timegrid-now-indicator-arrow'].concat(classNames).join(' '), style: { top: nowIndicatorTop } }, innerContent)); })))),
- props.cells.map(function (cell, i) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeCol, { key: cell.key, elRef: _this.cellElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, nowDate: props.nowDate, todayRange: props.todayRange, extraHookProps: cell.extraHookProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, fgEventSegs: fgEventSegsByRow[i], bgEventSegs: bgEventSegsByRow[i], businessHourSegs: businessHourSegsByRow[i], nowIndicatorSegs: nowIndicatorSegsByRow[i], dateSelectionSegs: dateSelectionSegsByRow[i], eventDrag: eventDragByRow[i], eventResize: eventResizeByRow[i], slatCoords: props.slatCoords, eventSelection: props.eventSelection, forPrint: props.forPrint })); }))))));
- };
- TimeColsContent.prototype.componentDidMount = function () {
- this.updateCoords();
- };
- TimeColsContent.prototype.componentDidUpdate = function () {
- this.updateCoords();
- };
- TimeColsContent.prototype.updateCoords = function () {
- var props = this.props;
- if (props.onColCoords &&
- props.clientWidth !== null // means sizing has stabilized
- ) {
- props.onColCoords(new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["PositionCache"](this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.cells), true, // horizontal
- false));
- }
- };
- return TimeColsContent;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-function collectCellEls(elMap, cells) {
- return cells.map(function (cell) { return elMap[cell.key]; });
-}
-
-/* A component that renders one or more columns of vertical time slots
-----------------------------------------------------------------------------------------------------------------------*/
-var TimeCols = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(TimeCols, _super);
- function TimeCols() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.processSlotOptions = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(processSlotOptions);
- _this.state = {
- slatCoords: null
- };
- _this.handleScrollRequest = function (request) {
- var onScrollTopRequest = _this.props.onScrollTopRequest;
- var slatCoords = _this.state.slatCoords;
- if (onScrollTopRequest && slatCoords) {
- if (request.time) {
- var top_1 = slatCoords.computeTimeTop(request.time);
- top_1 = Math.ceil(top_1); // zoom can give weird floating-point values. rather scroll a little bit further
- if (top_1) {
- top_1++;
- } // to overcome top border that slots beyond the first have. looks better
- onScrollTopRequest(top_1);
- }
- return true;
- }
- };
- _this.handleColCoords = function (colCoords) {
- _this.colCoords = colCoords;
- };
- _this.handleSlatCoords = function (slatCoords) {
- _this.setState({ slatCoords: slatCoords });
- if (_this.props.onSlatCoords) {
- _this.props.onSlatCoords(slatCoords);
- }
- };
- return _this;
- }
- TimeCols.prototype.render = function () {
- var _a = this, props = _a.props, state = _a.state;
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { className: 'fc-timegrid-body', ref: props.rootElRef, style: {
- // these props are important to give this wrapper correct dimensions for interactions
- // TODO: if we set it here, can we avoid giving to inner tables?
- width: props.clientWidth,
- minWidth: props.tableMinWidth
- } },
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColsSlats, { axis: props.axis, dateProfile: props.dateProfile, slatMetas: props.slatMetas, clientWidth: props.clientWidth, minHeight: props.expandRows ? props.clientHeight : '', tableMinWidth: props.tableMinWidth, tableColGroupNode: props.axis ? props.tableColGroupNode : null /* axis depends on the colgroup's shrinking */, onCoords: this.handleSlatCoords }),
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeColsContent, { cells: props.cells, axis: props.axis, dateProfile: props.dateProfile, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange, nowDate: props.nowDate, nowIndicatorSegs: props.nowIndicatorSegs, clientWidth: props.clientWidth, tableMinWidth: props.tableMinWidth, tableColGroupNode: props.tableColGroupNode, slatCoords: state.slatCoords, onColCoords: this.handleColCoords, forPrint: props.forPrint })));
- };
- TimeCols.prototype.componentDidMount = function () {
- this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);
- };
- TimeCols.prototype.componentDidUpdate = function (prevProps) {
- this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);
- };
- TimeCols.prototype.componentWillUnmount = function () {
- this.scrollResponder.detach();
- };
- TimeCols.prototype.positionToHit = function (positionLeft, positionTop) {
- var _a = this.context, dateEnv = _a.dateEnv, options = _a.options;
- var colCoords = this.colCoords;
- var dateProfile = this.props.dateProfile;
- var slatCoords = this.state.slatCoords;
- var _b = this.processSlotOptions(this.props.slotDuration, options.snapDuration), snapDuration = _b.snapDuration, snapsPerSlot = _b.snapsPerSlot;
- var colIndex = colCoords.leftToIndex(positionLeft);
- var slatIndex = slatCoords.positions.topToIndex(positionTop);
- if (colIndex != null && slatIndex != null) {
- var slatTop = slatCoords.positions.tops[slatIndex];
- var slatHeight = slatCoords.positions.getHeight(slatIndex);
- var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
- var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
- var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
- var dayDate = this.props.cells[colIndex].date;
- var time = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["addDurations"])(dateProfile.slotMinTime, Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["multiplyDuration"])(snapDuration, snapIndex));
- var start = dateEnv.add(dayDate, time);
- var end = dateEnv.add(start, snapDuration);
- return {
- col: colIndex,
- dateSpan: {
- range: { start: start, end: end },
- allDay: false
- },
- dayEl: colCoords.els[colIndex],
- relativeRect: {
- left: colCoords.lefts[colIndex],
- right: colCoords.rights[colIndex],
- top: slatTop,
- bottom: slatTop + slatHeight
- }
- };
- }
- };
- return TimeCols;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["BaseComponent"]));
-function processSlotOptions(slotDuration, snapDurationOverride) {
- var snapDuration = snapDurationOverride || slotDuration;
- var snapsPerSlot = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["wholeDivideDurations"])(slotDuration, snapDuration);
- if (snapsPerSlot === null) {
- snapDuration = slotDuration;
- snapsPerSlot = 1;
- // TODO: say warning?
- }
- return { snapDuration: snapDuration, snapsPerSlot: snapsPerSlot };
-}
-
-var DayTimeCols = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(DayTimeCols, _super);
- function DayTimeCols() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildDayRanges = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(buildDayRanges);
- _this.slicer = new DayTimeColsSlicer();
- _this.timeColsRef = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createRef"])();
- _this.handleRootEl = function (rootEl) {
- if (rootEl) {
- _this.context.registerInteractiveComponent(_this, { el: rootEl });
- }
- else {
- _this.context.unregisterInteractiveComponent(_this);
- }
- };
- return _this;
- }
- DayTimeCols.prototype.render = function () {
- var _this = this;
- var _a = this, props = _a.props, context = _a.context;
- var dateProfile = props.dateProfile, dayTableModel = props.dayTableModel;
- var isNowIndicator = context.options.nowIndicator;
- var dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv);
- // give it the first row of cells
- // TODO: would move this further down hierarchy, but sliceNowDate needs it
- return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["NowTimer"], { unit: isNowIndicator ? 'minute' : 'day' }, function (nowDate, todayRange) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(TimeCols, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({ ref: _this.timeColsRef, rootElRef: _this.handleRootEl }, _this.slicer.sliceProps(props, dateProfile, null, context, dayRanges), { forPrint: props.forPrint, axis: props.axis, dateProfile: dateProfile, slatMetas: props.slatMetas, slotDuration: props.slotDuration, cells: dayTableModel.cells[0], tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, clientWidth: props.clientWidth, clientHeight: props.clientHeight, expandRows: props.expandRows, nowDate: nowDate, nowIndicatorSegs: isNowIndicator && _this.slicer.sliceNowDate(nowDate, context, dayRanges), todayRange: todayRange, onScrollTopRequest: props.onScrollTopRequest, onSlatCoords: props.onSlatCoords }))); }));
- };
- DayTimeCols.prototype.queryHit = function (positionLeft, positionTop) {
- var rawHit = this.timeColsRef.current.positionToHit(positionLeft, positionTop);
- if (rawHit) {
- return {
- component: this,
- dateSpan: rawHit.dateSpan,
- dayEl: rawHit.dayEl,
- rect: {
- left: rawHit.relativeRect.left,
- right: rawHit.relativeRect.right,
- top: rawHit.relativeRect.top,
- bottom: rawHit.relativeRect.bottom
- },
- layer: 0
- };
- }
- };
- return DayTimeCols;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DateComponent"]));
-function buildDayRanges(dayTableModel, dateProfile, dateEnv) {
- var ranges = [];
- for (var _i = 0, _a = dayTableModel.headerDates; _i < _a.length; _i++) {
- var date = _a[_i];
- ranges.push({
- start: dateEnv.add(date, dateProfile.slotMinTime),
- end: dateEnv.add(date, dateProfile.slotMaxTime)
- });
- }
- return ranges;
-}
-var DayTimeColsSlicer = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(DayTimeColsSlicer, _super);
- function DayTimeColsSlicer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- DayTimeColsSlicer.prototype.sliceRange = function (range, dayRanges) {
- var segs = [];
- for (var col = 0; col < dayRanges.length; col++) {
- var segRange = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["intersectRanges"])(range, dayRanges[col]);
- if (segRange) {
- segs.push({
- start: segRange.start,
- end: segRange.end,
- isStart: segRange.start.valueOf() === range.start.valueOf(),
- isEnd: segRange.end.valueOf() === range.end.valueOf(),
- col: col
- });
- }
- }
- return segs;
- };
- return DayTimeColsSlicer;
-}(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["Slicer"]));
-
-var DayTimeColsView = /** @class */ (function (_super) {
- Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__extends"])(DayTimeColsView, _super);
- function DayTimeColsView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildTimeColsModel = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(buildTimeColsModel);
- _this.buildSlatMetas = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["memoize"])(buildSlatMetas);
- return _this;
- }
- DayTimeColsView.prototype.render = function () {
- var _this = this;
- var _a = this.context, options = _a.options, dateEnv = _a.dateEnv, dateProfileGenerator = _a.dateProfileGenerator;
- var props = this.props;
- var dateProfile = props.dateProfile;
- var dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);
- var splitProps = this.allDaySplitter.splitProps(props);
- var slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);
- var dayMinWidth = options.dayMinWidth;
- var hasAttachedAxis = !dayMinWidth;
- var hasDetachedAxis = dayMinWidth;
- var headerContent = options.dayHeaders &&
- Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayHeader"], { dates: dayTableModel.headerDates, dateProfile: dateProfile, datesRepDistinctDays: true, renderIntro: hasAttachedAxis ? this.renderHeadAxis : null });
- var allDayContent = (options.allDaySlot !== false) && (function (contentArg) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_fullcalendar_daygrid__WEBPACK_IMPORTED_MODULE_3__["DayTable"], Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, splitProps['allDay'], { dateProfile: dateProfile, dayTableModel: dayTableModel, nextDayThreshold: options.nextDayThreshold, tableMinWidth: contentArg.tableMinWidth, colGroupNode: contentArg.tableColGroupNode, renderRowIntro: hasAttachedAxis ? _this.renderTableRowAxis : null, showWeekNumbers: false, expandRows: false, headerAlignElRef: _this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }, _this.getAllDayMaxEventProps()))); });
- var timeGridContent = function (contentArg) { return (Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createElement"])(DayTimeCols, Object(tslib__WEBPACK_IMPORTED_MODULE_2__["__assign"])({}, splitProps['timed'], { dayTableModel: dayTableModel, dateProfile: dateProfile, axis: hasAttachedAxis, slotDuration: options.slotDuration, slatMetas: slatMetas, forPrint: props.forPrint, tableColGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, onSlatCoords: _this.handleSlatCoords, expandRows: contentArg.expandRows, onScrollTopRequest: _this.handleScrollTopRequest }))); };
- return hasDetachedAxis
- ? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords)
- : this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);
- };
- return DayTimeColsView;
-}(TimeColsView));
-function buildTimeColsModel(dateProfile, dateProfileGenerator) {
- var daySeries = new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DaySeriesModel"](dateProfile.renderRange, dateProfileGenerator);
- return new _fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["DayTableModel"](daySeries, false);
-}
-
-var OPTION_REFINERS = {
- allDaySlot: Boolean
-};
-
-var main = Object(_fullcalendar_common__WEBPACK_IMPORTED_MODULE_1__["createPlugin"])({
- initialView: 'timeGridWeek',
- optionRefiners: OPTION_REFINERS,
- views: {
- timeGrid: {
- component: DayTimeColsView,
- usesMinMaxTime: true,
- allDaySlot: true,
- slotDuration: '00:30:00',
- slotEventOverlap: true // a bad name. confused with overlap/constraint system
- },
- timeGridDay: {
- type: 'timeGrid',
- duration: { days: 1 }
- },
- timeGridWeek: {
- type: 'timeGrid',
- duration: { weeks: 1 }
- }
- }
-});
-
-/* harmony default export */ __webpack_exports__["default"] = (main);
-
-//# sourceMappingURL=main.js.map
-
-
-/***/ }),
-
-/***/ "./node_modules/@fullcalendar/timegrid/node_modules/tslib/tslib.es6.js":
-/*!*****************************************************************************!*\
- !*** ./node_modules/@fullcalendar/timegrid/node_modules/tslib/tslib.es6.js ***!
- \*****************************************************************************/
-/*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; });
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- }
- return __assign.apply(this, arguments);
-}
-
-function __rest(s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
-}
-
-function __decorate(decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-
-function __param(paramIndex, decorator) {
- return function (target, key) { decorator(target, key, paramIndex); }
-}
-
-function __metadata(metadataKey, metadataValue) {
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
-}
-
-function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-}
-
-function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-}
-
-var __createBinding = Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-});
-
-function __exportStar(m, exports) {
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
-}
-
-function __values(o) {
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
- if (m) return m.call(o);
- if (o && typeof o.length === "number") return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-
-function __read(o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
-}
-
-function __spread() {
- for (var ar = [], i = 0; i < arguments.length; i++)
- ar = ar.concat(__read(arguments[i]));
- return ar;
-}
-
-function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
-};
-
-function __await(v) {
- return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-
-function __asyncGenerator(thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
- function fulfill(value) { resume("next", value); }
- function reject(value) { resume("throw", value); }
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-}
-
-function __asyncDelegator(o) {
- var i, p;
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
-}
-
-function __asyncValues(o) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var m = o[Symbol.asyncIterator], i;
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
-}
-
-function __makeTemplateObject(cooked, raw) {
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
- return cooked;
-};
-
-var __setModuleDefault = Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-};
-
-function __importStar(mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-}
-
-function __importDefault(mod) {
- return (mod && mod.__esModule) ? mod : { default: mod };
-}
-
-function __classPrivateFieldGet(receiver, privateMap) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to get private field on non-instance");
- }
- return privateMap.get(receiver);
-}
-
-function __classPrivateFieldSet(receiver, privateMap, value) {
- if (!privateMap.has(receiver)) {
- throw new TypeError("attempted to set private field on non-instance");
- }
- privateMap.set(receiver, value);
- return value;
-}
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/index.js":
-/*!*************************************!*\
- !*** ./node_modules/axios/index.js ***!
- \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/adapters/xhr.js":
-/*!************************************************!*\
- !*** ./node_modules/axios/lib/adapters/xhr.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js");
-var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
-var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js");
-var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js");
-var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js");
-var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js");
-
-module.exports = function xhrAdapter(config) {
- return new Promise(function dispatchXhrRequest(resolve, reject) {
- var requestData = config.data;
- var requestHeaders = config.headers;
-
- if (utils.isFormData(requestData)) {
- delete requestHeaders['Content-Type']; // Let the browser set it
- }
-
- var request = new XMLHttpRequest();
-
- // HTTP basic authentication
- if (config.auth) {
- var username = config.auth.username || '';
- var password = config.auth.password || '';
- requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
- }
-
- var fullPath = buildFullPath(config.baseURL, config.url);
- request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
-
- // Set the request timeout in MS
- request.timeout = config.timeout;
-
- // Listen for ready state
- request.onreadystatechange = function handleLoad() {
- if (!request || request.readyState !== 4) {
- return;
- }
-
- // The request errored out and we didn't get a response, this will be
- // handled by onerror instead
- // With one exception: request that using file: protocol, most browsers
- // will return status as 0 even though it's a successful request
- if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
- return;
- }
-
- // Prepare the response
- var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
- var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
- var response = {
- data: responseData,
- status: request.status,
- statusText: request.statusText,
- headers: responseHeaders,
- config: config,
- request: request
- };
-
- settle(resolve, reject, response);
-
- // Clean up request
- request = null;
- };
-
- // Handle browser request cancellation (as opposed to a manual cancellation)
- request.onabort = function handleAbort() {
- if (!request) {
- return;
- }
-
- reject(createError('Request aborted', config, 'ECONNABORTED', request));
-
- // Clean up request
- request = null;
- };
-
- // Handle low level network errors
- request.onerror = function handleError() {
- // Real errors are hidden from us by the browser
- // onerror should only fire if it's a network error
- reject(createError('Network Error', config, null, request));
-
- // Clean up request
- request = null;
- };
-
- // Handle timeout
- request.ontimeout = function handleTimeout() {
- var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
- if (config.timeoutErrorMessage) {
- timeoutErrorMessage = config.timeoutErrorMessage;
- }
- reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',
- request));
-
- // Clean up request
- request = null;
- };
-
- // Add xsrf header
- // This is only done if running in a standard browser environment.
- // Specifically not if we're in a web worker, or react-native.
- if (utils.isStandardBrowserEnv()) {
- var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js");
-
- // Add xsrf header
- var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
- cookies.read(config.xsrfCookieName) :
- undefined;
-
- if (xsrfValue) {
- requestHeaders[config.xsrfHeaderName] = xsrfValue;
- }
- }
-
- // Add headers to the request
- if ('setRequestHeader' in request) {
- utils.forEach(requestHeaders, function setRequestHeader(val, key) {
- if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
- // Remove Content-Type if data is undefined
- delete requestHeaders[key];
- } else {
- // Otherwise add header to the request
- request.setRequestHeader(key, val);
- }
- });
- }
-
- // Add withCredentials to request if needed
- if (!utils.isUndefined(config.withCredentials)) {
- request.withCredentials = !!config.withCredentials;
- }
-
- // Add responseType to request if needed
- if (config.responseType) {
- try {
- request.responseType = config.responseType;
- } catch (e) {
- // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
- // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
- if (config.responseType !== 'json') {
- throw e;
- }
- }
- }
-
- // Handle progress if needed
- if (typeof config.onDownloadProgress === 'function') {
- request.addEventListener('progress', config.onDownloadProgress);
- }
-
- // Not all browsers support upload events
- if (typeof config.onUploadProgress === 'function' && request.upload) {
- request.upload.addEventListener('progress', config.onUploadProgress);
- }
-
- if (config.cancelToken) {
- // Handle cancellation
- config.cancelToken.promise.then(function onCanceled(cancel) {
- if (!request) {
- return;
- }
-
- request.abort();
- reject(cancel);
- // Clean up request
- request = null;
- });
- }
-
- if (requestData === undefined) {
- requestData = null;
- }
-
- // Send the request
- request.send(requestData);
- });
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/axios.js":
-/*!*****************************************!*\
- !*** ./node_modules/axios/lib/axios.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
-var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
-var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js");
-var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
-var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js");
-
-/**
- * Create an instance of Axios
- *
- * @param {Object} defaultConfig The default config for the instance
- * @return {Axios} A new instance of Axios
- */
-function createInstance(defaultConfig) {
- var context = new Axios(defaultConfig);
- var instance = bind(Axios.prototype.request, context);
-
- // Copy axios.prototype to instance
- utils.extend(instance, Axios.prototype, context);
-
- // Copy context to instance
- utils.extend(instance, context);
-
- return instance;
-}
-
-// Create the default instance to be exported
-var axios = createInstance(defaults);
-
-// Expose Axios class to allow class inheritance
-axios.Axios = Axios;
-
-// Factory for creating new instances
-axios.create = function create(instanceConfig) {
- return createInstance(mergeConfig(axios.defaults, instanceConfig));
-};
-
-// Expose Cancel & CancelToken
-axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
-axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js");
-axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
-
-// Expose all/spread
-axios.all = function all(promises) {
- return Promise.all(promises);
-};
-axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js");
-
-module.exports = axios;
-
-// Allow use of default import syntax in TypeScript
-module.exports.default = axios;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/Cancel.js":
-/*!*************************************************!*\
- !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
- \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * A `Cancel` is an object that is thrown when an operation is canceled.
- *
- * @class
- * @param {string=} message The message.
- */
-function Cancel(message) {
- this.message = message;
-}
-
-Cancel.prototype.toString = function toString() {
- return 'Cancel' + (this.message ? ': ' + this.message : '');
-};
-
-Cancel.prototype.__CANCEL__ = true;
-
-module.exports = Cancel;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
- \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
-
-/**
- * A `CancelToken` is an object that can be used to request cancellation of an operation.
- *
- * @class
- * @param {Function} executor The executor function.
- */
-function CancelToken(executor) {
- if (typeof executor !== 'function') {
- throw new TypeError('executor must be a function.');
- }
-
- var resolvePromise;
- this.promise = new Promise(function promiseExecutor(resolve) {
- resolvePromise = resolve;
- });
-
- var token = this;
- executor(function cancel(message) {
- if (token.reason) {
- // Cancellation has already been requested
- return;
- }
-
- token.reason = new Cancel(message);
- resolvePromise(token.reason);
- });
-}
-
-/**
- * Throws a `Cancel` if cancellation has been requested.
- */
-CancelToken.prototype.throwIfRequested = function throwIfRequested() {
- if (this.reason) {
- throw this.reason;
- }
-};
-
-/**
- * Returns an object that contains a new `CancelToken` and a function that, when called,
- * cancels the `CancelToken`.
- */
-CancelToken.source = function source() {
- var cancel;
- var token = new CancelToken(function executor(c) {
- cancel = c;
- });
- return {
- token: token,
- cancel: cancel
- };
-};
-
-module.exports = CancelToken;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/isCancel.js":
-/*!***************************************************!*\
- !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
- \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-module.exports = function isCancel(value) {
- return !!(value && value.__CANCEL__);
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/Axios.js":
-/*!**********************************************!*\
- !*** ./node_modules/axios/lib/core/Axios.js ***!
- \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
-var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js");
-var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js");
-var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
-
-/**
- * Create a new instance of Axios
- *
- * @param {Object} instanceConfig The default config for the instance
- */
-function Axios(instanceConfig) {
- this.defaults = instanceConfig;
- this.interceptors = {
- request: new InterceptorManager(),
- response: new InterceptorManager()
- };
-}
-
-/**
- * Dispatch a request
- *
- * @param {Object} config The config specific for this request (merged with this.defaults)
- */
-Axios.prototype.request = function request(config) {
- /*eslint no-param-reassign:0*/
- // Allow for axios('example/url'[, config]) a la fetch API
- if (typeof config === 'string') {
- config = arguments[1] || {};
- config.url = arguments[0];
- } else {
- config = config || {};
- }
-
- config = mergeConfig(this.defaults, config);
-
- // Set config.method
- if (config.method) {
- config.method = config.method.toLowerCase();
- } else if (this.defaults.method) {
- config.method = this.defaults.method.toLowerCase();
- } else {
- config.method = 'get';
- }
-
- // Hook up interceptors middleware
- var chain = [dispatchRequest, undefined];
- var promise = Promise.resolve(config);
-
- this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
- chain.unshift(interceptor.fulfilled, interceptor.rejected);
- });
-
- this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
- chain.push(interceptor.fulfilled, interceptor.rejected);
- });
-
- while (chain.length) {
- promise = promise.then(chain.shift(), chain.shift());
- }
-
- return promise;
-};
-
-Axios.prototype.getUri = function getUri(config) {
- config = mergeConfig(this.defaults, config);
- return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
-};
-
-// Provide aliases for supported request methods
-utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
- /*eslint func-names:0*/
- Axios.prototype[method] = function(url, config) {
- return this.request(utils.merge(config || {}, {
- method: method,
- url: url
- }));
- };
-});
-
-utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
- /*eslint func-names:0*/
- Axios.prototype[method] = function(url, data, config) {
- return this.request(utils.merge(config || {}, {
- method: method,
- url: url,
- data: data
- }));
- };
-});
-
-module.exports = Axios;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
-/*!***********************************************************!*\
- !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
- \***********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-function InterceptorManager() {
- this.handlers = [];
-}
-
-/**
- * Add a new interceptor to the stack
- *
- * @param {Function} fulfilled The function to handle `then` for a `Promise`
- * @param {Function} rejected The function to handle `reject` for a `Promise`
- *
- * @return {Number} An ID used to remove interceptor later
- */
-InterceptorManager.prototype.use = function use(fulfilled, rejected) {
- this.handlers.push({
- fulfilled: fulfilled,
- rejected: rejected
- });
- return this.handlers.length - 1;
-};
-
-/**
- * Remove an interceptor from the stack
- *
- * @param {Number} id The ID that was returned by `use`
- */
-InterceptorManager.prototype.eject = function eject(id) {
- if (this.handlers[id]) {
- this.handlers[id] = null;
- }
-};
-
-/**
- * Iterate over all the registered interceptors
- *
- * This method is particularly useful for skipping over any
- * interceptors that may have become `null` calling `eject`.
- *
- * @param {Function} fn The function to call for each interceptor
- */
-InterceptorManager.prototype.forEach = function forEach(fn) {
- utils.forEach(this.handlers, function forEachHandler(h) {
- if (h !== null) {
- fn(h);
- }
- });
-};
-
-module.exports = InterceptorManager;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/buildFullPath.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
- \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js");
-var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js");
-
-/**
- * Creates a new URL by combining the baseURL with the requestedURL,
- * only when the requestedURL is not already an absolute URL.
- * If the requestURL is absolute, this function returns the requestedURL untouched.
- *
- * @param {string} baseURL The base URL
- * @param {string} requestedURL Absolute or relative URL to combine
- * @returns {string} The combined full path
- */
-module.exports = function buildFullPath(baseURL, requestedURL) {
- if (baseURL && !isAbsoluteURL(requestedURL)) {
- return combineURLs(baseURL, requestedURL);
- }
- return requestedURL;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/createError.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/core/createError.js ***!
- \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
-
-/**
- * Create an Error with the specified message, config, error code, request and response.
- *
- * @param {string} message The error message.
- * @param {Object} config The config.
- * @param {string} [code] The error code (for example, 'ECONNABORTED').
- * @param {Object} [request] The request.
- * @param {Object} [response] The response.
- * @returns {Error} The created error.
- */
-module.exports = function createError(message, config, code, request, response) {
- var error = new Error(message);
- return enhanceError(error, config, code, request, response);
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
- \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js");
-var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
-var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
-
-/**
- * Throws a `Cancel` if cancellation has been requested.
- */
-function throwIfCancellationRequested(config) {
- if (config.cancelToken) {
- config.cancelToken.throwIfRequested();
- }
-}
-
-/**
- * Dispatch a request to the server using the configured adapter.
- *
- * @param {object} config The config that is to be used for the request
- * @returns {Promise} The Promise to be fulfilled
- */
-module.exports = function dispatchRequest(config) {
- throwIfCancellationRequested(config);
-
- // Ensure headers exist
- config.headers = config.headers || {};
-
- // Transform request data
- config.data = transformData(
- config.data,
- config.headers,
- config.transformRequest
- );
-
- // Flatten headers
- config.headers = utils.merge(
- config.headers.common || {},
- config.headers[config.method] || {},
- config.headers
- );
-
- utils.forEach(
- ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
- function cleanHeaderConfig(method) {
- delete config.headers[method];
- }
- );
-
- var adapter = config.adapter || defaults.adapter;
-
- return adapter(config).then(function onAdapterResolution(response) {
- throwIfCancellationRequested(config);
-
- // Transform response data
- response.data = transformData(
- response.data,
- response.headers,
- config.transformResponse
- );
-
- return response;
- }, function onAdapterRejection(reason) {
- if (!isCancel(reason)) {
- throwIfCancellationRequested(config);
-
- // Transform response data
- if (reason && reason.response) {
- reason.response.data = transformData(
- reason.response.data,
- reason.response.headers,
- config.transformResponse
- );
- }
- }
-
- return Promise.reject(reason);
- });
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/enhanceError.js":
-/*!*****************************************************!*\
- !*** ./node_modules/axios/lib/core/enhanceError.js ***!
- \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * Update an Error with the specified config, error code, and response.
- *
- * @param {Error} error The error to update.
- * @param {Object} config The config.
- * @param {string} [code] The error code (for example, 'ECONNABORTED').
- * @param {Object} [request] The request.
- * @param {Object} [response] The response.
- * @returns {Error} The error.
- */
-module.exports = function enhanceError(error, config, code, request, response) {
- error.config = config;
- if (code) {
- error.code = code;
- }
-
- error.request = request;
- error.response = response;
- error.isAxiosError = true;
-
- error.toJSON = function() {
- return {
- // Standard
- message: this.message,
- name: this.name,
- // Microsoft
- description: this.description,
- number: this.number,
- // Mozilla
- fileName: this.fileName,
- lineNumber: this.lineNumber,
- columnNumber: this.columnNumber,
- stack: this.stack,
- // Axios
- config: this.config,
- code: this.code
- };
- };
- return error;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/mergeConfig.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
- \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
-
-/**
- * Config-specific merge-function which creates a new config-object
- * by merging two configuration objects together.
- *
- * @param {Object} config1
- * @param {Object} config2
- * @returns {Object} New object resulting from merging config2 to config1
- */
-module.exports = function mergeConfig(config1, config2) {
- // eslint-disable-next-line no-param-reassign
- config2 = config2 || {};
- var config = {};
-
- var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];
- var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];
- var defaultToConfig2Keys = [
- 'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',
- 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
- 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',
- 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',
- 'httpsAgent', 'cancelToken', 'socketPath'
- ];
-
- utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
- if (typeof config2[prop] !== 'undefined') {
- config[prop] = config2[prop];
- }
- });
-
- utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {
- if (utils.isObject(config2[prop])) {
- config[prop] = utils.deepMerge(config1[prop], config2[prop]);
- } else if (typeof config2[prop] !== 'undefined') {
- config[prop] = config2[prop];
- } else if (utils.isObject(config1[prop])) {
- config[prop] = utils.deepMerge(config1[prop]);
- } else if (typeof config1[prop] !== 'undefined') {
- config[prop] = config1[prop];
- }
- });
-
- utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
- if (typeof config2[prop] !== 'undefined') {
- config[prop] = config2[prop];
- } else if (typeof config1[prop] !== 'undefined') {
- config[prop] = config1[prop];
- }
- });
-
- var axiosKeys = valueFromConfig2Keys
- .concat(mergeDeepPropertiesKeys)
- .concat(defaultToConfig2Keys);
-
- var otherKeys = Object
- .keys(config2)
- .filter(function filterAxiosKeys(key) {
- return axiosKeys.indexOf(key) === -1;
- });
-
- utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {
- if (typeof config2[prop] !== 'undefined') {
- config[prop] = config2[prop];
- } else if (typeof config1[prop] !== 'undefined') {
- config[prop] = config1[prop];
- }
- });
-
- return config;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/settle.js":
-/*!***********************************************!*\
- !*** ./node_modules/axios/lib/core/settle.js ***!
- \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js");
-
-/**
- * Resolve or reject a Promise based on response status.
- *
- * @param {Function} resolve A function that resolves the promise.
- * @param {Function} reject A function that rejects the promise.
- * @param {object} response The response.
- */
-module.exports = function settle(resolve, reject, response) {
- var validateStatus = response.config.validateStatus;
- if (!validateStatus || validateStatus(response.status)) {
- resolve(response);
- } else {
- reject(createError(
- 'Request failed with status code ' + response.status,
- response.config,
- null,
- response.request,
- response
- ));
- }
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/transformData.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/core/transformData.js ***!
- \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-/**
- * Transform the data for a request or a response
- *
- * @param {Object|String} data The data to be transformed
- * @param {Array} headers The headers for the request or response
- * @param {Array|Function} fns A single function or Array of functions
- * @returns {*} The resulting transformed data
- */
-module.exports = function transformData(data, headers, fns) {
- /*eslint no-param-reassign:0*/
- utils.forEach(fns, function transform(fn) {
- data = fn(data, headers);
- });
-
- return data;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/defaults.js":
-/*!********************************************!*\
- !*** ./node_modules/axios/lib/defaults.js ***!
- \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(process) {
-
-var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
-var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js");
-
-var DEFAULT_CONTENT_TYPE = {
- 'Content-Type': 'application/x-www-form-urlencoded'
-};
-
-function setContentTypeIfUnset(headers, value) {
- if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
- headers['Content-Type'] = value;
- }
-}
-
-function getDefaultAdapter() {
- var adapter;
- if (typeof XMLHttpRequest !== 'undefined') {
- // For browsers use XHR adapter
- adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js");
- } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
- // For node use HTTP adapter
- adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js");
- }
- return adapter;
-}
-
-var defaults = {
- adapter: getDefaultAdapter(),
-
- transformRequest: [function transformRequest(data, headers) {
- normalizeHeaderName(headers, 'Accept');
- normalizeHeaderName(headers, 'Content-Type');
- if (utils.isFormData(data) ||
- utils.isArrayBuffer(data) ||
- utils.isBuffer(data) ||
- utils.isStream(data) ||
- utils.isFile(data) ||
- utils.isBlob(data)
- ) {
- return data;
- }
- if (utils.isArrayBufferView(data)) {
- return data.buffer;
- }
- if (utils.isURLSearchParams(data)) {
- setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
- return data.toString();
- }
- if (utils.isObject(data)) {
- setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
- return JSON.stringify(data);
- }
- return data;
- }],
-
- transformResponse: [function transformResponse(data) {
- /*eslint no-param-reassign:0*/
- if (typeof data === 'string') {
- try {
- data = JSON.parse(data);
- } catch (e) { /* Ignore */ }
- }
- return data;
- }],
-
- /**
- * A timeout in milliseconds to abort a request. If set to 0 (default) a
- * timeout is not created.
- */
- timeout: 0,
-
- xsrfCookieName: 'XSRF-TOKEN',
- xsrfHeaderName: 'X-XSRF-TOKEN',
-
- maxContentLength: -1,
-
- validateStatus: function validateStatus(status) {
- return status >= 200 && status < 300;
- }
-};
-
-defaults.headers = {
- common: {
- 'Accept': 'application/json, text/plain, */*'
- }
-};
-
-utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
- defaults.headers[method] = {};
-});
-
-utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
- defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
-});
-
-module.exports = defaults;
-
-/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ "./node_modules/process/browser.js")))
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/bind.js":
-/*!************************************************!*\
- !*** ./node_modules/axios/lib/helpers/bind.js ***!
- \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-module.exports = function bind(fn, thisArg) {
- return function wrap() {
- var args = new Array(arguments.length);
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i];
- }
- return fn.apply(thisArg, args);
- };
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/buildURL.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
- \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-function encode(val) {
- return encodeURIComponent(val).
- replace(/%40/gi, '@').
- replace(/%3A/gi, ':').
- replace(/%24/g, '$').
- replace(/%2C/gi, ',').
- replace(/%20/g, '+').
- replace(/%5B/gi, '[').
- replace(/%5D/gi, ']');
-}
-
-/**
- * Build a URL by appending params to the end
- *
- * @param {string} url The base of the url (e.g., http://www.google.com)
- * @param {object} [params] The params to be appended
- * @returns {string} The formatted url
- */
-module.exports = function buildURL(url, params, paramsSerializer) {
- /*eslint no-param-reassign:0*/
- if (!params) {
- return url;
- }
-
- var serializedParams;
- if (paramsSerializer) {
- serializedParams = paramsSerializer(params);
- } else if (utils.isURLSearchParams(params)) {
- serializedParams = params.toString();
- } else {
- var parts = [];
-
- utils.forEach(params, function serialize(val, key) {
- if (val === null || typeof val === 'undefined') {
- return;
- }
-
- if (utils.isArray(val)) {
- key = key + '[]';
- } else {
- val = [val];
- }
-
- utils.forEach(val, function parseValue(v) {
- if (utils.isDate(v)) {
- v = v.toISOString();
- } else if (utils.isObject(v)) {
- v = JSON.stringify(v);
- }
- parts.push(encode(key) + '=' + encode(v));
- });
- });
-
- serializedParams = parts.join('&');
- }
-
- if (serializedParams) {
- var hashmarkIndex = url.indexOf('#');
- if (hashmarkIndex !== -1) {
- url = url.slice(0, hashmarkIndex);
- }
-
- url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
- }
-
- return url;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
-/*!*******************************************************!*\
- !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
- \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * Creates a new URL by combining the specified URLs
- *
- * @param {string} baseURL The base URL
- * @param {string} relativeURL The relative URL
- * @returns {string} The combined URL
- */
-module.exports = function combineURLs(baseURL, relativeURL) {
- return relativeURL
- ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
- : baseURL;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/cookies.js":
-/*!***************************************************!*\
- !*** ./node_modules/axios/lib/helpers/cookies.js ***!
- \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-module.exports = (
- utils.isStandardBrowserEnv() ?
-
- // Standard browser envs support document.cookie
- (function standardBrowserEnv() {
- return {
- write: function write(name, value, expires, path, domain, secure) {
- var cookie = [];
- cookie.push(name + '=' + encodeURIComponent(value));
-
- if (utils.isNumber(expires)) {
- cookie.push('expires=' + new Date(expires).toGMTString());
- }
-
- if (utils.isString(path)) {
- cookie.push('path=' + path);
- }
-
- if (utils.isString(domain)) {
- cookie.push('domain=' + domain);
- }
-
- if (secure === true) {
- cookie.push('secure');
- }
-
- document.cookie = cookie.join('; ');
- },
-
- read: function read(name) {
- var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
- return (match ? decodeURIComponent(match[3]) : null);
- },
-
- remove: function remove(name) {
- this.write(name, '', Date.now() - 86400000);
- }
- };
- })() :
-
- // Non standard browser env (web workers, react-native) lack needed support.
- (function nonStandardBrowserEnv() {
- return {
- write: function write() {},
- read: function read() { return null; },
- remove: function remove() {}
- };
- })()
-);
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
-/*!*********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
- \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * Determines whether the specified URL is absolute
- *
- * @param {string} url The URL to test
- * @returns {boolean} True if the specified URL is absolute, otherwise false
- */
-module.exports = function isAbsoluteURL(url) {
- // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
- // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
- // by any combination of letters, digits, plus, period, or hyphen.
- return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
-/*!***********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
- \***********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-module.exports = (
- utils.isStandardBrowserEnv() ?
-
- // Standard browser envs have full support of the APIs needed to test
- // whether the request URL is of the same origin as current location.
- (function standardBrowserEnv() {
- var msie = /(msie|trident)/i.test(navigator.userAgent);
- var urlParsingNode = document.createElement('a');
- var originURL;
-
- /**
- * Parse a URL to discover it's components
- *
- * @param {String} url The URL to be parsed
- * @returns {Object}
- */
- function resolveURL(url) {
- var href = url;
-
- if (msie) {
- // IE needs attribute set twice to normalize properties
- urlParsingNode.setAttribute('href', href);
- href = urlParsingNode.href;
- }
-
- urlParsingNode.setAttribute('href', href);
-
- // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
- return {
- href: urlParsingNode.href,
- protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
- host: urlParsingNode.host,
- search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
- hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
- hostname: urlParsingNode.hostname,
- port: urlParsingNode.port,
- pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
- urlParsingNode.pathname :
- '/' + urlParsingNode.pathname
- };
- }
-
- originURL = resolveURL(window.location.href);
-
- /**
- * Determine if a URL shares the same origin as the current location
- *
- * @param {String} requestURL The URL to test
- * @returns {boolean} True if URL shares the same origin, otherwise false
- */
- return function isURLSameOrigin(requestURL) {
- var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
- return (parsed.protocol === originURL.protocol &&
- parsed.host === originURL.host);
- };
- })() :
-
- // Non standard browser envs (web workers, react-native) lack needed support.
- (function nonStandardBrowserEnv() {
- return function isURLSameOrigin() {
- return true;
- };
- })()
-);
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
-/*!***************************************************************!*\
- !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
- \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
-
-module.exports = function normalizeHeaderName(headers, normalizedName) {
- utils.forEach(headers, function processHeader(value, name) {
- if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
- headers[normalizedName] = value;
- delete headers[name];
- }
- });
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
- \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-// Headers whose duplicates are ignored by node
-// c.f. https://nodejs.org/api/http.html#http_message_headers
-var ignoreDuplicateOf = [
- 'age', 'authorization', 'content-length', 'content-type', 'etag',
- 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
- 'last-modified', 'location', 'max-forwards', 'proxy-authorization',
- 'referer', 'retry-after', 'user-agent'
-];
-
-/**
- * Parse headers into an object
- *
- * ```
- * Date: Wed, 27 Aug 2014 08:58:49 GMT
- * Content-Type: application/json
- * Connection: keep-alive
- * Transfer-Encoding: chunked
- * ```
- *
- * @param {String} headers Headers needing to be parsed
- * @returns {Object} Headers parsed into an object
- */
-module.exports = function parseHeaders(headers) {
- var parsed = {};
- var key;
- var val;
- var i;
-
- if (!headers) { return parsed; }
-
- utils.forEach(headers.split('\n'), function parser(line) {
- i = line.indexOf(':');
- key = utils.trim(line.substr(0, i)).toLowerCase();
- val = utils.trim(line.substr(i + 1));
-
- if (key) {
- if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
- return;
- }
- if (key === 'set-cookie') {
- parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
- } else {
- parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
- }
- }
- });
-
- return parsed;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/spread.js":
-/*!**************************************************!*\
- !*** ./node_modules/axios/lib/helpers/spread.js ***!
- \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-/**
- * Syntactic sugar for invoking a function and expanding an array for arguments.
- *
- * Common use case would be to use `Function.prototype.apply`.
- *
- * ```js
- * function f(x, y, z) {}
- * var args = [1, 2, 3];
- * f.apply(null, args);
- * ```
- *
- * With `spread` this example can be re-written.
- *
- * ```js
- * spread(function(x, y, z) {})([1, 2, 3]);
- * ```
- *
- * @param {Function} callback
- * @returns {Function}
- */
-module.exports = function spread(callback) {
- return function wrap(arr) {
- return callback.apply(null, arr);
- };
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/utils.js":
-/*!*****************************************!*\
- !*** ./node_modules/axios/lib/utils.js ***!
- \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
-
-/*global toString:true*/
-
-// utils is a library of generic helper functions non-specific to axios
-
-var toString = Object.prototype.toString;
-
-/**
- * Determine if a value is an Array
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an Array, otherwise false
- */
-function isArray(val) {
- return toString.call(val) === '[object Array]';
-}
-
-/**
- * Determine if a value is undefined
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if the value is undefined, otherwise false
- */
-function isUndefined(val) {
- return typeof val === 'undefined';
-}
-
-/**
- * Determine if a value is a Buffer
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Buffer, otherwise false
- */
-function isBuffer(val) {
- return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
- && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
-}
-
-/**
- * Determine if a value is an ArrayBuffer
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an ArrayBuffer, otherwise false
- */
-function isArrayBuffer(val) {
- return toString.call(val) === '[object ArrayBuffer]';
-}
-
-/**
- * Determine if a value is a FormData
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an FormData, otherwise false
- */
-function isFormData(val) {
- return (typeof FormData !== 'undefined') && (val instanceof FormData);
-}
-
-/**
- * Determine if a value is a view on an ArrayBuffer
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
- */
-function isArrayBufferView(val) {
- var result;
- if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
- result = ArrayBuffer.isView(val);
- } else {
- result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
- }
- return result;
-}
-
-/**
- * Determine if a value is a String
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a String, otherwise false
- */
-function isString(val) {
- return typeof val === 'string';
-}
-
-/**
- * Determine if a value is a Number
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Number, otherwise false
- */
-function isNumber(val) {
- return typeof val === 'number';
-}
-
-/**
- * Determine if a value is an Object
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an Object, otherwise false
- */
-function isObject(val) {
- return val !== null && typeof val === 'object';
-}
-
-/**
- * Determine if a value is a Date
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Date, otherwise false
- */
-function isDate(val) {
- return toString.call(val) === '[object Date]';
-}
-
-/**
- * Determine if a value is a File
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a File, otherwise false
- */
-function isFile(val) {
- return toString.call(val) === '[object File]';
-}
-
-/**
- * Determine if a value is a Blob
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Blob, otherwise false
- */
-function isBlob(val) {
- return toString.call(val) === '[object Blob]';
-}
-
-/**
- * Determine if a value is a Function
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Function, otherwise false
- */
-function isFunction(val) {
- return toString.call(val) === '[object Function]';
-}
-
-/**
- * Determine if a value is a Stream
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Stream, otherwise false
- */
-function isStream(val) {
- return isObject(val) && isFunction(val.pipe);
-}
-
-/**
- * Determine if a value is a URLSearchParams object
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a URLSearchParams object, otherwise false
- */
-function isURLSearchParams(val) {
- return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
-}
-
-/**
- * Trim excess whitespace off the beginning and end of a string
- *
- * @param {String} str The String to trim
- * @returns {String} The String freed of excess whitespace
- */
-function trim(str) {
- return str.replace(/^\s*/, '').replace(/\s*$/, '');
-}
-
-/**
- * Determine if we're running in a standard browser environment
- *
- * This allows axios to run in a web worker, and react-native.
- * Both environments support XMLHttpRequest, but not fully standard globals.
- *
- * web workers:
- * typeof window -> undefined
- * typeof document -> undefined
- *
- * react-native:
- * navigator.product -> 'ReactNative'
- * nativescript
- * navigator.product -> 'NativeScript' or 'NS'
- */
-function isStandardBrowserEnv() {
- if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
- navigator.product === 'NativeScript' ||
- navigator.product === 'NS')) {
- return false;
- }
- return (
- typeof window !== 'undefined' &&
- typeof document !== 'undefined'
- );
-}
-
-/**
- * Iterate over an Array or an Object invoking a function for each item.
- *
- * If `obj` is an Array callback will be called passing
- * the value, index, and complete array for each item.
- *
- * If 'obj' is an Object callback will be called passing
- * the value, key, and complete object for each property.
- *
- * @param {Object|Array} obj The object to iterate
- * @param {Function} fn The callback to invoke for each item
- */
-function forEach(obj, fn) {
- // Don't bother if no value provided
- if (obj === null || typeof obj === 'undefined') {
- return;
- }
-
- // Force an array if not already something iterable
- if (typeof obj !== 'object') {
- /*eslint no-param-reassign:0*/
- obj = [obj];
- }
-
- if (isArray(obj)) {
- // Iterate over array values
- for (var i = 0, l = obj.length; i < l; i++) {
- fn.call(null, obj[i], i, obj);
- }
- } else {
- // Iterate over object keys
- for (var key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
- fn.call(null, obj[key], key, obj);
- }
- }
- }
-}
-
-/**
- * Accepts varargs expecting each argument to be an object, then
- * immutably merges the properties of each object and returns result.
- *
- * When multiple objects contain the same key the later object in
- * the arguments list will take precedence.
- *
- * Example:
- *
- * ```js
- * var result = merge({foo: 123}, {foo: 456});
- * console.log(result.foo); // outputs 456
- * ```
- *
- * @param {Object} obj1 Object to merge
- * @returns {Object} Result of all merge properties
- */
-function merge(/* obj1, obj2, obj3, ... */) {
- var result = {};
- function assignValue(val, key) {
- if (typeof result[key] === 'object' && typeof val === 'object') {
- result[key] = merge(result[key], val);
- } else {
- result[key] = val;
- }
- }
-
- for (var i = 0, l = arguments.length; i < l; i++) {
- forEach(arguments[i], assignValue);
- }
- return result;
-}
-
-/**
- * Function equal to merge with the difference being that no reference
- * to original objects is kept.
- *
- * @see merge
- * @param {Object} obj1 Object to merge
- * @returns {Object} Result of all merge properties
- */
-function deepMerge(/* obj1, obj2, obj3, ... */) {
- var result = {};
- function assignValue(val, key) {
- if (typeof result[key] === 'object' && typeof val === 'object') {
- result[key] = deepMerge(result[key], val);
- } else if (typeof val === 'object') {
- result[key] = deepMerge({}, val);
- } else {
- result[key] = val;
- }
- }
-
- for (var i = 0, l = arguments.length; i < l; i++) {
- forEach(arguments[i], assignValue);
- }
- return result;
-}
-
-/**
- * Extends object a by mutably adding to it the properties of object b.
- *
- * @param {Object} a The object to be extended
- * @param {Object} b The object to copy properties from
- * @param {Object} thisArg The object to bind function to
- * @return {Object} The resulting value of object a
- */
-function extend(a, b, thisArg) {
- forEach(b, function assignValue(val, key) {
- if (thisArg && typeof val === 'function') {
- a[key] = bind(val, thisArg);
- } else {
- a[key] = val;
- }
- });
- return a;
-}
-
-module.exports = {
- isArray: isArray,
- isArrayBuffer: isArrayBuffer,
- isBuffer: isBuffer,
- isFormData: isFormData,
- isArrayBufferView: isArrayBufferView,
- isString: isString,
- isNumber: isNumber,
- isObject: isObject,
- isUndefined: isUndefined,
- isDate: isDate,
- isFile: isFile,
- isBlob: isBlob,
- isFunction: isFunction,
- isStream: isStream,
- isURLSearchParams: isURLSearchParams,
- isStandardBrowserEnv: isStandardBrowserEnv,
- forEach: forEach,
- merge: merge,
- deepMerge: deepMerge,
- extend: extend,
- trim: trim
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/bootstrap-select/dist/js/bootstrap-select.js":
-/*!*******************************************************************!*\
- !*** ./node_modules/bootstrap-select/dist/js/bootstrap-select.js ***!
- \*******************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
- * Bootstrap-select v1.13.18 (https://developer.snapappointments.com/bootstrap-select)
- *
- * Copyright 2012-2020 SnapAppointments, LLC
- * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
- */
-
-(function (root, factory) {
- if (root === undefined && window !== undefined) root = window;
- if (true) {
- // AMD. Register as an anonymous module unless amdModuleId is set
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (a0) {
- return (factory(a0));
- }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- } else {}
-}(this, function (jQuery) {
-
-(function ($) {
- 'use strict';
-
- var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
-
- var uriAttrs = [
- 'background',
- 'cite',
- 'href',
- 'itemtype',
- 'longdesc',
- 'poster',
- 'src',
- 'xlink:href'
- ];
-
- var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
-
- var DefaultWhitelist = {
- // Global attributes allowed on any supplied element below.
- '*': ['class', 'dir', 'id', 'lang', 'role', 'tabindex', 'style', ARIA_ATTRIBUTE_PATTERN],
- a: ['target', 'href', 'title', 'rel'],
- area: [],
- b: [],
- br: [],
- col: [],
- code: [],
- div: [],
- em: [],
- hr: [],
- h1: [],
- h2: [],
- h3: [],
- h4: [],
- h5: [],
- h6: [],
- i: [],
- img: ['src', 'alt', 'title', 'width', 'height'],
- li: [],
- ol: [],
- p: [],
- pre: [],
- s: [],
- small: [],
- span: [],
- sub: [],
- sup: [],
- strong: [],
- u: [],
- ul: []
- }
-
- /**
- * A pattern that recognizes a commonly useful subset of URLs that are safe.
- *
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
- */
- var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
-
- /**
- * A pattern that matches safe data URLs. Only matches image, video and audio types.
- *
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
- */
- var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
-
- function allowedAttribute (attr, allowedAttributeList) {
- var attrName = attr.nodeName.toLowerCase()
-
- if ($.inArray(attrName, allowedAttributeList) !== -1) {
- if ($.inArray(attrName, uriAttrs) !== -1) {
- return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
- }
-
- return true
- }
-
- var regExp = $(allowedAttributeList).filter(function (index, value) {
- return value instanceof RegExp
- })
-
- // Check if a regular expression validates the attribute.
- for (var i = 0, l = regExp.length; i < l; i++) {
- if (attrName.match(regExp[i])) {
- return true
- }
- }
-
- return false
- }
-
- function sanitizeHtml (unsafeElements, whiteList, sanitizeFn) {
- if (sanitizeFn && typeof sanitizeFn === 'function') {
- return sanitizeFn(unsafeElements);
- }
-
- var whitelistKeys = Object.keys(whiteList);
-
- for (var i = 0, len = unsafeElements.length; i < len; i++) {
- var elements = unsafeElements[i].querySelectorAll('*');
-
- for (var j = 0, len2 = elements.length; j < len2; j++) {
- var el = elements[j];
- var elName = el.nodeName.toLowerCase();
-
- if (whitelistKeys.indexOf(elName) === -1) {
- el.parentNode.removeChild(el);
-
- continue;
- }
-
- var attributeList = [].slice.call(el.attributes);
- var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
-
- for (var k = 0, len3 = attributeList.length; k < len3; k++) {
- var attr = attributeList[k];
-
- if (!allowedAttribute(attr, whitelistedAttributes)) {
- el.removeAttribute(attr.nodeName);
- }
- }
- }
- }
- }
-
- // Polyfill for browsers with no classList support
- // Remove in v2
- if (!('classList' in document.createElement('_'))) {
- (function (view) {
- if (!('Element' in view)) return;
-
- var classListProp = 'classList',
- protoProp = 'prototype',
- elemCtrProto = view.Element[protoProp],
- objCtr = Object,
- classListGetter = function () {
- var $elem = $(this);
-
- return {
- add: function (classes) {
- classes = Array.prototype.slice.call(arguments).join(' ');
- return $elem.addClass(classes);
- },
- remove: function (classes) {
- classes = Array.prototype.slice.call(arguments).join(' ');
- return $elem.removeClass(classes);
- },
- toggle: function (classes, force) {
- return $elem.toggleClass(classes, force);
- },
- contains: function (classes) {
- return $elem.hasClass(classes);
- }
- }
- };
-
- if (objCtr.defineProperty) {
- var classListPropDesc = {
- get: classListGetter,
- enumerable: true,
- configurable: true
- };
- try {
- objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
- } catch (ex) { // IE 8 doesn't support enumerable:true
- // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36
- // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected
- if (ex.number === undefined || ex.number === -0x7FF5EC54) {
- classListPropDesc.enumerable = false;
- objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
- }
- }
- } else if (objCtr[protoProp].__defineGetter__) {
- elemCtrProto.__defineGetter__(classListProp, classListGetter);
- }
- }(window));
- }
-
- var testElement = document.createElement('_');
-
- testElement.classList.add('c1', 'c2');
-
- if (!testElement.classList.contains('c2')) {
- var _add = DOMTokenList.prototype.add,
- _remove = DOMTokenList.prototype.remove;
-
- DOMTokenList.prototype.add = function () {
- Array.prototype.forEach.call(arguments, _add.bind(this));
- }
-
- DOMTokenList.prototype.remove = function () {
- Array.prototype.forEach.call(arguments, _remove.bind(this));
- }
- }
-
- testElement.classList.toggle('c3', false);
-
- // Polyfill for IE 10 and Firefox <24, where classList.toggle does not
- // support the second argument.
- if (testElement.classList.contains('c3')) {
- var _toggle = DOMTokenList.prototype.toggle;
-
- DOMTokenList.prototype.toggle = function (token, force) {
- if (1 in arguments && !this.contains(token) === !force) {
- return force;
- } else {
- return _toggle.call(this, token);
- }
- };
- }
-
- testElement = null;
-
- // shallow array comparison
- function isEqual (array1, array2) {
- return array1.length === array2.length && array1.every(function (element, index) {
- return element === array2[index];
- });
- };
-
- //
- if (!String.prototype.startsWith) {
- (function () {
- 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
- var defineProperty = (function () {
- // IE 8 only supports `Object.defineProperty` on DOM elements
- try {
- var object = {};
- var $defineProperty = Object.defineProperty;
- var result = $defineProperty(object, object, object) && $defineProperty;
- } catch (error) {
- }
- return result;
- }());
- var toString = {}.toString;
- var startsWith = function (search) {
- if (this == null) {
- throw new TypeError();
- }
- var string = String(this);
- if (search && toString.call(search) == '[object RegExp]') {
- throw new TypeError();
- }
- var stringLength = string.length;
- var searchString = String(search);
- var searchLength = searchString.length;
- var position = arguments.length > 1 ? arguments[1] : undefined;
- // `ToInteger`
- var pos = position ? Number(position) : 0;
- if (pos != pos) { // better `isNaN`
- pos = 0;
- }
- var start = Math.min(Math.max(pos, 0), stringLength);
- // Avoid the `indexOf` call if no match is possible
- if (searchLength + start > stringLength) {
- return false;
- }
- var index = -1;
- while (++index < searchLength) {
- if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
- return false;
- }
- }
- return true;
- };
- if (defineProperty) {
- defineProperty(String.prototype, 'startsWith', {
- 'value': startsWith,
- 'configurable': true,
- 'writable': true
- });
- } else {
- String.prototype.startsWith = startsWith;
- }
- }());
- }
-
- if (!Object.keys) {
- Object.keys = function (
- o, // object
- k, // key
- r // result array
- ) {
- // initialize object and result
- r = [];
- // iterate over object keys
- for (k in o) {
- // fill result array with non-prototypical keys
- r.hasOwnProperty.call(o, k) && r.push(k);
- }
- // return result
- return r;
- };
- }
-
- if (HTMLSelectElement && !HTMLSelectElement.prototype.hasOwnProperty('selectedOptions')) {
- Object.defineProperty(HTMLSelectElement.prototype, 'selectedOptions', {
- get: function () {
- return this.querySelectorAll(':checked');
- }
- });
- }
-
- function getSelectedOptions (select, ignoreDisabled) {
- var selectedOptions = select.selectedOptions,
- options = [],
- opt;
-
- if (ignoreDisabled) {
- for (var i = 0, len = selectedOptions.length; i < len; i++) {
- opt = selectedOptions[i];
-
- if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {
- options.push(opt);
- }
- }
-
- return options;
- }
-
- return selectedOptions;
- }
-
- // much faster than $.val()
- function getSelectValues (select, selectedOptions) {
- var value = [],
- options = selectedOptions || select.selectedOptions,
- opt;
-
- for (var i = 0, len = options.length; i < len; i++) {
- opt = options[i];
-
- if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {
- value.push(opt.value);
- }
- }
-
- if (!select.multiple) {
- return !value.length ? null : value[0];
- }
-
- return value;
- }
-
- // set data-selected on select element if the value has been programmatically selected
- // prior to initialization of bootstrap-select
- // * consider removing or replacing an alternative method *
- var valHooks = {
- useDefault: false,
- _set: $.valHooks.select.set
- };
-
- $.valHooks.select.set = function (elem, value) {
- if (value && !valHooks.useDefault) $(elem).data('selected', true);
-
- return valHooks._set.apply(this, arguments);
- };
-
- var changedArguments = null;
-
- var EventIsSupported = (function () {
- try {
- new Event('change');
- return true;
- } catch (e) {
- return false;
- }
- })();
-
- $.fn.triggerNative = function (eventName) {
- var el = this[0],
- event;
-
- if (el.dispatchEvent) { // for modern browsers & IE9+
- if (EventIsSupported) {
- // For modern browsers
- event = new Event(eventName, {
- bubbles: true
- });
- } else {
- // For IE since it doesn't support Event constructor
- event = document.createEvent('Event');
- event.initEvent(eventName, true, false);
- }
-
- el.dispatchEvent(event);
- } else if (el.fireEvent) { // for IE8
- event = document.createEventObject();
- event.eventType = eventName;
- el.fireEvent('on' + eventName, event);
- } else {
- // fall back to jQuery.trigger
- this.trigger(eventName);
- }
- };
- //
-
- function stringSearch (li, searchString, method, normalize) {
- var stringTypes = [
- 'display',
- 'subtext',
- 'tokens'
- ],
- searchSuccess = false;
-
- for (var i = 0; i < stringTypes.length; i++) {
- var stringType = stringTypes[i],
- string = li[stringType];
-
- if (string) {
- string = string.toString();
-
- // Strip HTML tags. This isn't perfect, but it's much faster than any other method
- if (stringType === 'display') {
- string = string.replace(/<[^>]+>/g, '');
- }
-
- if (normalize) string = normalizeToBase(string);
- string = string.toUpperCase();
-
- if (method === 'contains') {
- searchSuccess = string.indexOf(searchString) >= 0;
- } else {
- searchSuccess = string.startsWith(searchString);
- }
-
- if (searchSuccess) break;
- }
- }
-
- return searchSuccess;
- }
-
- function toInteger (value) {
- return parseInt(value, 10) || 0;
- }
-
- // Borrowed from Lodash (_.deburr)
- /** Used to map Latin Unicode letters to basic Latin letters. */
- var deburredLetters = {
- // Latin-1 Supplement block.
- '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
- '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
- '\xc7': 'C', '\xe7': 'c',
- '\xd0': 'D', '\xf0': 'd',
- '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
- '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
- '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
- '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
- '\xd1': 'N', '\xf1': 'n',
- '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
- '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
- '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
- '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
- '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
- '\xc6': 'Ae', '\xe6': 'ae',
- '\xde': 'Th', '\xfe': 'th',
- '\xdf': 'ss',
- // Latin Extended-A block.
- '\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
- '\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
- '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
- '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
- '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
- '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
- '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
- '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
- '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
- '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
- '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
- '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
- '\u0134': 'J', '\u0135': 'j',
- '\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
- '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
- '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
- '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
- '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
- '\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
- '\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
- '\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
- '\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
- '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
- '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
- '\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
- '\u0163': 't', '\u0165': 't', '\u0167': 't',
- '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
- '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
- '\u0174': 'W', '\u0175': 'w',
- '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
- '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
- '\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
- '\u0132': 'IJ', '\u0133': 'ij',
- '\u0152': 'Oe', '\u0153': 'oe',
- '\u0149': "'n", '\u017f': 's'
- };
-
- /** Used to match Latin Unicode letters (excluding mathematical operators). */
- var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
-
- /** Used to compose unicode character classes. */
- var rsComboMarksRange = '\\u0300-\\u036f',
- reComboHalfMarksRange = '\\ufe20-\\ufe2f',
- rsComboSymbolsRange = '\\u20d0-\\u20ff',
- rsComboMarksExtendedRange = '\\u1ab0-\\u1aff',
- rsComboMarksSupplementRange = '\\u1dc0-\\u1dff',
- rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange;
-
- /** Used to compose unicode capture groups. */
- var rsCombo = '[' + rsComboRange + ']';
-
- /**
- * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
- * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
- */
- var reComboMark = RegExp(rsCombo, 'g');
-
- function deburrLetter (key) {
- return deburredLetters[key];
- };
-
- function normalizeToBase (string) {
- string = string.toString();
- return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
- }
-
- // List of HTML entities for escaping.
- var escapeMap = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": ''',
- '`': '`'
- };
-
- // Functions for escaping and unescaping strings to/from HTML interpolation.
- var createEscaper = function (map) {
- var escaper = function (match) {
- return map[match];
- };
- // Regexes for identifying a key that needs to be escaped.
- var source = '(?:' + Object.keys(map).join('|') + ')';
- var testRegexp = RegExp(source);
- var replaceRegexp = RegExp(source, 'g');
- return function (string) {
- string = string == null ? '' : '' + string;
- return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
- };
- };
-
- var htmlEscape = createEscaper(escapeMap);
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var keyCodeMap = {
- 32: ' ',
- 48: '0',
- 49: '1',
- 50: '2',
- 51: '3',
- 52: '4',
- 53: '5',
- 54: '6',
- 55: '7',
- 56: '8',
- 57: '9',
- 59: ';',
- 65: 'A',
- 66: 'B',
- 67: 'C',
- 68: 'D',
- 69: 'E',
- 70: 'F',
- 71: 'G',
- 72: 'H',
- 73: 'I',
- 74: 'J',
- 75: 'K',
- 76: 'L',
- 77: 'M',
- 78: 'N',
- 79: 'O',
- 80: 'P',
- 81: 'Q',
- 82: 'R',
- 83: 'S',
- 84: 'T',
- 85: 'U',
- 86: 'V',
- 87: 'W',
- 88: 'X',
- 89: 'Y',
- 90: 'Z',
- 96: '0',
- 97: '1',
- 98: '2',
- 99: '3',
- 100: '4',
- 101: '5',
- 102: '6',
- 103: '7',
- 104: '8',
- 105: '9'
- };
-
- var keyCodes = {
- ESCAPE: 27, // KeyboardEvent.which value for Escape (Esc) key
- ENTER: 13, // KeyboardEvent.which value for Enter key
- SPACE: 32, // KeyboardEvent.which value for space key
- TAB: 9, // KeyboardEvent.which value for tab key
- ARROW_UP: 38, // KeyboardEvent.which value for up arrow key
- ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key
- }
-
- var version = {
- success: false,
- major: '3'
- };
-
- try {
- version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');
- version.major = version.full[0];
- version.success = true;
- } catch (err) {
- // do nothing
- }
-
- var selectId = 0;
-
- var EVENT_KEY = '.bs.select';
-
- var classNames = {
- DISABLED: 'disabled',
- DIVIDER: 'divider',
- SHOW: 'open',
- DROPUP: 'dropup',
- MENU: 'dropdown-menu',
- MENURIGHT: 'dropdown-menu-right',
- MENULEFT: 'dropdown-menu-left',
- // to-do: replace with more advanced template/customization options
- BUTTONCLASS: 'btn-default',
- POPOVERHEADER: 'popover-title',
- ICONBASE: 'glyphicon',
- TICKICON: 'glyphicon-ok'
- }
-
- var Selector = {
- MENU: '.' + classNames.MENU
- }
-
- var elementTemplates = {
- div: document.createElement('div'),
- span: document.createElement('span'),
- i: document.createElement('i'),
- subtext: document.createElement('small'),
- a: document.createElement('a'),
- li: document.createElement('li'),
- whitespace: document.createTextNode('\u00A0'),
- fragment: document.createDocumentFragment()
- }
-
- elementTemplates.noResults = elementTemplates.li.cloneNode(false);
- elementTemplates.noResults.className = 'no-results';
-
- elementTemplates.a.setAttribute('role', 'option');
- elementTemplates.a.className = 'dropdown-item';
-
- elementTemplates.subtext.className = 'text-muted';
-
- elementTemplates.text = elementTemplates.span.cloneNode(false);
- elementTemplates.text.className = 'text';
-
- elementTemplates.checkMark = elementTemplates.span.cloneNode(false);
-
- var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN);
- var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE);
-
- var generateOption = {
- li: function (content, classes, optgroup) {
- var li = elementTemplates.li.cloneNode(false);
-
- if (content) {
- if (content.nodeType === 1 || content.nodeType === 11) {
- li.appendChild(content);
- } else {
- li.innerHTML = content;
- }
- }
-
- if (typeof classes !== 'undefined' && classes !== '') li.className = classes;
- if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup);
-
- return li;
- },
-
- a: function (text, classes, inline) {
- var a = elementTemplates.a.cloneNode(true);
-
- if (text) {
- if (text.nodeType === 11) {
- a.appendChild(text);
- } else {
- a.insertAdjacentHTML('beforeend', text);
- }
- }
-
- if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\s+/));
- if (inline) a.setAttribute('style', inline);
-
- return a;
- },
-
- text: function (options, useFragment) {
- var textElement = elementTemplates.text.cloneNode(false),
- subtextElement,
- iconElement;
-
- if (options.content) {
- textElement.innerHTML = options.content;
- } else {
- textElement.textContent = options.text;
-
- if (options.icon) {
- var whitespace = elementTemplates.whitespace.cloneNode(false);
-
- // need to use for icons in the button to prevent a breaking change
- // note: switch to span in next major release
- iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false);
- iconElement.className = this.options.iconBase + ' ' + options.icon;
-
- elementTemplates.fragment.appendChild(iconElement);
- elementTemplates.fragment.appendChild(whitespace);
- }
-
- if (options.subtext) {
- subtextElement = elementTemplates.subtext.cloneNode(false);
- subtextElement.textContent = options.subtext;
- textElement.appendChild(subtextElement);
- }
- }
-
- if (useFragment === true) {
- while (textElement.childNodes.length > 0) {
- elementTemplates.fragment.appendChild(textElement.childNodes[0]);
- }
- } else {
- elementTemplates.fragment.appendChild(textElement);
- }
-
- return elementTemplates.fragment;
- },
-
- label: function (options) {
- var textElement = elementTemplates.text.cloneNode(false),
- subtextElement,
- iconElement;
-
- textElement.innerHTML = options.display;
-
- if (options.icon) {
- var whitespace = elementTemplates.whitespace.cloneNode(false);
-
- iconElement = elementTemplates.span.cloneNode(false);
- iconElement.className = this.options.iconBase + ' ' + options.icon;
-
- elementTemplates.fragment.appendChild(iconElement);
- elementTemplates.fragment.appendChild(whitespace);
- }
-
- if (options.subtext) {
- subtextElement = elementTemplates.subtext.cloneNode(false);
- subtextElement.textContent = options.subtext;
- textElement.appendChild(subtextElement);
- }
-
- elementTemplates.fragment.appendChild(textElement);
-
- return elementTemplates.fragment;
- }
- }
-
- function showNoResults (searchMatch, searchValue) {
- if (!searchMatch.length) {
- elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '"' + htmlEscape(searchValue) + '"');
- this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults);
- }
- }
-
- var Selectpicker = function (element, options) {
- var that = this;
-
- // bootstrap-select has been initialized - revert valHooks.select.set back to its original function
- if (!valHooks.useDefault) {
- $.valHooks.select.set = valHooks._set;
- valHooks.useDefault = true;
- }
-
- this.$element = $(element);
- this.$newElement = null;
- this.$button = null;
- this.$menu = null;
- this.options = options;
- this.selectpicker = {
- main: {},
- search: {},
- current: {}, // current changes if a search is in progress
- view: {},
- isSearching: false,
- keydown: {
- keyHistory: '',
- resetKeyHistory: {
- start: function () {
- return setTimeout(function () {
- that.selectpicker.keydown.keyHistory = '';
- }, 800);
- }
- }
- }
- };
-
- this.sizeInfo = {};
-
- // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a
- // data-attribute)
- if (this.options.title === null) {
- this.options.title = this.$element.attr('title');
- }
-
- // Format window padding
- var winPad = this.options.windowPadding;
- if (typeof winPad === 'number') {
- this.options.windowPadding = [winPad, winPad, winPad, winPad];
- }
-
- // Expose public methods
- this.val = Selectpicker.prototype.val;
- this.render = Selectpicker.prototype.render;
- this.refresh = Selectpicker.prototype.refresh;
- this.setStyle = Selectpicker.prototype.setStyle;
- this.selectAll = Selectpicker.prototype.selectAll;
- this.deselectAll = Selectpicker.prototype.deselectAll;
- this.destroy = Selectpicker.prototype.destroy;
- this.remove = Selectpicker.prototype.remove;
- this.show = Selectpicker.prototype.show;
- this.hide = Selectpicker.prototype.hide;
-
- this.init();
- };
-
- Selectpicker.VERSION = '1.13.18';
-
- // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.
- Selectpicker.DEFAULTS = {
- noneSelectedText: 'Nothing selected',
- noneResultsText: 'No results matched {0}',
- countSelectedText: function (numSelected, numTotal) {
- return (numSelected == 1) ? '{0} item selected' : '{0} items selected';
- },
- maxOptionsText: function (numAll, numGroup) {
- return [
- (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
- (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
- ];
- },
- selectAllText: 'Select All',
- deselectAllText: 'Deselect All',
- doneButton: false,
- doneButtonText: 'Close',
- multipleSeparator: ', ',
- styleBase: 'btn',
- style: classNames.BUTTONCLASS,
- size: 'auto',
- title: null,
- selectedTextFormat: 'values',
- width: false,
- container: false,
- hideDisabled: false,
- showSubtext: false,
- showIcon: true,
- showContent: true,
- dropupAuto: true,
- header: false,
- liveSearch: false,
- liveSearchPlaceholder: null,
- liveSearchNormalize: false,
- liveSearchStyle: 'contains',
- actionsBox: false,
- iconBase: classNames.ICONBASE,
- tickIcon: classNames.TICKICON,
- showTick: false,
- template: {
- caret: ' '
- },
- maxOptions: false,
- mobile: false,
- selectOnTab: false,
- dropdownAlignRight: false,
- windowPadding: 0,
- virtualScroll: 600,
- display: false,
- sanitize: true,
- sanitizeFn: null,
- whiteList: DefaultWhitelist
- };
-
- Selectpicker.prototype = {
-
- constructor: Selectpicker,
-
- init: function () {
- var that = this,
- id = this.$element.attr('id'),
- element = this.$element[0],
- form = element.form;
-
- selectId++;
- this.selectId = 'bs-select-' + selectId;
-
- element.classList.add('bs-select-hidden');
-
- this.multiple = this.$element.prop('multiple');
- this.autofocus = this.$element.prop('autofocus');
-
- if (element.classList.contains('show-tick')) {
- this.options.showTick = true;
- }
-
- this.$newElement = this.createDropdown();
- this.buildData();
- this.$element
- .after(this.$newElement)
- .prependTo(this.$newElement);
-
- // ensure select is associated with form element if it got unlinked after moving it inside newElement
- if (form && element.form === null) {
- if (!form.id) form.id = 'form-' + this.selectId;
- element.setAttribute('form', form.id);
- }
-
- this.$button = this.$newElement.children('button');
- this.$menu = this.$newElement.children(Selector.MENU);
- this.$menuInner = this.$menu.children('.inner');
- this.$searchbox = this.$menu.find('input');
-
- element.classList.remove('bs-select-hidden');
-
- if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT);
-
- if (typeof id !== 'undefined') {
- this.$button.attr('data-id', id);
- }
-
- this.checkDisabled();
- this.clickListener();
-
- if (this.options.liveSearch) {
- this.liveSearchListener();
- this.focusedParent = this.$searchbox[0];
- } else {
- this.focusedParent = this.$menuInner[0];
- }
-
- this.setStyle();
- this.render();
- this.setWidth();
- if (this.options.container) {
- this.selectPosition();
- } else {
- this.$element.on('hide' + EVENT_KEY, function () {
- if (that.isVirtual()) {
- // empty menu on close
- var menuInner = that.$menuInner[0],
- emptyMenu = menuInner.firstChild.cloneNode(false);
-
- // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = ''
- menuInner.replaceChild(emptyMenu, menuInner.firstChild);
- menuInner.scrollTop = 0;
- }
- });
- }
- this.$menu.data('this', this);
- this.$newElement.data('this', this);
- if (this.options.mobile) this.mobile();
-
- this.$newElement.on({
- 'hide.bs.dropdown': function (e) {
- that.$element.trigger('hide' + EVENT_KEY, e);
- },
- 'hidden.bs.dropdown': function (e) {
- that.$element.trigger('hidden' + EVENT_KEY, e);
- },
- 'show.bs.dropdown': function (e) {
- that.$element.trigger('show' + EVENT_KEY, e);
- },
- 'shown.bs.dropdown': function (e) {
- that.$element.trigger('shown' + EVENT_KEY, e);
- }
- });
-
- if (element.hasAttribute('required')) {
- this.$element.on('invalid' + EVENT_KEY, function () {
- that.$button[0].classList.add('bs-invalid');
-
- that.$element
- .on('shown' + EVENT_KEY + '.invalid', function () {
- that.$element
- .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened
- .off('shown' + EVENT_KEY + '.invalid');
- })
- .on('rendered' + EVENT_KEY, function () {
- // if select is no longer invalid, remove the bs-invalid class
- if (this.validity.valid) that.$button[0].classList.remove('bs-invalid');
- that.$element.off('rendered' + EVENT_KEY);
- });
-
- that.$button.on('blur' + EVENT_KEY, function () {
- that.$element.trigger('focus').trigger('blur');
- that.$button.off('blur' + EVENT_KEY);
- });
- });
- }
-
- setTimeout(function () {
- that.buildList();
- that.$element.trigger('loaded' + EVENT_KEY);
- });
- },
-
- createDropdown: function () {
- // Options
- // If we are multiple or showTick option is set, then add the show-tick class
- var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '',
- multiselectable = this.multiple ? ' aria-multiselectable="true"' : '',
- inputGroup = '',
- autofocus = this.autofocus ? ' autofocus' : '';
-
- if (version.major < 4 && this.$element.parent().hasClass('input-group')) {
- inputGroup = ' input-group-btn';
- }
-
- // Elements
- var drop,
- header = '',
- searchbox = '',
- actionsbox = '',
- donebutton = '';
-
- if (this.options.header) {
- header =
- '';
- }
-
- if (this.options.liveSearch) {
- searchbox =
- ' ' +
- ' ' +
- '
';
- }
-
- if (this.multiple && this.options.actionsBox) {
- actionsbox =
- '' +
- '
' +
- '' +
- this.options.selectAllText +
- ' ' +
- '' +
- this.options.deselectAllText +
- ' ' +
- '
' +
- '
';
- }
-
- if (this.multiple && this.options.doneButton) {
- donebutton =
- '';
- }
-
- drop =
- '';
-
- return $(drop);
- },
-
- setPositionData: function () {
- this.selectpicker.view.canHighlight = [];
- this.selectpicker.view.size = 0;
- this.selectpicker.view.firstHighlightIndex = false;
-
- for (var i = 0; i < this.selectpicker.current.data.length; i++) {
- var li = this.selectpicker.current.data[i],
- canHighlight = true;
-
- if (li.type === 'divider') {
- canHighlight = false;
- li.height = this.sizeInfo.dividerHeight;
- } else if (li.type === 'optgroup-label') {
- canHighlight = false;
- li.height = this.sizeInfo.dropdownHeaderHeight;
- } else {
- li.height = this.sizeInfo.liHeight;
- }
-
- if (li.disabled) canHighlight = false;
-
- this.selectpicker.view.canHighlight.push(canHighlight);
-
- if (canHighlight) {
- this.selectpicker.view.size++;
- li.posinset = this.selectpicker.view.size;
- if (this.selectpicker.view.firstHighlightIndex === false) this.selectpicker.view.firstHighlightIndex = i;
- }
-
- li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height;
- }
- },
-
- isVirtual: function () {
- return (this.options.virtualScroll !== false) && (this.selectpicker.main.elements.length >= this.options.virtualScroll) || this.options.virtualScroll === true;
- },
-
- createView: function (isSearching, setSize, refresh) {
- var that = this,
- scrollTop = 0,
- active = [],
- selected,
- prevActive;
-
- this.selectpicker.isSearching = isSearching;
- this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main;
-
- this.setPositionData();
-
- if (setSize) {
- if (refresh) {
- scrollTop = this.$menuInner[0].scrollTop;
- } else if (!that.multiple) {
- var element = that.$element[0],
- selectedIndex = (element.options[element.selectedIndex] || {}).liIndex;
-
- if (typeof selectedIndex === 'number' && that.options.size !== false) {
- var selectedData = that.selectpicker.main.data[selectedIndex],
- position = selectedData && selectedData.position;
-
- if (position) {
- scrollTop = position - ((that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2);
- }
- }
- }
- }
-
- scroll(scrollTop, true);
-
- this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) {
- if (!that.noScroll) scroll(this.scrollTop, updateValue);
- that.noScroll = false;
- });
-
- function scroll (scrollTop, init) {
- var size = that.selectpicker.current.elements.length,
- chunks = [],
- chunkSize,
- chunkCount,
- firstChunk,
- lastChunk,
- currentChunk,
- prevPositions,
- positionIsDifferent,
- previousElements,
- menuIsDifferent = true,
- isVirtual = that.isVirtual();
-
- that.selectpicker.view.scrollTop = scrollTop;
-
- chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk
- chunkCount = Math.round(size / chunkSize) || 1; // number of chunks
-
- for (var i = 0; i < chunkCount; i++) {
- var endOfChunk = (i + 1) * chunkSize;
-
- if (i === chunkCount - 1) {
- endOfChunk = size;
- }
-
- chunks[i] = [
- (i) * chunkSize + (!i ? 0 : 1),
- endOfChunk
- ];
-
- if (!size) break;
-
- if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) {
- currentChunk = i;
- }
- }
-
- if (currentChunk === undefined) currentChunk = 0;
-
- prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1];
-
- // always display previous, current, and next chunks
- firstChunk = Math.max(0, currentChunk - 1);
- lastChunk = Math.min(chunkCount - 1, currentChunk + 1);
-
- that.selectpicker.view.position0 = isVirtual === false ? 0 : (Math.max(0, chunks[firstChunk][0]) || 0);
- that.selectpicker.view.position1 = isVirtual === false ? size : (Math.min(size, chunks[lastChunk][1]) || 0);
-
- positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1;
-
- if (that.activeIndex !== undefined) {
- prevActive = that.selectpicker.main.elements[that.prevActiveIndex];
- active = that.selectpicker.main.elements[that.activeIndex];
- selected = that.selectpicker.main.elements[that.selectedIndex];
-
- if (init) {
- if (that.activeIndex !== that.selectedIndex) {
- that.defocusItem(active);
- }
- that.activeIndex = undefined;
- }
-
- if (that.activeIndex && that.activeIndex !== that.selectedIndex) {
- that.defocusItem(selected);
- }
- }
-
- if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex) {
- that.defocusItem(prevActive);
- }
-
- if (init || positionIsDifferent) {
- previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : [];
-
- if (isVirtual === false) {
- that.selectpicker.view.visibleElements = that.selectpicker.current.elements;
- } else {
- that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1);
- }
-
- that.setOptionStatus();
-
- // if searching, check to make sure the list has actually been updated before updating DOM
- // this prevents unnecessary repaints
- if (isSearching || (isVirtual === false && init)) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements);
-
- // if virtual scroll is disabled and not searching,
- // menu should never need to be updated more than once
- if ((init || isVirtual === true) && menuIsDifferent) {
- var menuInner = that.$menuInner[0],
- menuFragment = document.createDocumentFragment(),
- emptyMenu = menuInner.firstChild.cloneNode(false),
- marginTop,
- marginBottom,
- elements = that.selectpicker.view.visibleElements,
- toSanitize = [];
-
- // replace the existing UL with an empty one - this is faster than $.empty()
- menuInner.replaceChild(emptyMenu, menuInner.firstChild);
-
- for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) {
- var element = elements[i],
- elText,
- elementData;
-
- if (that.options.sanitize) {
- elText = element.lastChild;
-
- if (elText) {
- elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0];
-
- if (elementData && elementData.content && !elementData.sanitized) {
- toSanitize.push(elText);
- elementData.sanitized = true;
- }
- }
- }
-
- menuFragment.appendChild(element);
- }
-
- if (that.options.sanitize && toSanitize.length) {
- sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn);
- }
-
- if (isVirtual === true) {
- marginTop = (that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position);
- marginBottom = (that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position);
-
- menuInner.firstChild.style.marginTop = marginTop + 'px';
- menuInner.firstChild.style.marginBottom = marginBottom + 'px';
- } else {
- menuInner.firstChild.style.marginTop = 0;
- menuInner.firstChild.style.marginBottom = 0;
- }
-
- menuInner.firstChild.appendChild(menuFragment);
-
- // if an option is encountered that is wider than the current menu width, update the menu width accordingly
- // switch to ResizeObserver with increased browser support
- if (isVirtual === true && that.sizeInfo.hasScrollBar) {
- var menuInnerInnerWidth = menuInner.firstChild.offsetWidth;
-
- if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) {
- menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';
- } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) {
- // set to 0 to get actual width of menu
- that.$menu[0].style.minWidth = 0;
-
- var actualMenuWidth = menuInner.firstChild.offsetWidth;
-
- if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) {
- that.sizeInfo.menuInnerInnerWidth = actualMenuWidth;
- menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';
- }
-
- // reset to default CSS styling
- that.$menu[0].style.minWidth = '';
- }
- }
- }
- }
-
- that.prevActiveIndex = that.activeIndex;
-
- if (!that.options.liveSearch) {
- that.$menuInner.trigger('focus');
- } else if (isSearching && init) {
- var index = 0,
- newActive;
-
- if (!that.selectpicker.view.canHighlight[index]) {
- index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true);
- }
-
- newActive = that.selectpicker.view.visibleElements[index];
-
- that.defocusItem(that.selectpicker.view.currentActive);
-
- that.activeIndex = (that.selectpicker.current.data[index] || {}).index;
-
- that.focusItem(newActive);
- }
- }
-
- $(window)
- .off('resize' + EVENT_KEY + '.' + this.selectId + '.createView')
- .on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () {
- var isActive = that.$newElement.hasClass(classNames.SHOW);
-
- if (isActive) scroll(that.$menuInner[0].scrollTop);
- });
- },
-
- focusItem: function (li, liData, noStyle) {
- if (li) {
- liData = liData || this.selectpicker.main.data[this.activeIndex];
- var a = li.firstChild;
-
- if (a) {
- a.setAttribute('aria-setsize', this.selectpicker.view.size);
- a.setAttribute('aria-posinset', liData.posinset);
-
- if (noStyle !== true) {
- this.focusedParent.setAttribute('aria-activedescendant', a.id);
- li.classList.add('active');
- a.classList.add('active');
- }
- }
- }
- },
-
- defocusItem: function (li) {
- if (li) {
- li.classList.remove('active');
- if (li.firstChild) li.firstChild.classList.remove('active');
- }
- },
-
- setPlaceholder: function () {
- var that = this,
- updateIndex = false;
-
- if (this.options.title && !this.multiple) {
- if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option');
-
- // this option doesn't create a new element, but does add a new option at the start,
- // so startIndex should increase to prevent having to check every option for the bs-title-option class
- updateIndex = true;
-
- var element = this.$element[0],
- selectTitleOption = false,
- titleNotAppended = !this.selectpicker.view.titleOption.parentNode,
- selectedIndex = element.selectedIndex,
- selectedOption = element.options[selectedIndex],
- navigation = window.performance && window.performance.getEntriesByType('navigation'),
- // Safari doesn't support getEntriesByType('navigation') - fall back to performance.navigation
- isNotBackForward = (navigation && navigation.length) ? navigation[0].type !== 'back_forward' : window.performance.navigation.type !== 2;
-
- if (titleNotAppended) {
- // Use native JS to prepend option (faster)
- this.selectpicker.view.titleOption.className = 'bs-title-option';
- this.selectpicker.view.titleOption.value = '';
-
- // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.
- // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,
- // if so, the select will have the data-selected attribute
- selectTitleOption = !selectedOption || (selectedIndex === 0 && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined);
- }
-
- if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) {
- element.insertBefore(this.selectpicker.view.titleOption, element.firstChild);
- }
-
- // Set selected *after* appending to select,
- // otherwise the option doesn't get selected in IE
- // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11
- if (selectTitleOption && isNotBackForward) {
- element.selectedIndex = 0;
- } else if (document.readyState !== 'complete') {
- // if navigation type is back_forward, there's a chance the select will have its value set by BFCache
- // wait for that value to be set, then run render again
- window.addEventListener('pageshow', function () {
- if (that.selectpicker.view.displayedValue !== element.value) that.render();
- });
- }
- }
-
- return updateIndex;
- },
-
- buildData: function () {
- var optionSelector = ':not([hidden]):not([data-hidden="true"])',
- mainData = [],
- optID = 0,
- startIndex = this.setPlaceholder() ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop
-
- if (this.options.hideDisabled) optionSelector += ':not(:disabled)';
-
- var selectOptions = this.$element[0].querySelectorAll('select > *' + optionSelector);
-
- function addDivider (config) {
- var previousData = mainData[mainData.length - 1];
-
- // ensure optgroup doesn't create back-to-back dividers
- if (
- previousData &&
- previousData.type === 'divider' &&
- (previousData.optID || config.optID)
- ) {
- return;
- }
-
- config = config || {};
- config.type = 'divider';
-
- mainData.push(config);
- }
-
- function addOption (option, config) {
- config = config || {};
-
- config.divider = option.getAttribute('data-divider') === 'true';
-
- if (config.divider) {
- addDivider({
- optID: config.optID
- });
- } else {
- var liIndex = mainData.length,
- cssText = option.style.cssText,
- inlineStyle = cssText ? htmlEscape(cssText) : '',
- optionClass = (option.className || '') + (config.optgroupClass || '');
-
- if (config.optID) optionClass = 'opt ' + optionClass;
-
- config.optionClass = optionClass.trim();
- config.inlineStyle = inlineStyle;
- config.text = option.textContent;
-
- config.content = option.getAttribute('data-content');
- config.tokens = option.getAttribute('data-tokens');
- config.subtext = option.getAttribute('data-subtext');
- config.icon = option.getAttribute('data-icon');
-
- option.liIndex = liIndex;
-
- config.display = config.content || config.text;
- config.type = 'option';
- config.index = liIndex;
- config.option = option;
- config.selected = !!option.selected;
- config.disabled = config.disabled || !!option.disabled;
-
- mainData.push(config);
- }
- }
-
- function addOptgroup (index, selectOptions) {
- var optgroup = selectOptions[index],
- // skip placeholder option
- previous = index - 1 < startIndex ? false : selectOptions[index - 1],
- next = selectOptions[index + 1],
- options = optgroup.querySelectorAll('option' + optionSelector);
-
- if (!options.length) return;
-
- var config = {
- display: htmlEscape(optgroup.label),
- subtext: optgroup.getAttribute('data-subtext'),
- icon: optgroup.getAttribute('data-icon'),
- type: 'optgroup-label',
- optgroupClass: ' ' + (optgroup.className || '')
- },
- headerIndex,
- lastIndex;
-
- optID++;
-
- if (previous) {
- addDivider({ optID: optID });
- }
-
- config.optID = optID;
-
- mainData.push(config);
-
- for (var j = 0, len = options.length; j < len; j++) {
- var option = options[j];
-
- if (j === 0) {
- headerIndex = mainData.length - 1;
- lastIndex = headerIndex + len;
- }
-
- addOption(option, {
- headerIndex: headerIndex,
- lastIndex: lastIndex,
- optID: config.optID,
- optgroupClass: config.optgroupClass,
- disabled: optgroup.disabled
- });
- }
-
- if (next) {
- addDivider({ optID: optID });
- }
- }
-
- for (var len = selectOptions.length, i = startIndex; i < len; i++) {
- var item = selectOptions[i];
-
- if (item.tagName !== 'OPTGROUP') {
- addOption(item, {});
- } else {
- addOptgroup(i, selectOptions);
- }
- }
-
- this.selectpicker.main.data = this.selectpicker.current.data = mainData;
- },
-
- buildList: function () {
- var that = this,
- selectData = this.selectpicker.main.data,
- mainElements = [],
- widestOptionLength = 0;
-
- if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) {
- elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark';
- elementTemplates.a.appendChild(elementTemplates.checkMark);
- }
-
- function buildElement (item) {
- var liElement,
- combinedLength = 0;
-
- switch (item.type) {
- case 'divider':
- liElement = generateOption.li(
- false,
- classNames.DIVIDER,
- (item.optID ? item.optID + 'div' : undefined)
- );
-
- break;
-
- case 'option':
- liElement = generateOption.li(
- generateOption.a(
- generateOption.text.call(that, item),
- item.optionClass,
- item.inlineStyle
- ),
- '',
- item.optID
- );
-
- if (liElement.firstChild) {
- liElement.firstChild.id = that.selectId + '-' + item.index;
- }
-
- break;
-
- case 'optgroup-label':
- liElement = generateOption.li(
- generateOption.label.call(that, item),
- 'dropdown-header' + item.optgroupClass,
- item.optID
- );
-
- break;
- }
-
- item.element = liElement;
- mainElements.push(liElement);
-
- // count the number of characters in the option - not perfect, but should work in most cases
- if (item.display) combinedLength += item.display.length;
- if (item.subtext) combinedLength += item.subtext.length;
- // if there is an icon, ensure this option's width is checked
- if (item.icon) combinedLength += 1;
-
- if (combinedLength > widestOptionLength) {
- widestOptionLength = combinedLength;
-
- // guess which option is the widest
- // use this when calculating menu width
- // not perfect, but it's fast, and the width will be updating accordingly when scrolling
- that.selectpicker.view.widestOption = mainElements[mainElements.length - 1];
- }
- }
-
- for (var len = selectData.length, i = 0; i < len; i++) {
- var item = selectData[i];
-
- buildElement(item);
- }
-
- this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements;
- },
-
- findLis: function () {
- return this.$menuInner.find('.inner > li');
- },
-
- render: function () {
- var that = this,
- element = this.$element[0],
- // ensure titleOption is appended and selected (if necessary) before getting selectedOptions
- placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0,
- selectedOptions = getSelectedOptions(element, this.options.hideDisabled),
- selectedCount = selectedOptions.length,
- button = this.$button[0],
- buttonInner = button.querySelector('.filter-option-inner-inner'),
- multipleSeparator = document.createTextNode(this.options.multipleSeparator),
- titleFragment = elementTemplates.fragment.cloneNode(false),
- showCount,
- countMax,
- hasContent = false;
-
- button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !getSelectValues(element, selectedOptions));
-
- if (!that.multiple && selectedOptions.length === 1) {
- that.selectpicker.view.displayedValue = getSelectValues(element, selectedOptions);
- }
-
- if (this.options.selectedTextFormat === 'static') {
- titleFragment = generateOption.text.call(this, { text: this.options.title }, true);
- } else {
- showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 1;
-
- // determine if the number of selected options will be shown (showCount === true)
- if (showCount) {
- countMax = this.options.selectedTextFormat.split('>');
- showCount = (countMax.length > 1 && selectedCount > countMax[1]) || (countMax.length === 1 && selectedCount >= 2);
- }
-
- // only loop through all selected options if the count won't be shown
- if (showCount === false) {
- if (!placeholderSelected) {
- for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) {
- if (selectedIndex < 50) {
- var option = selectedOptions[selectedIndex],
- thisData = this.selectpicker.main.data[option.liIndex],
- titleOptions = {};
-
- if (this.multiple && selectedIndex > 0) {
- titleFragment.appendChild(multipleSeparator.cloneNode(false));
- }
-
- if (option.title) {
- titleOptions.text = option.title;
- } else if (thisData) {
- if (thisData.content && that.options.showContent) {
- titleOptions.content = thisData.content.toString();
- hasContent = true;
- } else {
- if (that.options.showIcon) {
- titleOptions.icon = thisData.icon;
- }
- if (that.options.showSubtext && !that.multiple && thisData.subtext) titleOptions.subtext = ' ' + thisData.subtext;
- titleOptions.text = option.textContent.trim();
- }
- }
-
- titleFragment.appendChild(generateOption.text.call(this, titleOptions, true));
- } else {
- break;
- }
- }
-
- // add ellipsis
- if (selectedCount > 49) {
- titleFragment.appendChild(document.createTextNode('...'));
- }
- }
- } else {
- var optionSelector = ':not([hidden]):not([data-hidden="true"]):not([data-divider="true"])';
- if (this.options.hideDisabled) optionSelector += ':not(:disabled)';
-
- // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc.
- var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length,
- tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText;
-
- titleFragment = generateOption.text.call(this, {
- text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString())
- }, true);
- }
- }
-
- if (this.options.title == undefined) {
- // use .attr to ensure undefined is returned if title attribute is not set
- this.options.title = this.$element.attr('title');
- }
-
- // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText
- if (!titleFragment.childNodes.length) {
- titleFragment = generateOption.text.call(this, {
- text: typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText
- }, true);
- }
-
- // strip all HTML tags and trim the result, then unescape any escaped tags
- button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim();
-
- if (this.options.sanitize && hasContent) {
- sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn);
- }
-
- buttonInner.innerHTML = '';
- buttonInner.appendChild(titleFragment);
-
- if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) {
- var filterExpand = button.querySelector('.filter-expand'),
- clone = buttonInner.cloneNode(true);
-
- clone.className = 'filter-expand';
-
- if (filterExpand) {
- button.replaceChild(clone, filterExpand);
- } else {
- button.appendChild(clone);
- }
- }
-
- this.$element.trigger('rendered' + EVENT_KEY);
- },
-
- /**
- * @param [style]
- * @param [status]
- */
- setStyle: function (newStyle, status) {
- var button = this.$button[0],
- newElement = this.$newElement[0],
- style = this.options.style.trim(),
- buttonClass;
-
- if (this.$element.attr('class')) {
- this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, ''));
- }
-
- if (version.major < 4) {
- newElement.classList.add('bs3');
-
- if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') &&
- (newElement.previousElementSibling || newElement.nextElementSibling) &&
- (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon')
- ) {
- newElement.classList.add('bs3-has-addon');
- }
- }
-
- if (newStyle) {
- buttonClass = newStyle.trim();
- } else {
- buttonClass = style;
- }
-
- if (status == 'add') {
- if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));
- } else if (status == 'remove') {
- if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' '));
- } else {
- if (style) button.classList.remove.apply(button.classList, style.split(' '));
- if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));
- }
- },
-
- liHeight: function (refresh) {
- if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;
-
- var newElement = elementTemplates.div.cloneNode(false),
- menu = elementTemplates.div.cloneNode(false),
- menuInner = elementTemplates.div.cloneNode(false),
- menuInnerInner = document.createElement('ul'),
- divider = elementTemplates.li.cloneNode(false),
- dropdownHeader = elementTemplates.li.cloneNode(false),
- li,
- a = elementTemplates.a.cloneNode(false),
- text = elementTemplates.span.cloneNode(false),
- header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,
- search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,
- actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
- doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,
- firstOption = this.$element.find('option')[0];
-
- this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth;
-
- text.className = 'text';
- a.className = 'dropdown-item ' + (firstOption ? firstOption.className : '');
- newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW;
- newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating
- if (this.options.width === 'auto') menu.style.minWidth = 0;
- menu.className = classNames.MENU + ' ' + classNames.SHOW;
- menuInner.className = 'inner ' + classNames.SHOW;
- menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '');
- divider.className = classNames.DIVIDER;
- dropdownHeader.className = 'dropdown-header';
-
- text.appendChild(document.createTextNode('\u200b'));
-
- if (this.selectpicker.current.data.length) {
- for (var i = 0; i < this.selectpicker.current.data.length; i++) {
- var data = this.selectpicker.current.data[i];
- if (data.type === 'option') {
- li = data.element;
- break;
- }
- }
- } else {
- li = elementTemplates.li.cloneNode(false);
- a.appendChild(text);
- li.appendChild(a);
- }
-
- dropdownHeader.appendChild(text.cloneNode(true));
-
- if (this.selectpicker.view.widestOption) {
- menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true));
- }
-
- menuInnerInner.appendChild(li);
- menuInnerInner.appendChild(divider);
- menuInnerInner.appendChild(dropdownHeader);
- if (header) menu.appendChild(h