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 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 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 = - '
' + - '' + - this.options.header + - '
'; - } - - if (this.options.liveSearch) { - searchbox = - ''; - } - - if (this.multiple && this.options.actionsBox) { - actionsbox = - '
' + - '
' + - '' + - '' + - '
' + - '
'; - } - - 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
  • / elements with colspans. - SOLUTION: making individual
    - _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