... tags (used in tables that can't use markdown code fences)
- - name: html_code_tag
- pattern:
- - /[\s\S]*?<\/code>/g
- # Email addresses
- - name: email_address
- pattern:
- - /[\w.+-]+@[\w.-]+\.[a-zA-Z]{2,}/g
- # Hugo / Docsy shortcodes: {{< rad file="..." >}} or {{% notice %}}
- - name: hugo_shortcode
- pattern:
- - /\{\{[%<][\s\S]*?[%>]\}\}/g
- # Hugo front matter: only skip non-rendered keys so user-facing fields
- # (title, description, linkTitle) are still spell-checked. The first
- # sub-pattern covers single-line `key: value` entries; the second covers
- # multi-line list values (e.g. `aliases:` followed by indented `- /path`
- # items); the third matches the `---` / `+++` delimiter lines.
- - name: front_matter
- pattern:
- - /^(?:type|weight|slug|url|no_list|manualLink|manualLinkTarget|category|categories|tags)\s*:[^\n]*$/gm
- - /^aliases\s*:[^\n]*(?:\n[ \t]+-[^\n]*)*/gm
- - /^(?:---|\+\+\+)\s*$/gm
-
-# Use the shared .cspellignore file (at the repo root) as a custom dictionary.
-dictionaryDefinitions:
- - name: cspellignore
- path: ../../.cspellignore
- addWords: true
-
-# Allow compound words to be checked as a single word
-# (e.g., "spellcheck" instead of "spell check").
-allowCompoundWords: true
-
-# Paths that should not be spell-checked: vendored theme/modules, generated
-# Hugo output, dependency folders and the shared dictionary itself.
-# Patterns use the `**/` prefix because cspell resolves ignorePaths relative
-# to the config file location (.github/configs/). Entries that do not exist in
-# a given repository are simply no-ops, so this superset is safe to share.
-ignorePaths:
- - "**/node_modules/**"
- - "**/.dev/**"
- - "**/.venv/**"
- - "**/venv/**"
- - "**/.terraform/**"
- - "**/.cspellignore"
- - "**/themes/**"
- - "**/_vendor/**"
- - "**/public/**"
- - "**/resources/_gen/**"
- - "**/holding-pen/**"
- - "**/redirect/**"
- - "**/presentation-pack/**"
-
-# Only check markdown files (the workflow also restricts the glob to **/*.md).
-files:
- - "**/*.md"
diff --git a/.github/scripts/monitor-remote-workflow.mjs b/.github/scripts/monitor-remote-workflow.mjs
new file mode 100644
index 0000000..d67a64f
--- /dev/null
+++ b/.github/scripts/monitor-remote-workflow.mjs
@@ -0,0 +1,156 @@
+// @ts-nocheck
+
+/**
+ * Monitor a remote workflow run that was triggered via `repository_dispatch`.
+ *
+ * Designed to be invoked from `actions/github-script`. Configuration is read
+ * from `INPUT_*` environment variables (via `core.getInput`):
+ * - OWNER (required) Target repository owner.
+ * - REPO (required) Target repository name.
+ * - WORKFLOW_FILE (required) Target workflow file name (e.g. `swa.yml`).
+ * - DISPATCH_STARTED_AT (required) ISO timestamp captured just before dispatch.
+ * - MAX_WAIT_SECONDS (optional) Overall timeout in seconds (default 900).
+ * - POLL_INTERVAL_SECONDS (optional) Poll interval in seconds (default 10).
+ *
+ * On success it exposes `run_id`, `run_url`, and `conclusion` outputs. On
+ * failure (remote run failed or timed out) it calls `core.setFailed` with a
+ * summary of the failed jobs and steps.
+ *
+ * @param {{ github: any, core: any }} param0
+ */
+export default async ({ github, core }) => {
+ try {
+ const remoteOwner = core.getInput("OWNER", { required: true });
+ const remoteRepo = core.getInput("REPO", { required: true });
+ const remoteWorkflowFile = core.getInput("WORKFLOW_FILE", {
+ required: true,
+ });
+ const dispatchStartedAt = core.getInput("DISPATCH_STARTED_AT", {
+ required: true,
+ });
+
+ const maxWaitSeconds = Number(core.getInput("MAX_WAIT_SECONDS") || "900");
+ const pollIntervalSeconds = Number(
+ core.getInput("POLL_INTERVAL_SECONDS") || "10",
+ );
+
+ /** @param {number} ms */
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
+
+ core.info(
+ `Waiting for remote workflow run in ${remoteOwner}/${remoteRepo}...`,
+ );
+
+ const findLatestRun = async () => {
+ const response = await github.rest.actions.listWorkflowRuns({
+ owner: remoteOwner,
+ repo: remoteRepo,
+ workflow_id: remoteWorkflowFile,
+ event: "repository_dispatch",
+ per_page: 20,
+ });
+
+ const candidateRuns = (response.data.workflow_runs || [])
+ /** @param {any} run */
+ .filter((run) => run.created_at >= dispatchStartedAt)
+ /** @param {any} left @param {any} right */
+ .sort((left, right) => left.created_at.localeCompare(right.created_at));
+
+ return candidateRuns.length > 0
+ ? candidateRuns[candidateRuns.length - 1]
+ : undefined;
+ };
+
+ let run;
+ for (
+ let elapsed = 0;
+ elapsed < maxWaitSeconds;
+ elapsed += pollIntervalSeconds
+ ) {
+ run = await findLatestRun();
+ if (run) {
+ break;
+ }
+
+ await sleep(pollIntervalSeconds * 1000);
+ }
+
+ if (!run) {
+ core.setFailed(
+ `Timed out waiting for remote workflow run to start: https://github.com/${remoteOwner}/${remoteRepo}/actions/workflows/${remoteWorkflowFile}`,
+ );
+ return;
+ }
+
+ const runUrl =
+ run.html_url ||
+ `https://github.com/${remoteOwner}/${remoteRepo}/actions/runs/${run.id}`;
+
+ core.info(`Monitoring remote run id: ${run.id}`);
+ core.info(`Remote workflow run URL: ${runUrl}`);
+
+ for (
+ let elapsed = 0;
+ elapsed < maxWaitSeconds;
+ elapsed += pollIntervalSeconds
+ ) {
+ const runResponse = await github.rest.actions.getWorkflowRun({
+ owner: remoteOwner,
+ repo: remoteRepo,
+ run_id: run.id,
+ });
+
+ const status = runResponse.data.status;
+ const conclusion = runResponse.data.conclusion || "";
+
+ if (status === "completed") {
+ core.setOutput("run_id", String(run.id));
+ core.setOutput("run_url", runUrl);
+ core.setOutput("conclusion", conclusion);
+
+ if (conclusion === "success") {
+ core.info("Remote workflow completed successfully");
+ return;
+ }
+
+ const jobsResponse = await github.rest.actions.listJobsForWorkflowRun({
+ owner: remoteOwner,
+ repo: remoteRepo,
+ run_id: run.id,
+ per_page: 100,
+ });
+
+ const failedJobs = (jobsResponse.data.jobs || []).filter(
+ /** @param {any} job */
+ (job) => job.conclusion !== "success",
+ );
+ const failedJobText = failedJobs
+ /** @param {any} job */
+ .map((job) => {
+ const failedSteps = (job.steps || [])
+ /** @param {any} step */
+ .filter((step) => step.conclusion === "failure")
+ /** @param {any} step */
+ .map((step) => ` - Step: ${step.name}`)
+ .join("\n");
+
+ return `- Job: ${job.name} [${job.conclusion}]${failedSteps ? `\n${failedSteps}` : ""}`;
+ })
+ .join("\n");
+
+ core.setFailed(
+ `Remote workflow failed with conclusion: ${conclusion}\nRemote workflow run: ${runUrl}${failedJobText ? `\nFailed jobs/steps:\n${failedJobText}` : ""}`,
+ );
+ return;
+ }
+
+ await sleep(pollIntervalSeconds * 1000);
+ }
+
+ core.setOutput("run_id", String(run.id));
+ core.setOutput("run_url", runUrl);
+ core.setFailed(`Timed out waiting for remote workflow completion: ${runUrl}`);
+ } catch (error) {
+ core.setFailed(error instanceof Error ? error.message : String(error));
+ }
+};
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index dada515..1d5e1cc 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -14,16 +14,32 @@ on:
permissions: {}
+concurrency:
+ group: website-swa-${{ github.event.pull_request.number || github.ref || github.run_id }}
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
+
+env:
+ TARGET_OWNER: azure-octo
+ TARGET_REPO: radius-publisher
+ TARGET_WORKFLOW_FILE: swa.yml
+ MAX_WAIT_SECONDS: "600"
+ POLL_INTERVAL_SECONDS: "15"
+ SWA_CLI_APP_NAME: radius-website
+ PREVIEW_COMMENT_HEADER: swa-preview
+ BUILD_OUTPUT_DIR: public
+ BUILD_ARTIFACT_NAME: hugo_build
+
jobs:
build:
name: Build Hugo Website
- if: github.event.action != 'closed'
+ if: >-
+ !(github.event_name == 'pull_request'
+ && github.event.action == 'closed')
runs-on: ubuntu-24.04
- timeout-minutes: 5
+ timeout-minutes: 15
permissions:
contents: read
env:
- GOVER: "^1.17"
HUGO_ENV: production
steps:
- name: Checkout website repo
@@ -31,50 +47,315 @@ jobs:
with:
persist-credentials: false
- - name: Setup Hugo
- uses: peaceiris/actions-hugo@2752ce1d29631191ea3f27c23495fa06139a5b78 # v3.2.1
+ - name: Setup Go
+ uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
+ with:
+ go-version-file: go.mod
+ cache: false
+
+ - name: Setup Node
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
+ with:
+ node-version-file: .node-version
+ cache: npm
+ cache-dependency-path: package-lock.json
+
+ - name: Install Node.js dependencies
+ run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || npm install"
+
+ - name: Verify installations
+ run: |
+ echo "Go: $(go version)"
+ echo "Node.js: $(node --version)"
+ npm run hugo:version
+
+ - name: Restore Hugo cache
+ id: cache-restore
+ uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
- hugo-version: 0.102.3
- extended: true
+ path: ${{ runner.temp }}/hugo_cache
+ key: hugo-${{ runner.os }}-${{ hashFiles('go.sum', 'package-lock.json') }}
+ restore-keys: |
+ hugo-${{ runner.os }}-
+ hugo-
- name: Build Hugo Site
run: |
if [ "${GITHUB_EVENT_NAME}" == 'pull_request' ]; then
- hugo -b "/"
+ npm run build:preview -- -b "/" --cacheDir "${RUNNER_TEMP}/hugo_cache"
else
- hugo
+ npm run build -- --cacheDir "${RUNNER_TEMP}/hugo_cache"
fi
+ env:
+ GITHUB_EVENT_NAME: ${{ github.event_name }}
+ RUNNER_TEMP: ${{ runner.temp }}
+
+ - name: Save Hugo cache
+ if: steps.cache-restore.outputs.cache-hit != 'true'
+ uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
+ with:
+ path: ${{ runner.temp }}/hugo_cache
+ key: ${{ steps.cache-restore.outputs.cache-primary-key }}
- name: Upload Hugo artifacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
- name: hugo_build
- path: ./public/
+ name: ${{ env.BUILD_ARTIFACT_NAME }}
+ path: ${{ env.BUILD_OUTPUT_DIR }}
if-no-files-found: error
+ retention-days: 1
- deploy:
- name: Deploy Hugo Website
- needs: [build]
+ dispatch-production:
+ name: Dispatch Production Deploy
+ if: >-
+ (github.event_name == 'push' && github.ref == 'refs/heads/main')
+ || github.event_name == 'workflow_dispatch'
+ needs:
+ - build
runs-on: ubuntu-24.04
- timeout-minutes: 5
+ timeout-minutes: 15
+ permissions:
+ contents: read
environment:
name: latest
url: https://radapp.io
steps:
- - name: Download Hugo artifacts
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: hugo_build
- path: site/
-
- - name: Deploy static web app
- uses: Azure/static-web-apps-deploy@1a947af9992250f3bc2e68ad0754c0b0c11566c9 # v1
- with:
- azure_static_web_apps_api_token: ${{ secrets.SWA_TOKEN }}
- skip_deploy_on_missing_secrets: true
- repo_token: ${{ github.token }}
- action: upload
- app_location: site/
- api_location: site/
- output_location: ""
- skip_app_build: true
+ - name: Checkout website repo
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ with:
+ persist-credentials: false
+ sparse-checkout: |
+ .github/scripts/monitor-remote-workflow.mjs
+
+ - name: Get App Token
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
+ id: github-app-token
+ with:
+ client-id: ${{ secrets.RADIUS_PUBLISHER_BOT_CLIENT_ID }}
+ private-key: ${{ secrets.RADIUS_PUBLISHER_BOT_PRIVATE_KEY }}
+ permission-metadata: read
+ permission-actions: read
+ permission-contents: write
+ owner: ${{ env.TARGET_OWNER }}
+ repositories: |
+ ${{ env.TARGET_REPO }}
+
+ - name: Capture dispatch start time
+ id: dispatch-start
+ run: |
+ echo "started_at=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "${GITHUB_OUTPUT}"
+
+ - name: Dispatch production deploy
+ uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
+ with:
+ token: ${{ steps.github-app-token.outputs.token }}
+ repository: ${{ env.TARGET_OWNER }}/${{ env.TARGET_REPO }}
+ event-type: swa
+ client-payload: |-
+ {
+ "action": "deploy",
+ "environment": "production",
+ "source_repository": "${{ github.repository }}",
+ "source_run_id": "${{ github.run_id }}",
+ "artifact_name": "${{ env.BUILD_ARTIFACT_NAME }}",
+ "swa_cli_app_name": "${{ env.SWA_CLI_APP_NAME }}"
+ }
+
+ - name: Monitor remote workflow
+ id: monitor
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ with:
+ github-token: ${{ steps.github-app-token.outputs.token }}
+ script: |
+ const { default: script } = await import(`${process.env.GITHUB_WORKSPACE}/.github/scripts/monitor-remote-workflow.mjs`)
+ await script({github, core})
+ env:
+ INPUT_OWNER: ${{ env.TARGET_OWNER }}
+ INPUT_REPO: ${{ env.TARGET_REPO }}
+ INPUT_WORKFLOW_FILE: ${{ env.TARGET_WORKFLOW_FILE }}
+ INPUT_DISPATCH_STARTED_AT: ${{ steps.dispatch-start.outputs.started_at }}
+ INPUT_MAX_WAIT_SECONDS: ${{ env.MAX_WAIT_SECONDS }}
+ INPUT_POLL_INTERVAL_SECONDS: ${{ env.POLL_INTERVAL_SECONDS }}
+
+ - name: Show failed logs
+ if: failure()
+ run: |
+ gh run view "${RUN_ID}" --repo "${TARGET_OWNER}/${TARGET_REPO}" --log-failed || true
+ env:
+ GH_TOKEN: ${{ steps.github-app-token.outputs.token }}
+ RUN_ID: ${{ steps.monitor.outputs.run_id }}
+
+ dispatch-preview:
+ name: Dispatch Preview Deploy
+ if: >-
+ github.event_name == 'pull_request'
+ && github.event.action != 'closed'
+ && github.event.pull_request.head.repo.full_name == github.repository
+ needs:
+ - build
+ runs-on: ubuntu-24.04
+ timeout-minutes: 15
+ permissions:
+ contents: read
+ pull-requests: write
+ steps:
+ - name: Checkout website repo
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ with:
+ persist-credentials: false
+ sparse-checkout: |
+ .github/scripts/monitor-remote-workflow.mjs
+
+ - name: Get App Token
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
+ id: github-app-token
+ with:
+ client-id: ${{ secrets.RADIUS_PUBLISHER_BOT_CLIENT_ID }}
+ private-key: ${{ secrets.RADIUS_PUBLISHER_BOT_PRIVATE_KEY }}
+ permission-metadata: read
+ permission-actions: read
+ permission-contents: write
+ owner: ${{ env.TARGET_OWNER }}
+ repositories: |
+ ${{ env.TARGET_REPO }}
+
+ - name: Capture dispatch start time
+ id: dispatch-start
+ run: |
+ echo "started_at=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "${GITHUB_OUTPUT}"
+
+ - name: Dispatch preview deploy
+ uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
+ with:
+ token: ${{ steps.github-app-token.outputs.token }}
+ repository: ${{ env.TARGET_OWNER }}/${{ env.TARGET_REPO }}
+ event-type: swa
+ client-payload: |-
+ {
+ "action": "deploy",
+ "environment": "preview",
+ "pr_number": ${{ github.event.pull_request.number }},
+ "source_repository": "${{ github.repository }}",
+ "source_run_id": "${{ github.run_id }}",
+ "artifact_name": "${{ env.BUILD_ARTIFACT_NAME }}",
+ "swa_cli_app_name": "${{ env.SWA_CLI_APP_NAME }}"
+ }
+
+ - name: Monitor remote workflow
+ id: monitor
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ with:
+ github-token: ${{ steps.github-app-token.outputs.token }}
+ script: |
+ const { default: script } = await import(`${process.env.GITHUB_WORKSPACE}/.github/scripts/monitor-remote-workflow.mjs`)
+ await script({github, core})
+ env:
+ INPUT_OWNER: ${{ env.TARGET_OWNER }}
+ INPUT_REPO: ${{ env.TARGET_REPO }}
+ INPUT_WORKFLOW_FILE: ${{ env.TARGET_WORKFLOW_FILE }}
+ INPUT_DISPATCH_STARTED_AT: ${{ steps.dispatch-start.outputs.started_at }}
+ INPUT_MAX_WAIT_SECONDS: ${{ env.MAX_WAIT_SECONDS }}
+ INPUT_POLL_INTERVAL_SECONDS: ${{ env.POLL_INTERVAL_SECONDS }}
+
+ - name: Upsert preview PR comment
+ if: success()
+ uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
+ with:
+ header: ${{ env.PREVIEW_COMMENT_HEADER }}
+ skip_unchanged: true
+ message: |
+ ### Static Web App Preview
+ | Environment | Deployment |
+ |---|---|
+ | pr${{ github.event.pull_request.number }} | [View workflow run](${{ steps.monitor.outputs.run_url }}) |
+
+ _Deployed from commit `${{ github.event.pull_request.head.sha }}` via the publisher workflow._
+
+ - name: Show failed logs
+ if: failure()
+ run: |
+ gh run view "${RUN_ID}" --repo "${TARGET_OWNER}/${TARGET_REPO}" --log-failed || true
+ env:
+ GH_TOKEN: ${{ steps.github-app-token.outputs.token }}
+ RUN_ID: ${{ steps.monitor.outputs.run_id }}
+
+ dispatch-cleanup:
+ name: Dispatch Preview Cleanup
+ if: >-
+ github.event_name == 'pull_request'
+ && github.event.action == 'closed'
+ && github.event.pull_request.head.repo.full_name == github.repository
+ runs-on: ubuntu-24.04
+ timeout-minutes: 15
+ permissions:
+ contents: read
+ pull-requests: write
+ steps:
+ - name: Checkout website repo
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+ with:
+ persist-credentials: false
+ sparse-checkout: |
+ .github/scripts/monitor-remote-workflow.mjs
+
+ - name: Get App Token
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
+ id: github-app-token
+ with:
+ client-id: ${{ secrets.RADIUS_PUBLISHER_BOT_CLIENT_ID }}
+ private-key: ${{ secrets.RADIUS_PUBLISHER_BOT_PRIVATE_KEY }}
+ permission-metadata: read
+ permission-actions: read
+ permission-contents: write
+ owner: ${{ env.TARGET_OWNER }}
+ repositories: |
+ ${{ env.TARGET_REPO }}
+
+ - name: Delete preview PR comment
+ uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
+ with:
+ header: ${{ env.PREVIEW_COMMENT_HEADER }}
+ delete: true
+
+ - name: Capture dispatch start time
+ id: dispatch-start
+ run: |
+ echo "started_at=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "${GITHUB_OUTPUT}"
+
+ - name: Dispatch preview cleanup
+ uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
+ with:
+ token: ${{ steps.github-app-token.outputs.token }}
+ repository: ${{ env.TARGET_OWNER }}/${{ env.TARGET_REPO }}
+ event-type: swa
+ client-payload: |-
+ {
+ "action": "close",
+ "source_repository": "${{ github.repository }}",
+ "pr_number": ${{ github.event.pull_request.number }},
+ "swa_cli_app_name": "${{ env.SWA_CLI_APP_NAME }}"
+ }
+
+ - name: Monitor remote workflow
+ id: monitor
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ with:
+ github-token: ${{ steps.github-app-token.outputs.token }}
+ script: |
+ const { default: script } = await import(`${process.env.GITHUB_WORKSPACE}/.github/scripts/monitor-remote-workflow.mjs`)
+ await script({github, core})
+ env:
+ INPUT_OWNER: ${{ env.TARGET_OWNER }}
+ INPUT_REPO: ${{ env.TARGET_REPO }}
+ INPUT_WORKFLOW_FILE: ${{ env.TARGET_WORKFLOW_FILE }}
+ INPUT_DISPATCH_STARTED_AT: ${{ steps.dispatch-start.outputs.started_at }}
+ INPUT_MAX_WAIT_SECONDS: ${{ env.MAX_WAIT_SECONDS }}
+ INPUT_POLL_INTERVAL_SECONDS: ${{ env.POLL_INTERVAL_SECONDS }}
+
+ - name: Show failed logs
+ if: failure()
+ run: |
+ gh run view "${RUN_ID}" --repo "${TARGET_OWNER}/${TARGET_REPO}" --log-failed || true
+ env:
+ GH_TOKEN: ${{ steps.github-app-token.outputs.token }}
+ RUN_ID: ${{ steps.monitor.outputs.run_id }}
diff --git a/.gitignore b/.gitignore
index f7ca596..f15b6a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,6 @@
_gen/
.DS_Store
public/*
+resources/
+node_modules/
+_vendor/
diff --git a/.node-version b/.node-version
new file mode 100644
index 0000000..a45fd52
--- /dev/null
+++ b/.node-version
@@ -0,0 +1 @@
+24
diff --git a/README.md b/README.md
index 22bcaf4..9dfb810 100644
--- a/README.md
+++ b/README.md
@@ -3,23 +3,34 @@
[](https://github.com/radius-project/website/actions/workflows/main.yml)
[](https://github.com/radius-project/website/blob/main/LICENSE)
-This repository contains the source code for the Radius website, available at https://radapp.io.
+This repository contains the source code for the Radius website, available at .
## Contributing
-1. Download dependencies
- - [Hugo extended](https://gohugo.io/getting-started/installing)
+1. Install dependencies
+ - [Node.js](https://nodejs.org/) (see [`.node-version`](./.node-version) for the expected version)
1. Clone the repository
+
```bash
git clone https://github.com/radius-project/website.git
cd website
```
+
+1. Install npm packages (this also installs the pinned Hugo extended binary)
+
+ ```bash
+ npm install
+ ```
+
1. Run the development server
+
```bash
- hugo server
+ npm run start
```
-1. Open a browser to http://localhost:1313
+
+ To include draft and future-dated content, use `npm run start:drafts` instead.
+1. Open a browser to
## Code of Conduct
diff --git a/config/_default/config.toml b/config/_default/config.toml
index 280845b..d31e7d8 100644
--- a/config/_default/config.toml
+++ b/config/_default/config.toml
@@ -14,3 +14,9 @@ googleAnalytics = "G-0EZZYE4MPR" # example : UA-123-45
# unsafe html
[markup.goldmark.renderer]
unsafe = true
+
+# Hugo Modules
+[module]
+[module.hugoVersion]
+extended = true
+min = "0.157.0"
diff --git a/config/_default/languages.toml b/config/_default/languages.toml
index 680429a..e4e6423 100644
--- a/config/_default/languages.toml
+++ b/config/_default/languages.toml
@@ -1,9 +1,11 @@
############################# English ############################
[en]
-languageName = "En"
+label = "En"
title = "Radius"
contentDir = "content"
weight = 1
+
+[en.params]
########### footer content ##########
footer_menu_left = "Learn"
footer_menu_middle = "Community"
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..610642d
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,3 @@
+module github.com/radius-project/website
+
+go 1.26.4
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..ee651b9
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,230 @@
+{
+ "name": "radius-website",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "radius-website",
+ "version": "0.0.0",
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "hugo-extended": "0.163.3",
+ "rimraf": "^6.1.3"
+ }
+ },
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.4"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/adm-zip": {
+ "version": "0.5.17",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.17.tgz",
+ "integrity": "sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz",
+ "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/glob": {
+ "version": "13.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
+ "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "minimatch": "^10.2.2",
+ "minipass": "^7.1.3",
+ "path-scurry": "^2.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/hugo-extended": {
+ "version": "0.163.3",
+ "resolved": "https://registry.npmjs.org/hugo-extended/-/hugo-extended-0.163.3.tgz",
+ "integrity": "sha512-YcH9VBNW9N01cEQ2TsmFEaUikmmFu4dytBLiX2BFWM+IJdejxcSTfIu/bNgGYVJOARYxJTXJwyPqr1zIndNcCQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "adm-zip": "^0.5.17",
+ "tar": "^7.5.15"
+ },
+ "bin": {
+ "hugo": "dist/cli.mjs",
+ "hugo-extended": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.17"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "11.5.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz",
+ "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.5"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz",
+ "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/path-scurry": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
+ "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz",
+ "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "glob": "^13.0.3",
+ "package-json-from-dist": "^1.0.1"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/tar": {
+ "version": "7.5.16",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz",
+ "integrity": "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.1.0",
+ "yallist": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..bd32d4f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "radius-website",
+ "version": "0.0.0",
+ "description": "Source for the Radius website (https://radapp.io).",
+ "license": "Apache-2.0",
+ "homepage": "https://radapp.io",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/radius-project/website.git"
+ },
+ "devDependencies": {
+ "hugo-extended": "0.163.3",
+ "rimraf": "^6.1.3"
+ },
+ "scripts": {
+ "build": "hugo --gc --minify",
+ "build:preview": "hugo --gc --minify --buildDrafts --buildFuture",
+ "start": "hugo server",
+ "start:drafts": "hugo server --buildDrafts --navigateToChanged",
+ "hugo": "hugo",
+ "hugo:version": "hugo version",
+ "hugo:mod:get": "hugo mod get",
+ "hugo:mod:tidy": "hugo mod tidy",
+ "hugo:mod:clean": "hugo mod clean --all",
+ "hugo:mod:graph": "hugo mod graph",
+ "clean": "hugo --gc && rimraf public resources"
+ }
+}
diff --git a/static/ms65434265.txt b/static/ms65434265.txt
index 308b5d8..ec1e68c 100644
--- a/static/ms65434265.txt
+++ b/static/ms65434265.txt
@@ -1,5 +1,5 @@
-{
- "Description": "Domain ownership verification file for Microsoft 365 - place in the website root",
- "Domain": "radapp.io",
- "Id": "4c4247e0-35f4-4882-98d6-81288f23afe7"
+{
+ "Description": "Domain ownership verification file for Microsoft 365 - place in the website root",
+ "Domain": "radapp.io",
+ "Id": "4c4247e0-35f4-4882-98d6-81288f23afe7"
}
\ No newline at end of file
diff --git a/themes/bigspring-light/assets/plugins/bootstrap/bootstrap.min.js b/themes/bigspring-light/assets/plugins/bootstrap/bootstrap.min.js
index 9af37f6..02ba388 100644
--- a/themes/bigspring-light/assets/plugins/bootstrap/bootstrap.min.js
+++ b/themes/bigspring-light/assets/plugins/bootstrap/bootstrap.min.js
@@ -1,5168 +1,5168 @@
-/*!
- * Bootstrap v4.6.0 (https://getbootstrap.com/)
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */
-(function (global, factory) {
- typeof exports === "object" && typeof module !== "undefined"
- ? factory(exports, require("jquery"), require("popper.js"))
- : typeof define === "function" && define.amd
- ? define(["exports", "jquery", "popper.js"], factory)
- : ((global =
- typeof globalThis !== "undefined" ? globalThis : global || self),
- factory((global.bootstrap = {}), global.jQuery, global.Popper));
-})(this, function (exports, $, Popper) {
- "use strict";
-
- function _interopDefaultLegacy(e) {
- return e && typeof e === "object" && "default" in e ? e : { default: e };
- }
-
- var $__default = /*#__PURE__*/ _interopDefaultLegacy($);
- var Popper__default = /*#__PURE__*/ _interopDefaultLegacy(Popper);
-
- function _defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
-
- function _createClass(Constructor, protoProps, staticProps) {
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
- if (staticProps) _defineProperties(Constructor, staticProps);
- return Constructor;
- }
-
- function _extends() {
- _extends =
- Object.assign ||
- function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
-
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
-
- return target;
- };
-
- return _extends.apply(this, arguments);
- }
-
- function _inheritsLoose(subClass, superClass) {
- subClass.prototype = Object.create(superClass.prototype);
- subClass.prototype.constructor = subClass;
- subClass.__proto__ = superClass;
- }
-
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v4.6.0): util.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- * --------------------------------------------------------------------------
- */
- /**
- * ------------------------------------------------------------------------
- * Private TransitionEnd Helpers
- * ------------------------------------------------------------------------
- */
-
- var TRANSITION_END = "transitionend";
- var MAX_UID = 1000000;
- var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
-
- function toType(obj) {
- if (obj === null || typeof obj === "undefined") {
- return "" + obj;
- }
-
- return {}.toString
- .call(obj)
- .match(/\s([a-z]+)/i)[1]
- .toLowerCase();
- }
-
- function getSpecialTransitionEndEvent() {
- return {
- bindType: TRANSITION_END,
- delegateType: TRANSITION_END,
- handle: function handle(event) {
- if ($__default["default"](event.target).is(this)) {
- return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
- }
-
- return undefined;
- },
- };
- }
-
- function transitionEndEmulator(duration) {
- var _this = this;
-
- var called = false;
- $__default["default"](this).one(Util.TRANSITION_END, function () {
- called = true;
- });
- setTimeout(function () {
- if (!called) {
- Util.triggerTransitionEnd(_this);
- }
- }, duration);
- return this;
- }
-
- function setTransitionEndSupport() {
- $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
- $__default["default"].event.special[Util.TRANSITION_END] =
- getSpecialTransitionEndEvent();
- }
- /**
- * --------------------------------------------------------------------------
- * Public Util Api
- * --------------------------------------------------------------------------
- */
-
- var Util = {
- TRANSITION_END: "bsTransitionEnd",
- getUID: function getUID(prefix) {
- do {
- prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
- } while (document.getElementById(prefix));
-
- return prefix;
- },
- getSelectorFromElement: function getSelectorFromElement(element) {
- var selector = element.getAttribute("data-target");
-
- if (!selector || selector === "#") {
- var hrefAttr = element.getAttribute("href");
- selector = hrefAttr && hrefAttr !== "#" ? hrefAttr.trim() : "";
- }
-
- try {
- return document.querySelector(selector) ? selector : null;
- } catch (_) {
- return null;
- }
- },
- getTransitionDurationFromElement: function getTransitionDurationFromElement(
- element
- ) {
- if (!element) {
- return 0;
- } // Get transition-duration of the element
-
- var transitionDuration = $__default["default"](element).css(
- "transition-duration"
- );
- var transitionDelay =
- $__default["default"](element).css("transition-delay");
- var floatTransitionDuration = parseFloat(transitionDuration);
- var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
-
- if (!floatTransitionDuration && !floatTransitionDelay) {
- return 0;
- } // If multiple durations are defined, take the first
-
- transitionDuration = transitionDuration.split(",")[0];
- transitionDelay = transitionDelay.split(",")[0];
- return (
- (parseFloat(transitionDuration) + parseFloat(transitionDelay)) *
- MILLISECONDS_MULTIPLIER
- );
- },
- reflow: function reflow(element) {
- return element.offsetHeight;
- },
- triggerTransitionEnd: function triggerTransitionEnd(element) {
- $__default["default"](element).trigger(TRANSITION_END);
- },
- supportsTransitionEnd: function supportsTransitionEnd() {
- return Boolean(TRANSITION_END);
- },
- isElement: function isElement(obj) {
- return (obj[0] || obj).nodeType;
- },
- typeCheckConfig: function typeCheckConfig(
- componentName,
- config,
- configTypes
- ) {
- for (var property in configTypes) {
- if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
- var expectedTypes = configTypes[property];
- var value = config[property];
- var valueType =
- value && Util.isElement(value) ? "element" : toType(value);
-
- if (!new RegExp(expectedTypes).test(valueType)) {
- throw new Error(
- componentName.toUpperCase() +
- ": " +
- ('Option "' +
- property +
- '" provided type "' +
- valueType +
- '" ') +
- ('but expected type "' + expectedTypes + '".')
- );
- }
- }
- }
- },
- findShadowRoot: function findShadowRoot(element) {
- if (!document.documentElement.attachShadow) {
- return null;
- } // Can find the shadow root otherwise it'll return the document
-
- if (typeof element.getRootNode === "function") {
- var root = element.getRootNode();
- return root instanceof ShadowRoot ? root : null;
- }
-
- if (element instanceof ShadowRoot) {
- return element;
- } // when we don't find a shadow root
-
- if (!element.parentNode) {
- return null;
- }
-
- return Util.findShadowRoot(element.parentNode);
- },
- jQueryDetection: function jQueryDetection() {
- if (typeof $__default["default"] === "undefined") {
- throw new TypeError(
- "Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript."
- );
- }
-
- var version = $__default["default"].fn.jquery.split(" ")[0].split(".");
- var minMajor = 1;
- var ltMajor = 2;
- var minMinor = 9;
- var minPatch = 1;
- var maxMajor = 4;
-
- if (
- (version[0] < ltMajor && version[1] < minMinor) ||
- (version[0] === minMajor &&
- version[1] === minMinor &&
- version[2] < minPatch) ||
- version[0] >= maxMajor
- ) {
- throw new Error(
- "Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0"
- );
- }
- },
- };
- Util.jQueryDetection();
- setTransitionEndSupport();
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME = "alert";
- var VERSION = "4.6.0";
- var DATA_KEY = "bs.alert";
- var EVENT_KEY = "." + DATA_KEY;
- var DATA_API_KEY = ".data-api";
- var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
- var SELECTOR_DISMISS = '[data-dismiss="alert"]';
- var EVENT_CLOSE = "close" + EVENT_KEY;
- var EVENT_CLOSED = "closed" + EVENT_KEY;
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
- var CLASS_NAME_ALERT = "alert";
- var CLASS_NAME_FADE = "fade";
- var CLASS_NAME_SHOW = "show";
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Alert = /*#__PURE__*/ (function () {
- function Alert(element) {
- this._element = element;
- } // Getters
-
- var _proto = Alert.prototype;
-
- // Public
- _proto.close = function close(element) {
- var rootElement = this._element;
-
- if (element) {
- rootElement = this._getRootElement(element);
- }
-
- var customEvent = this._triggerCloseEvent(rootElement);
-
- if (customEvent.isDefaultPrevented()) {
- return;
- }
-
- this._removeElement(rootElement);
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY);
- this._element = null;
- }; // Private
-
- _proto._getRootElement = function _getRootElement(element) {
- var selector = Util.getSelectorFromElement(element);
- var parent = false;
-
- if (selector) {
- parent = document.querySelector(selector);
- }
-
- if (!parent) {
- parent = $__default["default"](element).closest(
- "." + CLASS_NAME_ALERT
- )[0];
- }
-
- return parent;
- };
-
- _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
- var closeEvent = $__default["default"].Event(EVENT_CLOSE);
- $__default["default"](element).trigger(closeEvent);
- return closeEvent;
- };
-
- _proto._removeElement = function _removeElement(element) {
- var _this = this;
-
- $__default["default"](element).removeClass(CLASS_NAME_SHOW);
-
- if (!$__default["default"](element).hasClass(CLASS_NAME_FADE)) {
- this._destroyElement(element);
-
- return;
- }
-
- var transitionDuration = Util.getTransitionDurationFromElement(element);
- $__default["default"](element)
- .one(Util.TRANSITION_END, function (event) {
- return _this._destroyElement(element, event);
- })
- .emulateTransitionEnd(transitionDuration);
- };
-
- _proto._destroyElement = function _destroyElement(element) {
- $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
- }; // Static
-
- Alert._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY);
-
- if (!data) {
- data = new Alert(this);
- $element.data(DATA_KEY, data);
- }
-
- if (config === "close") {
- data[config](this);
- }
- });
- };
-
- Alert._handleDismiss = function _handleDismiss(alertInstance) {
- return function (event) {
- if (event) {
- event.preventDefault();
- }
-
- alertInstance.close(this);
- };
- };
-
- _createClass(Alert, null, [
- {
- key: "VERSION",
- get: function get() {
- return VERSION;
- },
- },
- ]);
-
- return Alert;
- })();
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
-
- $__default["default"](document).on(
- EVENT_CLICK_DATA_API,
- SELECTOR_DISMISS,
- Alert._handleDismiss(new Alert())
- );
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME] = Alert._jQueryInterface;
- $__default["default"].fn[NAME].Constructor = Alert;
-
- $__default["default"].fn[NAME].noConflict = function () {
- $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
- return Alert._jQueryInterface;
- };
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$1 = "button";
- var VERSION$1 = "4.6.0";
- var DATA_KEY$1 = "bs.button";
- var EVENT_KEY$1 = "." + DATA_KEY$1;
- var DATA_API_KEY$1 = ".data-api";
- var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1];
- var CLASS_NAME_ACTIVE = "active";
- var CLASS_NAME_BUTTON = "btn";
- var CLASS_NAME_FOCUS = "focus";
- var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
- var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
- var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
- var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
- var SELECTOR_INPUT = 'input:not([type="hidden"])';
- var SELECTOR_ACTIVE = ".active";
- var SELECTOR_BUTTON = ".btn";
- var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1;
- var EVENT_FOCUS_BLUR_DATA_API =
- "focus" +
- EVENT_KEY$1 +
- DATA_API_KEY$1 +
- " " +
- ("blur" + EVENT_KEY$1 + DATA_API_KEY$1);
- var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$1 + DATA_API_KEY$1;
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Button = /*#__PURE__*/ (function () {
- function Button(element) {
- this._element = element;
- this.shouldAvoidTriggerChange = false;
- } // Getters
-
- var _proto = Button.prototype;
-
- // Public
- _proto.toggle = function toggle() {
- var triggerChangeEvent = true;
- var addAriaPressed = true;
- var rootElement = $__default["default"](this._element).closest(
- SELECTOR_DATA_TOGGLES
- )[0];
-
- if (rootElement) {
- var input = this._element.querySelector(SELECTOR_INPUT);
-
- if (input) {
- if (input.type === "radio") {
- if (
- input.checked &&
- this._element.classList.contains(CLASS_NAME_ACTIVE)
- ) {
- triggerChangeEvent = false;
- } else {
- var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
-
- if (activeElement) {
- $__default["default"](activeElement).removeClass(
- CLASS_NAME_ACTIVE
- );
- }
- }
- }
-
- if (triggerChangeEvent) {
- // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
- if (input.type === "checkbox" || input.type === "radio") {
- input.checked =
- !this._element.classList.contains(CLASS_NAME_ACTIVE);
- }
-
- if (!this.shouldAvoidTriggerChange) {
- $__default["default"](input).trigger("change");
- }
- }
-
- input.focus();
- addAriaPressed = false;
- }
- }
-
- if (
- !(
- this._element.hasAttribute("disabled") ||
- this._element.classList.contains("disabled")
- )
- ) {
- if (addAriaPressed) {
- this._element.setAttribute(
- "aria-pressed",
- !this._element.classList.contains(CLASS_NAME_ACTIVE)
- );
- }
-
- if (triggerChangeEvent) {
- $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE);
- }
- }
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$1);
- this._element = null;
- }; // Static
-
- Button._jQueryInterface = function _jQueryInterface(
- config,
- avoidTriggerChange
- ) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY$1);
-
- if (!data) {
- data = new Button(this);
- $element.data(DATA_KEY$1, data);
- }
-
- data.shouldAvoidTriggerChange = avoidTriggerChange;
-
- if (config === "toggle") {
- data[config]();
- }
- });
- };
-
- _createClass(Button, null, [
- {
- key: "VERSION",
- get: function get() {
- return VERSION$1;
- },
- },
- ]);
-
- return Button;
- })();
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
-
- $__default["default"](document)
- .on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
- var button = event.target;
- var initialButton = button;
-
- if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
- button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
- }
-
- if (
- !button ||
- button.hasAttribute("disabled") ||
- button.classList.contains("disabled")
- ) {
- event.preventDefault(); // work around Firefox bug #1540995
- } else {
- var inputBtn = button.querySelector(SELECTOR_INPUT);
-
- if (
- inputBtn &&
- (inputBtn.hasAttribute("disabled") ||
- inputBtn.classList.contains("disabled"))
- ) {
- event.preventDefault(); // work around Firefox bug #1540995
-
- return;
- }
-
- if (initialButton.tagName === "INPUT" || button.tagName !== "LABEL") {
- Button._jQueryInterface.call(
- $__default["default"](button),
- "toggle",
- initialButton.tagName === "INPUT"
- );
- }
- }
- })
- .on(
- EVENT_FOCUS_BLUR_DATA_API,
- SELECTOR_DATA_TOGGLE_CARROT,
- function (event) {
- var button = $__default["default"](event.target).closest(
- SELECTOR_BUTTON
- )[0];
- $__default["default"](button).toggleClass(
- CLASS_NAME_FOCUS,
- /^focus(in)?$/.test(event.type)
- );
- }
- );
- $__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
- // ensure correct active class is set to match the controls' actual values/states
- // find all checkboxes/readio buttons inside data-toggle groups
- var buttons = [].slice.call(
- document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS)
- );
-
- for (var i = 0, len = buttons.length; i < len; i++) {
- var button = buttons[i];
- var input = button.querySelector(SELECTOR_INPUT);
-
- if (input.checked || input.hasAttribute("checked")) {
- button.classList.add(CLASS_NAME_ACTIVE);
- } else {
- button.classList.remove(CLASS_NAME_ACTIVE);
- }
- } // find all button toggles
-
- buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
-
- for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
- var _button = buttons[_i];
-
- if (_button.getAttribute("aria-pressed") === "true") {
- _button.classList.add(CLASS_NAME_ACTIVE);
- } else {
- _button.classList.remove(CLASS_NAME_ACTIVE);
- }
- }
- });
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME$1] = Button._jQueryInterface;
- $__default["default"].fn[NAME$1].Constructor = Button;
-
- $__default["default"].fn[NAME$1].noConflict = function () {
- $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;
- return Button._jQueryInterface;
- };
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$2 = "carousel";
- var VERSION$2 = "4.6.0";
- var DATA_KEY$2 = "bs.carousel";
- var EVENT_KEY$2 = "." + DATA_KEY$2;
- var DATA_API_KEY$2 = ".data-api";
- var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2];
- var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
-
- var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
-
- var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
-
- var SWIPE_THRESHOLD = 40;
- var Default = {
- interval: 5000,
- keyboard: true,
- slide: false,
- pause: "hover",
- wrap: true,
- touch: true,
- };
- var DefaultType = {
- interval: "(number|boolean)",
- keyboard: "boolean",
- slide: "(boolean|string)",
- pause: "(string|boolean)",
- wrap: "boolean",
- touch: "boolean",
- };
- var DIRECTION_NEXT = "next";
- var DIRECTION_PREV = "prev";
- var DIRECTION_LEFT = "left";
- var DIRECTION_RIGHT = "right";
- var EVENT_SLIDE = "slide" + EVENT_KEY$2;
- var EVENT_SLID = "slid" + EVENT_KEY$2;
- var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2;
- var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2;
- var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2;
- var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2;
- var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2;
- var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2;
- var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2;
- var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2;
- var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2;
- var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$2 + DATA_API_KEY$2;
- var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2;
- var CLASS_NAME_CAROUSEL = "carousel";
- var CLASS_NAME_ACTIVE$1 = "active";
- var CLASS_NAME_SLIDE = "slide";
- var CLASS_NAME_RIGHT = "carousel-item-right";
- var CLASS_NAME_LEFT = "carousel-item-left";
- var CLASS_NAME_NEXT = "carousel-item-next";
- var CLASS_NAME_PREV = "carousel-item-prev";
- var CLASS_NAME_POINTER_EVENT = "pointer-event";
- var SELECTOR_ACTIVE$1 = ".active";
- var SELECTOR_ACTIVE_ITEM = ".active.carousel-item";
- var SELECTOR_ITEM = ".carousel-item";
- var SELECTOR_ITEM_IMG = ".carousel-item img";
- var SELECTOR_NEXT_PREV = ".carousel-item-next, .carousel-item-prev";
- var SELECTOR_INDICATORS = ".carousel-indicators";
- var SELECTOR_DATA_SLIDE = "[data-slide], [data-slide-to]";
- var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
- var PointerType = {
- TOUCH: "touch",
- PEN: "pen",
- };
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Carousel = /*#__PURE__*/ (function () {
- function Carousel(element, config) {
- this._items = null;
- this._interval = null;
- this._activeElement = null;
- this._isPaused = false;
- this._isSliding = false;
- this.touchTimeout = null;
- this.touchStartX = 0;
- this.touchDeltaX = 0;
- this._config = this._getConfig(config);
- this._element = element;
- this._indicatorsElement =
- this._element.querySelector(SELECTOR_INDICATORS);
- this._touchSupported =
- "ontouchstart" in document.documentElement ||
- navigator.maxTouchPoints > 0;
- this._pointerEvent = Boolean(
- window.PointerEvent || window.MSPointerEvent
- );
-
- this._addEventListeners();
- } // Getters
-
- var _proto = Carousel.prototype;
-
- // Public
- _proto.next = function next() {
- if (!this._isSliding) {
- this._slide(DIRECTION_NEXT);
- }
- };
-
- _proto.nextWhenVisible = function nextWhenVisible() {
- var $element = $__default["default"](this._element); // Don't call next when the page isn't visible
- // or the carousel or its parent isn't visible
-
- if (
- !document.hidden &&
- $element.is(":visible") &&
- $element.css("visibility") !== "hidden"
- ) {
- this.next();
- }
- };
-
- _proto.prev = function prev() {
- if (!this._isSliding) {
- this._slide(DIRECTION_PREV);
- }
- };
-
- _proto.pause = function pause(event) {
- if (!event) {
- this._isPaused = true;
- }
-
- if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
- Util.triggerTransitionEnd(this._element);
- this.cycle(true);
- }
-
- clearInterval(this._interval);
- this._interval = null;
- };
-
- _proto.cycle = function cycle(event) {
- if (!event) {
- this._isPaused = false;
- }
-
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
-
- if (this._config.interval && !this._isPaused) {
- this._updateInterval();
-
- this._interval = setInterval(
- (document.visibilityState ? this.nextWhenVisible : this.next).bind(
- this
- ),
- this._config.interval
- );
- }
- };
-
- _proto.to = function to(index) {
- var _this = this;
-
- this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-
- var activeIndex = this._getItemIndex(this._activeElement);
-
- if (index > this._items.length - 1 || index < 0) {
- return;
- }
-
- if (this._isSliding) {
- $__default["default"](this._element).one(EVENT_SLID, function () {
- return _this.to(index);
- });
- return;
- }
-
- if (activeIndex === index) {
- this.pause();
- this.cycle();
- return;
- }
-
- var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
-
- this._slide(direction, this._items[index]);
- };
-
- _proto.dispose = function dispose() {
- $__default["default"](this._element).off(EVENT_KEY$2);
- $__default["default"].removeData(this._element, DATA_KEY$2);
- this._items = null;
- this._config = null;
- this._element = null;
- this._interval = null;
- this._isPaused = null;
- this._isSliding = null;
- this._activeElement = null;
- this._indicatorsElement = null;
- }; // Private
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default, config);
- Util.typeCheckConfig(NAME$2, config, DefaultType);
- return config;
- };
-
- _proto._handleSwipe = function _handleSwipe() {
- var absDeltax = Math.abs(this.touchDeltaX);
-
- if (absDeltax <= SWIPE_THRESHOLD) {
- return;
- }
-
- var direction = absDeltax / this.touchDeltaX;
- this.touchDeltaX = 0; // swipe left
-
- if (direction > 0) {
- this.prev();
- } // swipe right
-
- if (direction < 0) {
- this.next();
- }
- };
-
- _proto._addEventListeners = function _addEventListeners() {
- var _this2 = this;
-
- if (this._config.keyboard) {
- $__default["default"](this._element).on(
- EVENT_KEYDOWN,
- function (event) {
- return _this2._keydown(event);
- }
- );
- }
-
- if (this._config.pause === "hover") {
- $__default["default"](this._element)
- .on(EVENT_MOUSEENTER, function (event) {
- return _this2.pause(event);
- })
- .on(EVENT_MOUSELEAVE, function (event) {
- return _this2.cycle(event);
- });
- }
-
- if (this._config.touch) {
- this._addTouchEventListeners();
- }
- };
-
- _proto._addTouchEventListeners = function _addTouchEventListeners() {
- var _this3 = this;
-
- if (!this._touchSupported) {
- return;
- }
-
- var start = function start(event) {
- if (
- _this3._pointerEvent &&
- PointerType[event.originalEvent.pointerType.toUpperCase()]
- ) {
- _this3.touchStartX = event.originalEvent.clientX;
- } else if (!_this3._pointerEvent) {
- _this3.touchStartX = event.originalEvent.touches[0].clientX;
- }
- };
-
- var move = function move(event) {
- // ensure swiping with one touch and not pinching
- if (
- event.originalEvent.touches &&
- event.originalEvent.touches.length > 1
- ) {
- _this3.touchDeltaX = 0;
- } else {
- _this3.touchDeltaX =
- event.originalEvent.touches[0].clientX - _this3.touchStartX;
- }
- };
-
- var end = function end(event) {
- if (
- _this3._pointerEvent &&
- PointerType[event.originalEvent.pointerType.toUpperCase()]
- ) {
- _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
- }
-
- _this3._handleSwipe();
-
- if (_this3._config.pause === "hover") {
- // If it's a touch-enabled device, mouseenter/leave are fired as
- // part of the mouse compatibility events on first tap - the carousel
- // would stop cycling until user tapped out of it;
- // here, we listen for touchend, explicitly pause the carousel
- // (as if it's the second time we tap on it, mouseenter compat event
- // is NOT fired) and after a timeout (to allow for mouse compatibility
- // events to fire) we explicitly restart cycling
- _this3.pause();
-
- if (_this3.touchTimeout) {
- clearTimeout(_this3.touchTimeout);
- }
-
- _this3.touchTimeout = setTimeout(function (event) {
- return _this3.cycle(event);
- }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
- }
- };
-
- $__default["default"](
- this._element.querySelectorAll(SELECTOR_ITEM_IMG)
- ).on(EVENT_DRAG_START, function (e) {
- return e.preventDefault();
- });
-
- if (this._pointerEvent) {
- $__default["default"](this._element).on(
- EVENT_POINTERDOWN,
- function (event) {
- return start(event);
- }
- );
- $__default["default"](this._element).on(
- EVENT_POINTERUP,
- function (event) {
- return end(event);
- }
- );
-
- this._element.classList.add(CLASS_NAME_POINTER_EVENT);
- } else {
- $__default["default"](this._element).on(
- EVENT_TOUCHSTART,
- function (event) {
- return start(event);
- }
- );
- $__default["default"](this._element).on(
- EVENT_TOUCHMOVE,
- function (event) {
- return move(event);
- }
- );
- $__default["default"](this._element).on(
- EVENT_TOUCHEND,
- function (event) {
- return end(event);
- }
- );
- }
- };
-
- _proto._keydown = function _keydown(event) {
- if (/input|textarea/i.test(event.target.tagName)) {
- return;
- }
-
- switch (event.which) {
- case ARROW_LEFT_KEYCODE:
- event.preventDefault();
- this.prev();
- break;
-
- case ARROW_RIGHT_KEYCODE:
- event.preventDefault();
- this.next();
- break;
- }
- };
-
- _proto._getItemIndex = function _getItemIndex(element) {
- this._items =
- element && element.parentNode
- ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM))
- : [];
- return this._items.indexOf(element);
- };
-
- _proto._getItemByDirection = function _getItemByDirection(
- direction,
- activeElement
- ) {
- var isNextDirection = direction === DIRECTION_NEXT;
- var isPrevDirection = direction === DIRECTION_PREV;
-
- var activeIndex = this._getItemIndex(activeElement);
-
- var lastItemIndex = this._items.length - 1;
- var isGoingToWrap =
- (isPrevDirection && activeIndex === 0) ||
- (isNextDirection && activeIndex === lastItemIndex);
-
- if (isGoingToWrap && !this._config.wrap) {
- return activeElement;
- }
-
- var delta = direction === DIRECTION_PREV ? -1 : 1;
- var itemIndex = (activeIndex + delta) % this._items.length;
- return itemIndex === -1
- ? this._items[this._items.length - 1]
- : this._items[itemIndex];
- };
-
- _proto._triggerSlideEvent = function _triggerSlideEvent(
- relatedTarget,
- eventDirectionName
- ) {
- var targetIndex = this._getItemIndex(relatedTarget);
-
- var fromIndex = this._getItemIndex(
- this._element.querySelector(SELECTOR_ACTIVE_ITEM)
- );
-
- var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
- relatedTarget: relatedTarget,
- direction: eventDirectionName,
- from: fromIndex,
- to: targetIndex,
- });
- $__default["default"](this._element).trigger(slideEvent);
- return slideEvent;
- };
-
- _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(
- element
- ) {
- if (this._indicatorsElement) {
- var indicators = [].slice.call(
- this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1)
- );
- $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$1);
-
- var nextIndicator =
- this._indicatorsElement.children[this._getItemIndex(element)];
-
- if (nextIndicator) {
- $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$1);
- }
- }
- };
-
- _proto._updateInterval = function _updateInterval() {
- var element =
- this._activeElement ||
- this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-
- if (!element) {
- return;
- }
-
- var elementInterval = parseInt(element.getAttribute("data-interval"), 10);
-
- if (elementInterval) {
- this._config.defaultInterval =
- this._config.defaultInterval || this._config.interval;
- this._config.interval = elementInterval;
- } else {
- this._config.interval =
- this._config.defaultInterval || this._config.interval;
- }
- };
-
- _proto._slide = function _slide(direction, element) {
- var _this4 = this;
-
- var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-
- var activeElementIndex = this._getItemIndex(activeElement);
-
- var nextElement =
- element ||
- (activeElement && this._getItemByDirection(direction, activeElement));
-
- var nextElementIndex = this._getItemIndex(nextElement);
-
- var isCycling = Boolean(this._interval);
- var directionalClassName;
- var orderClassName;
- var eventDirectionName;
-
- if (direction === DIRECTION_NEXT) {
- directionalClassName = CLASS_NAME_LEFT;
- orderClassName = CLASS_NAME_NEXT;
- eventDirectionName = DIRECTION_LEFT;
- } else {
- directionalClassName = CLASS_NAME_RIGHT;
- orderClassName = CLASS_NAME_PREV;
- eventDirectionName = DIRECTION_RIGHT;
- }
-
- if (
- nextElement &&
- $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$1)
- ) {
- this._isSliding = false;
- return;
- }
-
- var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
-
- if (slideEvent.isDefaultPrevented()) {
- return;
- }
-
- if (!activeElement || !nextElement) {
- // Some weirdness is happening, so we bail
- return;
- }
-
- this._isSliding = true;
-
- if (isCycling) {
- this.pause();
- }
-
- this._setActiveIndicatorElement(nextElement);
-
- this._activeElement = nextElement;
- var slidEvent = $__default["default"].Event(EVENT_SLID, {
- relatedTarget: nextElement,
- direction: eventDirectionName,
- from: activeElementIndex,
- to: nextElementIndex,
- });
-
- if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
- $__default["default"](nextElement).addClass(orderClassName);
- Util.reflow(nextElement);
- $__default["default"](activeElement).addClass(directionalClassName);
- $__default["default"](nextElement).addClass(directionalClassName);
- var transitionDuration =
- Util.getTransitionDurationFromElement(activeElement);
- $__default["default"](activeElement)
- .one(Util.TRANSITION_END, function () {
- $__default["default"](nextElement)
- .removeClass(directionalClassName + " " + orderClassName)
- .addClass(CLASS_NAME_ACTIVE$1);
- $__default["default"](activeElement).removeClass(
- CLASS_NAME_ACTIVE$1 +
- " " +
- orderClassName +
- " " +
- directionalClassName
- );
- _this4._isSliding = false;
- setTimeout(function () {
- return $__default["default"](_this4._element).trigger(slidEvent);
- }, 0);
- })
- .emulateTransitionEnd(transitionDuration);
- } else {
- $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$1);
- $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$1);
- this._isSliding = false;
- $__default["default"](this._element).trigger(slidEvent);
- }
-
- if (isCycling) {
- this.cycle();
- }
- }; // Static
-
- Carousel._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$2);
-
- var _config = _extends({}, Default, $__default["default"](this).data());
-
- if (typeof config === "object") {
- _config = _extends({}, _config, config);
- }
-
- var action = typeof config === "string" ? config : _config.slide;
-
- if (!data) {
- data = new Carousel(this, _config);
- $__default["default"](this).data(DATA_KEY$2, data);
- }
-
- if (typeof config === "number") {
- data.to(config);
- } else if (typeof action === "string") {
- if (typeof data[action] === "undefined") {
- throw new TypeError('No method named "' + action + '"');
- }
-
- data[action]();
- } else if (_config.interval && _config.ride) {
- data.pause();
- data.cycle();
- }
- });
- };
-
- Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
- var selector = Util.getSelectorFromElement(this);
-
- if (!selector) {
- return;
- }
-
- var target = $__default["default"](selector)[0];
-
- if (
- !target ||
- !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)
- ) {
- return;
- }
-
- var config = _extends(
- {},
- $__default["default"](target).data(),
- $__default["default"](this).data()
- );
-
- var slideIndex = this.getAttribute("data-slide-to");
-
- if (slideIndex) {
- config.interval = false;
- }
-
- Carousel._jQueryInterface.call($__default["default"](target), config);
-
- if (slideIndex) {
- $__default["default"](target).data(DATA_KEY$2).to(slideIndex);
- }
-
- event.preventDefault();
- };
-
- _createClass(Carousel, null, [
- {
- key: "VERSION",
- get: function get() {
- return VERSION$2;
- },
- },
- {
- key: "Default",
- get: function get() {
- return Default;
- },
- },
- ]);
-
- return Carousel;
- })();
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
-
- $__default["default"](document).on(
- EVENT_CLICK_DATA_API$2,
- SELECTOR_DATA_SLIDE,
- Carousel._dataApiClickHandler
- );
- $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () {
- var carousels = [].slice.call(
- document.querySelectorAll(SELECTOR_DATA_RIDE)
- );
-
- for (var i = 0, len = carousels.length; i < len; i++) {
- var $carousel = $__default["default"](carousels[i]);
-
- Carousel._jQueryInterface.call($carousel, $carousel.data());
- }
- });
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME$2] = Carousel._jQueryInterface;
- $__default["default"].fn[NAME$2].Constructor = Carousel;
-
- $__default["default"].fn[NAME$2].noConflict = function () {
- $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;
- return Carousel._jQueryInterface;
- };
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$3 = "collapse";
- var VERSION$3 = "4.6.0";
- var DATA_KEY$3 = "bs.collapse";
- var EVENT_KEY$3 = "." + DATA_KEY$3;
- var DATA_API_KEY$3 = ".data-api";
- var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3];
- var Default$1 = {
- toggle: true,
- parent: "",
- };
- var DefaultType$1 = {
- toggle: "boolean",
- parent: "(string|element)",
- };
- var EVENT_SHOW = "show" + EVENT_KEY$3;
- var EVENT_SHOWN = "shown" + EVENT_KEY$3;
- var EVENT_HIDE = "hide" + EVENT_KEY$3;
- var EVENT_HIDDEN = "hidden" + EVENT_KEY$3;
- var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3;
- var CLASS_NAME_SHOW$1 = "show";
- var CLASS_NAME_COLLAPSE = "collapse";
- var CLASS_NAME_COLLAPSING = "collapsing";
- var CLASS_NAME_COLLAPSED = "collapsed";
- var DIMENSION_WIDTH = "width";
- var DIMENSION_HEIGHT = "height";
- var SELECTOR_ACTIVES = ".show, .collapsing";
- var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="collapse"]';
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Collapse = /*#__PURE__*/ (function () {
- function Collapse(element, config) {
- this._isTransitioning = false;
- this._element = element;
- this._config = this._getConfig(config);
- this._triggerArray = [].slice.call(
- document.querySelectorAll(
- '[data-toggle="collapse"][href="#' +
- element.id +
- '"],' +
- ('[data-toggle="collapse"][data-target="#' + element.id + '"]')
- )
- );
- var toggleList = [].slice.call(
- document.querySelectorAll(SELECTOR_DATA_TOGGLE$1)
- );
-
- for (var i = 0, len = toggleList.length; i < len; i++) {
- var elem = toggleList[i];
- var selector = Util.getSelectorFromElement(elem);
- var filterElement = [].slice
- .call(document.querySelectorAll(selector))
- .filter(function (foundElem) {
- return foundElem === element;
- });
-
- if (selector !== null && filterElement.length > 0) {
- this._selector = selector;
-
- this._triggerArray.push(elem);
- }
- }
-
- this._parent = this._config.parent ? this._getParent() : null;
-
- if (!this._config.parent) {
- this._addAriaAndCollapsedClass(this._element, this._triggerArray);
- }
-
- if (this._config.toggle) {
- this.toggle();
- }
- } // Getters
-
- var _proto = Collapse.prototype;
-
- // Public
- _proto.toggle = function toggle() {
- if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$1)) {
- this.hide();
- } else {
- this.show();
- }
- };
-
- _proto.show = function show() {
- var _this = this;
-
- if (
- this._isTransitioning ||
- $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$1)
- ) {
- return;
- }
-
- var actives;
- var activesData;
-
- if (this._parent) {
- actives = [].slice
- .call(this._parent.querySelectorAll(SELECTOR_ACTIVES))
- .filter(function (elem) {
- if (typeof _this._config.parent === "string") {
- return elem.getAttribute("data-parent") === _this._config.parent;
- }
-
- return elem.classList.contains(CLASS_NAME_COLLAPSE);
- });
-
- if (actives.length === 0) {
- actives = null;
- }
- }
-
- if (actives) {
- activesData = $__default["default"](actives)
- .not(this._selector)
- .data(DATA_KEY$3);
-
- if (activesData && activesData._isTransitioning) {
- return;
- }
- }
-
- var startEvent = $__default["default"].Event(EVENT_SHOW);
- $__default["default"](this._element).trigger(startEvent);
-
- if (startEvent.isDefaultPrevented()) {
- return;
- }
-
- if (actives) {
- Collapse._jQueryInterface.call(
- $__default["default"](actives).not(this._selector),
- "hide"
- );
-
- if (!activesData) {
- $__default["default"](actives).data(DATA_KEY$3, null);
- }
- }
-
- var dimension = this._getDimension();
-
- $__default["default"](this._element)
- .removeClass(CLASS_NAME_COLLAPSE)
- .addClass(CLASS_NAME_COLLAPSING);
- this._element.style[dimension] = 0;
-
- if (this._triggerArray.length) {
- $__default["default"](this._triggerArray)
- .removeClass(CLASS_NAME_COLLAPSED)
- .attr("aria-expanded", true);
- }
-
- this.setTransitioning(true);
-
- var complete = function complete() {
- $__default["default"](_this._element)
- .removeClass(CLASS_NAME_COLLAPSING)
- .addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
- _this._element.style[dimension] = "";
-
- _this.setTransitioning(false);
-
- $__default["default"](_this._element).trigger(EVENT_SHOWN);
- };
-
- var capitalizedDimension =
- dimension[0].toUpperCase() + dimension.slice(1);
- var scrollSize = "scroll" + capitalizedDimension;
- var transitionDuration = Util.getTransitionDurationFromElement(
- this._element
- );
- $__default["default"](this._element)
- .one(Util.TRANSITION_END, complete)
- .emulateTransitionEnd(transitionDuration);
- this._element.style[dimension] = this._element[scrollSize] + "px";
- };
-
- _proto.hide = function hide() {
- var _this2 = this;
-
- if (
- this._isTransitioning ||
- !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$1)
- ) {
- return;
- }
-
- var startEvent = $__default["default"].Event(EVENT_HIDE);
- $__default["default"](this._element).trigger(startEvent);
-
- if (startEvent.isDefaultPrevented()) {
- return;
- }
-
- var dimension = this._getDimension();
-
- this._element.style[dimension] =
- this._element.getBoundingClientRect()[dimension] + "px";
- Util.reflow(this._element);
- $__default["default"](this._element)
- .addClass(CLASS_NAME_COLLAPSING)
- .removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
- var triggerArrayLength = this._triggerArray.length;
-
- if (triggerArrayLength > 0) {
- for (var i = 0; i < triggerArrayLength; i++) {
- var trigger = this._triggerArray[i];
- var selector = Util.getSelectorFromElement(trigger);
-
- if (selector !== null) {
- var $elem = $__default["default"](
- [].slice.call(document.querySelectorAll(selector))
- );
-
- if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {
- $__default["default"](trigger)
- .addClass(CLASS_NAME_COLLAPSED)
- .attr("aria-expanded", false);
- }
- }
- }
- }
-
- this.setTransitioning(true);
-
- var complete = function complete() {
- _this2.setTransitioning(false);
-
- $__default["default"](_this2._element)
- .removeClass(CLASS_NAME_COLLAPSING)
- .addClass(CLASS_NAME_COLLAPSE)
- .trigger(EVENT_HIDDEN);
- };
-
- this._element.style[dimension] = "";
- var transitionDuration = Util.getTransitionDurationFromElement(
- this._element
- );
- $__default["default"](this._element)
- .one(Util.TRANSITION_END, complete)
- .emulateTransitionEnd(transitionDuration);
- };
-
- _proto.setTransitioning = function setTransitioning(isTransitioning) {
- this._isTransitioning = isTransitioning;
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$3);
- this._config = null;
- this._parent = null;
- this._element = null;
- this._triggerArray = null;
- this._isTransitioning = null;
- }; // Private
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default$1, config);
- config.toggle = Boolean(config.toggle); // Coerce string values
-
- Util.typeCheckConfig(NAME$3, config, DefaultType$1);
- return config;
- };
-
- _proto._getDimension = function _getDimension() {
- var hasWidth = $__default["default"](this._element).hasClass(
- DIMENSION_WIDTH
- );
- return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
- };
-
- _proto._getParent = function _getParent() {
- var _this3 = this;
-
- var parent;
-
- if (Util.isElement(this._config.parent)) {
- parent = this._config.parent; // It's a jQuery object
-
- if (typeof this._config.parent.jquery !== "undefined") {
- parent = this._config.parent[0];
- }
- } else {
- parent = document.querySelector(this._config.parent);
- }
-
- var selector =
- '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
- var children = [].slice.call(parent.querySelectorAll(selector));
- $__default["default"](children).each(function (i, element) {
- _this3._addAriaAndCollapsedClass(
- Collapse._getTargetFromElement(element),
- [element]
- );
- });
- return parent;
- };
-
- _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(
- element,
- triggerArray
- ) {
- var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$1);
-
- if (triggerArray.length) {
- $__default["default"](triggerArray)
- .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)
- .attr("aria-expanded", isOpen);
- }
- }; // Static
-
- Collapse._getTargetFromElement = function _getTargetFromElement(element) {
- var selector = Util.getSelectorFromElement(element);
- return selector ? document.querySelector(selector) : null;
- };
-
- Collapse._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY$3);
-
- var _config = _extends(
- {},
- Default$1,
- $element.data(),
- typeof config === "object" && config ? config : {}
- );
-
- if (
- !data &&
- _config.toggle &&
- typeof config === "string" &&
- /show|hide/.test(config)
- ) {
- _config.toggle = false;
- }
-
- if (!data) {
- data = new Collapse(this, _config);
- $element.data(DATA_KEY$3, data);
- }
-
- if (typeof config === "string") {
- if (typeof data[config] === "undefined") {
- throw new TypeError('No method named "' + config + '"');
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(Collapse, null, [
- {
- key: "VERSION",
- get: function get() {
- return VERSION$3;
- },
- },
- {
- key: "Default",
- get: function get() {
- return Default$1;
- },
- },
- ]);
-
- return Collapse;
- })();
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
-
- $__default["default"](document).on(
- EVENT_CLICK_DATA_API$3,
- SELECTOR_DATA_TOGGLE$1,
- function (event) {
- // preventDefault only for elements (which change the URL) not inside the collapsible element
- if (event.currentTarget.tagName === "A") {
- event.preventDefault();
- }
-
- var $trigger = $__default["default"](this);
- var selector = Util.getSelectorFromElement(this);
- var selectors = [].slice.call(document.querySelectorAll(selector));
- $__default["default"](selectors).each(function () {
- var $target = $__default["default"](this);
- var data = $target.data(DATA_KEY$3);
- var config = data ? "toggle" : $trigger.data();
-
- Collapse._jQueryInterface.call($target, config);
- });
- }
- );
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME$3] = Collapse._jQueryInterface;
- $__default["default"].fn[NAME$3].Constructor = Collapse;
-
- $__default["default"].fn[NAME$3].noConflict = function () {
- $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;
- return Collapse._jQueryInterface;
- };
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$4 = "dropdown";
- var VERSION$4 = "4.6.0";
- var DATA_KEY$4 = "bs.dropdown";
- var EVENT_KEY$4 = "." + DATA_KEY$4;
- var DATA_API_KEY$4 = ".data-api";
- var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4];
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
-
- var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
-
- var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
-
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
-
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
-
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
-
- var REGEXP_KEYDOWN = new RegExp(
- ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE
- );
- var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
- var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
- var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
- var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
- var EVENT_CLICK = "click" + EVENT_KEY$4;
- var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
- var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
- var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
- var CLASS_NAME_DISABLED = "disabled";
- var CLASS_NAME_SHOW$2 = "show";
- var CLASS_NAME_DROPUP = "dropup";
- var CLASS_NAME_DROPRIGHT = "dropright";
- var CLASS_NAME_DROPLEFT = "dropleft";
- var CLASS_NAME_MENURIGHT = "dropdown-menu-right";
- var CLASS_NAME_POSITION_STATIC = "position-static";
- var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
- var SELECTOR_FORM_CHILD = ".dropdown form";
- var SELECTOR_MENU = ".dropdown-menu";
- var SELECTOR_NAVBAR_NAV = ".navbar-nav";
- var SELECTOR_VISIBLE_ITEMS =
- ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)";
- var PLACEMENT_TOP = "top-start";
- var PLACEMENT_TOPEND = "top-end";
- var PLACEMENT_BOTTOM = "bottom-start";
- var PLACEMENT_BOTTOMEND = "bottom-end";
- var PLACEMENT_RIGHT = "right-start";
- var PLACEMENT_LEFT = "left-start";
- var Default$2 = {
- offset: 0,
- flip: true,
- boundary: "scrollParent",
- reference: "toggle",
- display: "dynamic",
- popperConfig: null,
- };
- var DefaultType$2 = {
- offset: "(number|string|function)",
- flip: "boolean",
- boundary: "(string|element)",
- reference: "(string|element)",
- display: "string",
- popperConfig: "(null|object)",
- };
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Dropdown = /*#__PURE__*/ (function () {
- function Dropdown(element, config) {
- this._element = element;
- this._popper = null;
- this._config = this._getConfig(config);
- this._menu = this._getMenuElement();
- this._inNavbar = this._detectNavbar();
-
- this._addEventListeners();
- } // Getters
-
- var _proto = Dropdown.prototype;
-
- // Public
- _proto.toggle = function toggle() {
- if (
- this._element.disabled ||
- $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED)
- ) {
- return;
- }
-
- var isActive = $__default["default"](this._menu).hasClass(
- CLASS_NAME_SHOW$2
- );
-
- Dropdown._clearMenus();
-
- if (isActive) {
- return;
- }
-
- this.show(true);
- };
-
- _proto.show = function show(usePopper) {
- if (usePopper === void 0) {
- usePopper = false;
- }
-
- if (
- this._element.disabled ||
- $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) ||
- $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$2)
- ) {
- return;
- }
-
- var relatedTarget = {
- relatedTarget: this._element,
- };
- var showEvent = $__default["default"].Event(EVENT_SHOW$1, relatedTarget);
-
- var parent = Dropdown._getParentFromElement(this._element);
-
- $__default["default"](parent).trigger(showEvent);
-
- if (showEvent.isDefaultPrevented()) {
- return;
- } // Totally disable Popper for Dropdowns in Navbar
-
- if (!this._inNavbar && usePopper) {
- /**
- * Check for Popper dependency
- * Popper - https://popper.js.org
- */
- if (typeof Popper__default["default"] === "undefined") {
- throw new TypeError(
- "Bootstrap's dropdowns require Popper (https://popper.js.org)"
- );
- }
-
- var referenceElement = this._element;
-
- if (this._config.reference === "parent") {
- referenceElement = parent;
- } else if (Util.isElement(this._config.reference)) {
- referenceElement = this._config.reference; // Check if it's jQuery element
-
- if (typeof this._config.reference.jquery !== "undefined") {
- referenceElement = this._config.reference[0];
- }
- } // If boundary is not `scrollParent`, then set position to `static`
- // to allow the menu to "escape" the scroll parent's boundaries
- // https://github.com/twbs/bootstrap/issues/24251
-
- if (this._config.boundary !== "scrollParent") {
- $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
- }
-
- this._popper = new Popper__default["default"](
- referenceElement,
- this._menu,
- this._getPopperConfig()
- );
- } // If this is a touch-enabled device we add extra
- // empty mouseover listeners to the body's immediate children;
- // only needed because of broken event delegation on iOS
- // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
- if (
- "ontouchstart" in document.documentElement &&
- $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0
- ) {
- $__default["default"](document.body)
- .children()
- .on("mouseover", null, $__default["default"].noop);
- }
-
- this._element.focus();
-
- this._element.setAttribute("aria-expanded", true);
-
- $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$2);
- $__default["default"](parent)
- .toggleClass(CLASS_NAME_SHOW$2)
- .trigger($__default["default"].Event(EVENT_SHOWN$1, relatedTarget));
- };
-
- _proto.hide = function hide() {
- if (
- this._element.disabled ||
- $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) ||
- !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$2)
- ) {
- return;
- }
-
- var relatedTarget = {
- relatedTarget: this._element,
- };
- var hideEvent = $__default["default"].Event(EVENT_HIDE$1, relatedTarget);
-
- var parent = Dropdown._getParentFromElement(this._element);
-
- $__default["default"](parent).trigger(hideEvent);
-
- if (hideEvent.isDefaultPrevented()) {
- return;
- }
-
- if (this._popper) {
- this._popper.destroy();
- }
-
- $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$2);
- $__default["default"](parent)
- .toggleClass(CLASS_NAME_SHOW$2)
- .trigger($__default["default"].Event(EVENT_HIDDEN$1, relatedTarget));
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$4);
- $__default["default"](this._element).off(EVENT_KEY$4);
- this._element = null;
- this._menu = null;
-
- if (this._popper !== null) {
- this._popper.destroy();
-
- this._popper = null;
- }
- };
-
- _proto.update = function update() {
- this._inNavbar = this._detectNavbar();
-
- if (this._popper !== null) {
- this._popper.scheduleUpdate();
- }
- }; // Private
-
- _proto._addEventListeners = function _addEventListeners() {
- var _this = this;
-
- $__default["default"](this._element).on(EVENT_CLICK, function (event) {
- event.preventDefault();
- event.stopPropagation();
-
- _this.toggle();
- });
- };
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends(
- {},
- this.constructor.Default,
- $__default["default"](this._element).data(),
- config
- );
- Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
- return config;
- };
-
- _proto._getMenuElement = function _getMenuElement() {
- if (!this._menu) {
- var parent = Dropdown._getParentFromElement(this._element);
-
- if (parent) {
- this._menu = parent.querySelector(SELECTOR_MENU);
- }
- }
-
- return this._menu;
- };
-
- _proto._getPlacement = function _getPlacement() {
- var $parentDropdown = $__default["default"](this._element.parentNode);
- var placement = PLACEMENT_BOTTOM; // Handle dropup
-
- if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
- placement = $__default["default"](this._menu).hasClass(
- CLASS_NAME_MENURIGHT
- )
- ? PLACEMENT_TOPEND
- : PLACEMENT_TOP;
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
- placement = PLACEMENT_RIGHT;
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
- placement = PLACEMENT_LEFT;
- } else if (
- $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)
- ) {
- placement = PLACEMENT_BOTTOMEND;
- }
-
- return placement;
- };
-
- _proto._detectNavbar = function _detectNavbar() {
- return $__default["default"](this._element).closest(".navbar").length > 0;
- };
-
- _proto._getOffset = function _getOffset() {
- var _this2 = this;
-
- var offset = {};
-
- if (typeof this._config.offset === "function") {
- offset.fn = function (data) {
- data.offsets = _extends(
- {},
- data.offsets,
- _this2._config.offset(data.offsets, _this2._element) || {}
- );
- return data;
- };
- } else {
- offset.offset = this._config.offset;
- }
-
- return offset;
- };
-
- _proto._getPopperConfig = function _getPopperConfig() {
- var popperConfig = {
- placement: this._getPlacement(),
- modifiers: {
- offset: this._getOffset(),
- flip: {
- enabled: this._config.flip,
- },
- preventOverflow: {
- boundariesElement: this._config.boundary,
- },
- },
- }; // Disable Popper if we have a static display
-
- if (this._config.display === "static") {
- popperConfig.modifiers.applyStyle = {
- enabled: false,
- };
- }
-
- return _extends({}, popperConfig, this._config.popperConfig);
- }; // Static
-
- Dropdown._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$4);
-
- var _config = typeof config === "object" ? config : null;
-
- if (!data) {
- data = new Dropdown(this, _config);
- $__default["default"](this).data(DATA_KEY$4, data);
- }
-
- if (typeof config === "string") {
- if (typeof data[config] === "undefined") {
- throw new TypeError('No method named "' + config + '"');
- }
-
- data[config]();
- }
- });
- };
-
- Dropdown._clearMenus = function _clearMenus(event) {
- if (
- event &&
- (event.which === RIGHT_MOUSE_BUTTON_WHICH ||
- (event.type === "keyup" && event.which !== TAB_KEYCODE))
- ) {
- return;
- }
-
- var toggles = [].slice.call(
- document.querySelectorAll(SELECTOR_DATA_TOGGLE$2)
- );
-
- for (var i = 0, len = toggles.length; i < len; i++) {
- var parent = Dropdown._getParentFromElement(toggles[i]);
-
- var context = $__default["default"](toggles[i]).data(DATA_KEY$4);
- var relatedTarget = {
- relatedTarget: toggles[i],
- };
-
- if (event && event.type === "click") {
- relatedTarget.clickEvent = event;
- }
-
- if (!context) {
- continue;
- }
-
- var dropdownMenu = context._menu;
-
- if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$2)) {
- continue;
- }
-
- if (
- event &&
- ((event.type === "click" &&
- /input|textarea/i.test(event.target.tagName)) ||
- (event.type === "keyup" && event.which === TAB_KEYCODE)) &&
- $__default["default"].contains(parent, event.target)
- ) {
- continue;
- }
-
- var hideEvent = $__default["default"].Event(
- EVENT_HIDE$1,
- relatedTarget
- );
- $__default["default"](parent).trigger(hideEvent);
-
- if (hideEvent.isDefaultPrevented()) {
- continue;
- } // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
- if ("ontouchstart" in document.documentElement) {
- $__default["default"](document.body)
- .children()
- .off("mouseover", null, $__default["default"].noop);
- }
-
- toggles[i].setAttribute("aria-expanded", "false");
-
- if (context._popper) {
- context._popper.destroy();
- }
-
- $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$2);
- $__default["default"](parent)
- .removeClass(CLASS_NAME_SHOW$2)
- .trigger($__default["default"].Event(EVENT_HIDDEN$1, relatedTarget));
- }
- };
-
- Dropdown._getParentFromElement = function _getParentFromElement(element) {
- var parent;
- var selector = Util.getSelectorFromElement(element);
-
- if (selector) {
- parent = document.querySelector(selector);
- }
-
- return parent || element.parentNode;
- }; // eslint-disable-next-line complexity
-
- Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
- // If not input/textarea:
- // - And not a key in REGEXP_KEYDOWN => not a dropdown command
- // If input/textarea:
- // - If space key => not a dropdown command
- // - If key is other than escape
- // - If key is not up or down => not a dropdown command
- // - If trigger inside the menu => not a dropdown command
- if (
- /input|textarea/i.test(event.target.tagName)
- ? event.which === SPACE_KEYCODE ||
- (event.which !== ESCAPE_KEYCODE &&
- ((event.which !== ARROW_DOWN_KEYCODE &&
- event.which !== ARROW_UP_KEYCODE) ||
- $__default["default"](event.target).closest(SELECTOR_MENU)
- .length))
- : !REGEXP_KEYDOWN.test(event.which)
- ) {
- return;
- }
-
- if (
- this.disabled ||
- $__default["default"](this).hasClass(CLASS_NAME_DISABLED)
- ) {
- return;
- }
-
- var parent = Dropdown._getParentFromElement(this);
-
- var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$2);
-
- if (!isActive && event.which === ESCAPE_KEYCODE) {
- return;
- }
-
- event.preventDefault();
- event.stopPropagation();
-
- if (
- !isActive ||
- event.which === ESCAPE_KEYCODE ||
- event.which === SPACE_KEYCODE
- ) {
- if (event.which === ESCAPE_KEYCODE) {
- $__default["default"](
- parent.querySelector(SELECTOR_DATA_TOGGLE$2)
- ).trigger("focus");
- }
-
- $__default["default"](this).trigger("click");
- return;
- }
-
- var items = [].slice
- .call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))
- .filter(function (item) {
- return $__default["default"](item).is(":visible");
- });
-
- if (items.length === 0) {
- return;
- }
-
- var index = items.indexOf(event.target);
-
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
- // Up
- index--;
- }
-
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
- // Down
- index++;
- }
-
- if (index < 0) {
- index = 0;
- }
-
- items[index].focus();
- };
-
- _createClass(Dropdown, null, [
- {
- key: "VERSION",
- get: function get() {
- return VERSION$4;
- },
- },
- {
- key: "Default",
- get: function get() {
- return Default$2;
- },
- },
- {
- key: "DefaultType",
- get: function get() {
- return DefaultType$2;
- },
- },
- ]);
-
- return Dropdown;
- })();
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
-
- $__default["default"](document)
- .on(
- EVENT_KEYDOWN_DATA_API,
- SELECTOR_DATA_TOGGLE$2,
- Dropdown._dataApiKeydownHandler
- )
- .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)
- .on(
- EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API,
- Dropdown._clearMenus
- )
- .on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {
- event.preventDefault();
- event.stopPropagation();
-
- Dropdown._jQueryInterface.call($__default["default"](this), "toggle");
- })
- .on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {
- e.stopPropagation();
- });
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME$4] = Dropdown._jQueryInterface;
- $__default["default"].fn[NAME$4].Constructor = Dropdown;
-
- $__default["default"].fn[NAME$4].noConflict = function () {
- $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;
- return Dropdown._jQueryInterface;
- };
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$5 = "modal";
- var VERSION$5 = "4.6.0";
- var DATA_KEY$5 = "bs.modal";
- var EVENT_KEY$5 = "." + DATA_KEY$5;
- var DATA_API_KEY$5 = ".data-api";
- var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5];
- var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
-
- var Default$3 = {
- backdrop: true,
- keyboard: true,
- focus: true,
- show: true,
- };
- var DefaultType$3 = {
- backdrop: "(boolean|string)",
- keyboard: "boolean",
- focus: "boolean",
- show: "boolean",
- };
- var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
- var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
- var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
- var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
- var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
- var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
- var EVENT_RESIZE = "resize" + EVENT_KEY$5;
- var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
- var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
- var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
- var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
- var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
- var CLASS_NAME_SCROLLABLE = "modal-dialog-scrollable";
- var CLASS_NAME_SCROLLBAR_MEASURER = "modal-scrollbar-measure";
- var CLASS_NAME_BACKDROP = "modal-backdrop";
- var CLASS_NAME_OPEN = "modal-open";
- var CLASS_NAME_FADE$1 = "fade";
- var CLASS_NAME_SHOW$3 = "show";
- var CLASS_NAME_STATIC = "modal-static";
- var SELECTOR_DIALOG = ".modal-dialog";
- var SELECTOR_MODAL_BODY = ".modal-body";
- var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]';
- var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
- var SELECTOR_FIXED_CONTENT =
- ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top";
- var SELECTOR_STICKY_CONTENT = ".sticky-top";
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Modal = /*#__PURE__*/ (function () {
- function Modal(element, config) {
- this._config = this._getConfig(config);
- this._element = element;
- this._dialog = element.querySelector(SELECTOR_DIALOG);
- this._backdrop = null;
- this._isShown = false;
- this._isBodyOverflowing = false;
- this._ignoreBackdropClick = false;
- this._isTransitioning = false;
- this._scrollbarWidth = 0;
- } // Getters
-
- var _proto = Modal.prototype;
-
- // Public
- _proto.toggle = function toggle(relatedTarget) {
- return this._isShown ? this.hide() : this.show(relatedTarget);
- };
-
- _proto.show = function show(relatedTarget) {
- var _this = this;
-
- if (this._isShown || this._isTransitioning) {
- return;
- }
-
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$1)) {
- this._isTransitioning = true;
- }
-
- var showEvent = $__default["default"].Event(EVENT_SHOW$2, {
- relatedTarget: relatedTarget,
- });
- $__default["default"](this._element).trigger(showEvent);
-
- if (this._isShown || showEvent.isDefaultPrevented()) {
- return;
- }
-
- this._isShown = true;
-
- this._checkScrollbar();
-
- this._setScrollbar();
-
- this._adjustDialog();
-
- this._setEscapeEvent();
-
- this._setResizeEvent();
-
- $__default["default"](this._element).on(
- EVENT_CLICK_DISMISS,
- SELECTOR_DATA_DISMISS,
- function (event) {
- return _this.hide(event);
- }
- );
- $__default["default"](this._dialog).on(
- EVENT_MOUSEDOWN_DISMISS,
- function () {
- $__default["default"](_this._element).one(
- EVENT_MOUSEUP_DISMISS,
- function (event) {
- if ($__default["default"](event.target).is(_this._element)) {
- _this._ignoreBackdropClick = true;
- }
- }
- );
- }
- );
-
- this._showBackdrop(function () {
- return _this._showElement(relatedTarget);
- });
- };
-
- _proto.hide = function hide(event) {
- var _this2 = this;
-
- if (event) {
- event.preventDefault();
- }
-
- if (!this._isShown || this._isTransitioning) {
- return;
- }
-
- var hideEvent = $__default["default"].Event(EVENT_HIDE$2);
- $__default["default"](this._element).trigger(hideEvent);
-
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
- return;
- }
-
- this._isShown = false;
- var transition = $__default["default"](this._element).hasClass(
- CLASS_NAME_FADE$1
- );
-
- if (transition) {
- this._isTransitioning = true;
- }
-
- this._setEscapeEvent();
-
- this._setResizeEvent();
-
- $__default["default"](document).off(EVENT_FOCUSIN);
- $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$3);
- $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
- $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
-
- if (transition) {
- var transitionDuration = Util.getTransitionDurationFromElement(
- this._element
- );
- $__default["default"](this._element)
- .one(Util.TRANSITION_END, function (event) {
- return _this2._hideModal(event);
- })
- .emulateTransitionEnd(transitionDuration);
- } else {
- this._hideModal();
- }
- };
-
- _proto.dispose = function dispose() {
- [window, this._element, this._dialog].forEach(function (htmlElement) {
- return $__default["default"](htmlElement).off(EVENT_KEY$5);
- });
- /**
- * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
- * Do not move `document` in `htmlElements` array
- * It will remove `EVENT_CLICK_DATA_API` event that should remain
- */
-
- $__default["default"](document).off(EVENT_FOCUSIN);
- $__default["default"].removeData(this._element, DATA_KEY$5);
- this._config = null;
- this._element = null;
- this._dialog = null;
- this._backdrop = null;
- this._isShown = null;
- this._isBodyOverflowing = null;
- this._ignoreBackdropClick = null;
- this._isTransitioning = null;
- this._scrollbarWidth = null;
- };
-
- _proto.handleUpdate = function handleUpdate() {
- this._adjustDialog();
- }; // Private
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default$3, config);
- Util.typeCheckConfig(NAME$5, config, DefaultType$3);
- return config;
- };
-
- _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
- var _this3 = this;
-
- var hideEventPrevented =
- $__default["default"].Event(EVENT_HIDE_PREVENTED);
- $__default["default"](this._element).trigger(hideEventPrevented);
-
- if (hideEventPrevented.isDefaultPrevented()) {
- return;
- }
-
- var isModalOverflowing =
- this._element.scrollHeight > document.documentElement.clientHeight;
-
- if (!isModalOverflowing) {
- this._element.style.overflowY = "hidden";
- }
-
- this._element.classList.add(CLASS_NAME_STATIC);
-
- var modalTransitionDuration = Util.getTransitionDurationFromElement(
- this._dialog
- );
- $__default["default"](this._element).off(Util.TRANSITION_END);
- $__default["default"](this._element)
- .one(Util.TRANSITION_END, function () {
- _this3._element.classList.remove(CLASS_NAME_STATIC);
-
- if (!isModalOverflowing) {
- $__default["default"](_this3._element)
- .one(Util.TRANSITION_END, function () {
- _this3._element.style.overflowY = "";
- })
- .emulateTransitionEnd(_this3._element, modalTransitionDuration);
- }
- })
- .emulateTransitionEnd(modalTransitionDuration);
-
- this._element.focus();
- };
-
- _proto._showElement = function _showElement(relatedTarget) {
- var _this4 = this;
-
- var transition = $__default["default"](this._element).hasClass(
- CLASS_NAME_FADE$1
- );
- var modalBody = this._dialog
- ? this._dialog.querySelector(SELECTOR_MODAL_BODY)
- : null;
-
- if (
- !this._element.parentNode ||
- this._element.parentNode.nodeType !== Node.ELEMENT_NODE
- ) {
- // Don't move modal's DOM position
- document.body.appendChild(this._element);
- }
-
- this._element.style.display = "block";
-
- this._element.removeAttribute("aria-hidden");
-
- this._element.setAttribute("aria-modal", true);
-
- this._element.setAttribute("role", "dialog");
-
- if (
- $__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) &&
- modalBody
- ) {
- modalBody.scrollTop = 0;
- } else {
- this._element.scrollTop = 0;
- }
-
- if (transition) {
- Util.reflow(this._element);
- }
-
- $__default["default"](this._element).addClass(CLASS_NAME_SHOW$3);
-
- if (this._config.focus) {
- this._enforceFocus();
- }
-
- var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, {
- relatedTarget: relatedTarget,
- });
-
- var transitionComplete = function transitionComplete() {
- if (_this4._config.focus) {
- _this4._element.focus();
- }
-
- _this4._isTransitioning = false;
- $__default["default"](_this4._element).trigger(shownEvent);
- };
-
- if (transition) {
- var transitionDuration = Util.getTransitionDurationFromElement(
- this._dialog
- );
- $__default["default"](this._dialog)
- .one(Util.TRANSITION_END, transitionComplete)
- .emulateTransitionEnd(transitionDuration);
- } else {
- transitionComplete();
- }
- };
-
- _proto._enforceFocus = function _enforceFocus() {
- var _this5 = this;
-
- $__default["default"](document)
- .off(EVENT_FOCUSIN) // Guard against infinite focus loop
- .on(EVENT_FOCUSIN, function (event) {
- if (
- document !== event.target &&
- _this5._element !== event.target &&
- $__default["default"](_this5._element).has(event.target).length ===
- 0
- ) {
- _this5._element.focus();
- }
- });
- };
-
- _proto._setEscapeEvent = function _setEscapeEvent() {
- var _this6 = this;
-
- if (this._isShown) {
- $__default["default"](this._element).on(
- EVENT_KEYDOWN_DISMISS,
- function (event) {
- if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
- event.preventDefault();
-
- _this6.hide();
- } else if (
- !_this6._config.keyboard &&
- event.which === ESCAPE_KEYCODE$1
- ) {
- _this6._triggerBackdropTransition();
- }
- }
- );
- } else if (!this._isShown) {
- $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
- }
- };
-
- _proto._setResizeEvent = function _setResizeEvent() {
- var _this7 = this;
-
- if (this._isShown) {
- $__default["default"](window).on(EVENT_RESIZE, function (event) {
- return _this7.handleUpdate(event);
- });
- } else {
- $__default["default"](window).off(EVENT_RESIZE);
- }
- };
-
- _proto._hideModal = function _hideModal() {
- var _this8 = this;
-
- this._element.style.display = "none";
-
- this._element.setAttribute("aria-hidden", true);
-
- this._element.removeAttribute("aria-modal");
-
- this._element.removeAttribute("role");
-
- this._isTransitioning = false;
-
- this._showBackdrop(function () {
- $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
-
- _this8._resetAdjustments();
-
- _this8._resetScrollbar();
-
- $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2);
- });
- };
-
- _proto._removeBackdrop = function _removeBackdrop() {
- if (this._backdrop) {
- $__default["default"](this._backdrop).remove();
- this._backdrop = null;
- }
- };
-
- _proto._showBackdrop = function _showBackdrop(callback) {
- var _this9 = this;
-
- var animate = $__default["default"](this._element).hasClass(
- CLASS_NAME_FADE$1
- )
- ? CLASS_NAME_FADE$1
- : "";
-
- if (this._isShown && this._config.backdrop) {
- this._backdrop = document.createElement("div");
- this._backdrop.className = CLASS_NAME_BACKDROP;
-
- if (animate) {
- this._backdrop.classList.add(animate);
- }
-
- $__default["default"](this._backdrop).appendTo(document.body);
- $__default["default"](this._element).on(
- EVENT_CLICK_DISMISS,
- function (event) {
- if (_this9._ignoreBackdropClick) {
- _this9._ignoreBackdropClick = false;
- return;
- }
-
- if (event.target !== event.currentTarget) {
- return;
- }
-
- if (_this9._config.backdrop === "static") {
- _this9._triggerBackdropTransition();
- } else {
- _this9.hide();
- }
- }
- );
-
- if (animate) {
- Util.reflow(this._backdrop);
- }
-
- $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$3);
-
- if (!callback) {
- return;
- }
-
- if (!animate) {
- callback();
- return;
- }
-
- var backdropTransitionDuration = Util.getTransitionDurationFromElement(
- this._backdrop
- );
- $__default["default"](this._backdrop)
- .one(Util.TRANSITION_END, callback)
- .emulateTransitionEnd(backdropTransitionDuration);
- } else if (!this._isShown && this._backdrop) {
- $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$3);
-
- var callbackRemove = function callbackRemove() {
- _this9._removeBackdrop();
-
- if (callback) {
- callback();
- }
- };
-
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$1)) {
- var _backdropTransitionDuration =
- Util.getTransitionDurationFromElement(this._backdrop);
-
- $__default["default"](this._backdrop)
- .one(Util.TRANSITION_END, callbackRemove)
- .emulateTransitionEnd(_backdropTransitionDuration);
- } else {
- callbackRemove();
- }
- } else if (callback) {
- callback();
- }
- }; // ----------------------------------------------------------------------
- // the following methods are used to handle overflowing modals
- // todo (fat): these should probably be refactored out of modal.js
- // ----------------------------------------------------------------------
-
- _proto._adjustDialog = function _adjustDialog() {
- var isModalOverflowing =
- this._element.scrollHeight > document.documentElement.clientHeight;
-
- if (!this._isBodyOverflowing && isModalOverflowing) {
- this._element.style.paddingLeft = this._scrollbarWidth + "px";
- }
-
- if (this._isBodyOverflowing && !isModalOverflowing) {
- this._element.style.paddingRight = this._scrollbarWidth + "px";
- }
- };
-
- _proto._resetAdjustments = function _resetAdjustments() {
- this._element.style.paddingLeft = "";
- this._element.style.paddingRight = "";
- };
-
- _proto._checkScrollbar = function _checkScrollbar() {
- var rect = document.body.getBoundingClientRect();
- this._isBodyOverflowing =
- Math.round(rect.left + rect.right) < window.innerWidth;
- this._scrollbarWidth = this._getScrollbarWidth();
- };
-
- _proto._setScrollbar = function _setScrollbar() {
- var _this10 = this;
-
- if (this._isBodyOverflowing) {
- // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
- // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
- var fixedContent = [].slice.call(
- document.querySelectorAll(SELECTOR_FIXED_CONTENT)
- );
- var stickyContent = [].slice.call(
- document.querySelectorAll(SELECTOR_STICKY_CONTENT)
- ); // Adjust fixed content padding
-
- $__default["default"](fixedContent).each(function (index, element) {
- var actualPadding = element.style.paddingRight;
- var calculatedPadding =
- $__default["default"](element).css("padding-right");
- $__default["default"](element)
- .data("padding-right", actualPadding)
- .css(
- "padding-right",
- parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"
- );
- }); // Adjust sticky content margin
-
- $__default["default"](stickyContent).each(function (index, element) {
- var actualMargin = element.style.marginRight;
- var calculatedMargin =
- $__default["default"](element).css("margin-right");
- $__default["default"](element)
- .data("margin-right", actualMargin)
- .css(
- "margin-right",
- parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"
- );
- }); // Adjust body padding
-
- var actualPadding = document.body.style.paddingRight;
- var calculatedPadding = $__default["default"](document.body).css(
- "padding-right"
- );
- $__default["default"](document.body)
- .data("padding-right", actualPadding)
- .css(
- "padding-right",
- parseFloat(calculatedPadding) + this._scrollbarWidth + "px"
- );
- }
-
- $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
- };
-
- _proto._resetScrollbar = function _resetScrollbar() {
- // Restore fixed content padding
- var fixedContent = [].slice.call(
- document.querySelectorAll(SELECTOR_FIXED_CONTENT)
- );
- $__default["default"](fixedContent).each(function (index, element) {
- var padding = $__default["default"](element).data("padding-right");
- $__default["default"](element).removeData("padding-right");
- element.style.paddingRight = padding ? padding : "";
- }); // Restore sticky content
-
- var elements = [].slice.call(
- document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)
- );
- $__default["default"](elements).each(function (index, element) {
- var margin = $__default["default"](element).data("margin-right");
-
- if (typeof margin !== "undefined") {
- $__default["default"](element)
- .css("margin-right", margin)
- .removeData("margin-right");
- }
- }); // Restore body padding
-
- var padding = $__default["default"](document.body).data("padding-right");
- $__default["default"](document.body).removeData("padding-right");
- document.body.style.paddingRight = padding ? padding : "";
- };
-
- _proto._getScrollbarWidth = function _getScrollbarWidth() {
- // thx d.walsh
- var scrollDiv = document.createElement("div");
- scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
- document.body.appendChild(scrollDiv);
- var scrollbarWidth =
- scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
- document.body.removeChild(scrollDiv);
- return scrollbarWidth;
- }; // Static
-
- Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$5);
-
- var _config = _extends(
- {},
- Default$3,
- $__default["default"](this).data(),
- typeof config === "object" && config ? config : {}
- );
-
- if (!data) {
- data = new Modal(this, _config);
- $__default["default"](this).data(DATA_KEY$5, data);
- }
-
- if (typeof config === "string") {
- if (typeof data[config] === "undefined") {
- throw new TypeError('No method named "' + config + '"');
- }
-
- data[config](relatedTarget);
- } else if (_config.show) {
- data.show(relatedTarget);
- }
- });
- };
-
- _createClass(Modal, null, [
- {
- key: "VERSION",
- get: function get() {
- return VERSION$5;
- },
- },
- {
- key: "Default",
- get: function get() {
- return Default$3;
- },
- },
- ]);
-
- return Modal;
- })();
- /**
- * ------------------------------------------------------------------------
- * Data Api implementation
- * ------------------------------------------------------------------------
- */
-
- $__default["default"](document).on(
- EVENT_CLICK_DATA_API$5,
- SELECTOR_DATA_TOGGLE$3,
- function (event) {
- var _this11 = this;
-
- var target;
- var selector = Util.getSelectorFromElement(this);
-
- if (selector) {
- target = document.querySelector(selector);
- }
-
- var config = $__default["default"](target).data(DATA_KEY$5)
- ? "toggle"
- : _extends(
- {},
- $__default["default"](target).data(),
- $__default["default"](this).data()
- );
-
- if (this.tagName === "A" || this.tagName === "AREA") {
- event.preventDefault();
- }
-
- var $target = $__default["default"](target).one(
- EVENT_SHOW$2,
- function (showEvent) {
- if (showEvent.isDefaultPrevented()) {
- // Only register focus restorer if modal will actually get shown
- return;
- }
-
- $target.one(EVENT_HIDDEN$2, function () {
- if ($__default["default"](_this11).is(":visible")) {
- _this11.focus();
- }
- });
- }
- );
-
- Modal._jQueryInterface.call($__default["default"](target), config, this);
- }
- );
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME$5] = Modal._jQueryInterface;
- $__default["default"].fn[NAME$5].Constructor = Modal;
-
- $__default["default"].fn[NAME$5].noConflict = function () {
- $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;
- return Modal._jQueryInterface;
- };
-
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v4.6.0): tools/sanitizer.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- * --------------------------------------------------------------------------
- */
- 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", 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", "srcset", "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,[\d+/a-z]+=*$/i;
-
- function allowedAttribute(attr, allowedAttributeList) {
- var attrName = attr.nodeName.toLowerCase();
-
- if (allowedAttributeList.indexOf(attrName) !== -1) {
- if (uriAttrs.indexOf(attrName) !== -1) {
- return Boolean(
- attr.nodeValue.match(SAFE_URL_PATTERN) ||
- attr.nodeValue.match(DATA_URL_PATTERN)
- );
- }
-
- return true;
- }
-
- var regExp = allowedAttributeList.filter(function (attrRegex) {
- return attrRegex instanceof RegExp;
- }); // Check if a regular expression validates the attribute.
-
- for (var i = 0, len = regExp.length; i < len; i++) {
- if (attrName.match(regExp[i])) {
- return true;
- }
- }
-
- return false;
- }
-
- function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
- if (unsafeHtml.length === 0) {
- return unsafeHtml;
- }
-
- if (sanitizeFn && typeof sanitizeFn === "function") {
- return sanitizeFn(unsafeHtml);
- }
-
- var domParser = new window.DOMParser();
- var createdDocument = domParser.parseFromString(unsafeHtml, "text/html");
- var whitelistKeys = Object.keys(whiteList);
- var elements = [].slice.call(createdDocument.body.querySelectorAll("*"));
-
- var _loop = function _loop(i, len) {
- var el = elements[i];
- var elName = el.nodeName.toLowerCase();
-
- if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
- el.parentNode.removeChild(el);
- return "continue";
- }
-
- var attributeList = [].slice.call(el.attributes);
- var whitelistedAttributes = [].concat(
- whiteList["*"] || [],
- whiteList[elName] || []
- );
- attributeList.forEach(function (attr) {
- if (!allowedAttribute(attr, whitelistedAttributes)) {
- el.removeAttribute(attr.nodeName);
- }
- });
- };
-
- for (var i = 0, len = elements.length; i < len; i++) {
- var _ret = _loop(i);
-
- if (_ret === "continue") continue;
- }
-
- return createdDocument.body.innerHTML;
- }
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$6 = "tooltip";
- var VERSION$6 = "4.6.0";
- var DATA_KEY$6 = "bs.tooltip";
- var EVENT_KEY$6 = "." + DATA_KEY$6;
- var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6];
- var CLASS_PREFIX = "bs-tooltip";
- var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", "g");
- var DISALLOWED_ATTRIBUTES = ["sanitize", "whiteList", "sanitizeFn"];
- var DefaultType$4 = {
- animation: "boolean",
- template: "string",
- title: "(string|element|function)",
- trigger: "string",
- delay: "(number|object)",
- html: "boolean",
- selector: "(string|boolean)",
- placement: "(string|function)",
- offset: "(number|string|function)",
- container: "(string|element|boolean)",
- fallbackPlacement: "(string|array)",
- boundary: "(string|element)",
- customClass: "(string|function)",
- sanitize: "boolean",
- sanitizeFn: "(null|function)",
- whiteList: "object",
- popperConfig: "(null|object)",
- };
- var AttachmentMap = {
- AUTO: "auto",
- TOP: "top",
- RIGHT: "right",
- BOTTOM: "bottom",
- LEFT: "left",
- };
- var Default$4 = {
- animation: true,
- template:
- '' +
- '' +
- '',
- trigger: "hover focus",
- title: "",
- delay: 0,
- html: false,
- selector: false,
- placement: "top",
- offset: 0,
- container: false,
- fallbackPlacement: "flip",
- boundary: "scrollParent",
- customClass: "",
- sanitize: true,
- sanitizeFn: null,
- whiteList: DefaultWhitelist,
- popperConfig: null,
- };
- var HOVER_STATE_SHOW = "show";
- var HOVER_STATE_OUT = "out";
- var Event = {
- HIDE: "hide" + EVENT_KEY$6,
- HIDDEN: "hidden" + EVENT_KEY$6,
- SHOW: "show" + EVENT_KEY$6,
- SHOWN: "shown" + EVENT_KEY$6,
- INSERTED: "inserted" + EVENT_KEY$6,
- CLICK: "click" + EVENT_KEY$6,
- FOCUSIN: "focusin" + EVENT_KEY$6,
- FOCUSOUT: "focusout" + EVENT_KEY$6,
- MOUSEENTER: "mouseenter" + EVENT_KEY$6,
- MOUSELEAVE: "mouseleave" + EVENT_KEY$6,
- };
- var CLASS_NAME_FADE$2 = "fade";
- var CLASS_NAME_SHOW$4 = "show";
- var SELECTOR_TOOLTIP_INNER = ".tooltip-inner";
- var SELECTOR_ARROW = ".arrow";
- var TRIGGER_HOVER = "hover";
- var TRIGGER_FOCUS = "focus";
- var TRIGGER_CLICK = "click";
- var TRIGGER_MANUAL = "manual";
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Tooltip = /*#__PURE__*/ (function () {
- function Tooltip(element, config) {
- if (typeof Popper__default["default"] === "undefined") {
- throw new TypeError(
- "Bootstrap's tooltips require Popper (https://popper.js.org)"
- );
- } // private
-
- this._isEnabled = true;
- this._timeout = 0;
- this._hoverState = "";
- this._activeTrigger = {};
- this._popper = null; // Protected
-
- this.element = element;
- this.config = this._getConfig(config);
- this.tip = null;
-
- this._setListeners();
- } // Getters
-
- var _proto = Tooltip.prototype;
-
- // Public
- _proto.enable = function enable() {
- this._isEnabled = true;
- };
-
- _proto.disable = function disable() {
- this._isEnabled = false;
- };
-
- _proto.toggleEnabled = function toggleEnabled() {
- this._isEnabled = !this._isEnabled;
- };
-
- _proto.toggle = function toggle(event) {
- if (!this._isEnabled) {
- return;
- }
-
- if (event) {
- var dataKey = this.constructor.DATA_KEY;
- var context = $__default["default"](event.currentTarget).data(dataKey);
-
- if (!context) {
- context = new this.constructor(
- event.currentTarget,
- this._getDelegateConfig()
- );
- $__default["default"](event.currentTarget).data(dataKey, context);
- }
-
- context._activeTrigger.click = !context._activeTrigger.click;
-
- if (context._isWithActiveTrigger()) {
- context._enter(null, context);
- } else {
- context._leave(null, context);
- }
- } else {
- if (
- $__default["default"](this.getTipElement()).hasClass(
- CLASS_NAME_SHOW$4
- )
- ) {
- this._leave(null, this);
-
- return;
- }
-
- this._enter(null, this);
- }
- };
-
- _proto.dispose = function dispose() {
- clearTimeout(this._timeout);
- $__default["default"].removeData(this.element, this.constructor.DATA_KEY);
- $__default["default"](this.element).off(this.constructor.EVENT_KEY);
- $__default["default"](this.element)
- .closest(".modal")
- .off("hide.bs.modal", this._hideModalHandler);
-
- if (this.tip) {
- $__default["default"](this.tip).remove();
- }
-
- this._isEnabled = null;
- this._timeout = null;
- this._hoverState = null;
- this._activeTrigger = null;
-
- if (this._popper) {
- this._popper.destroy();
- }
-
- this._popper = null;
- this.element = null;
- this.config = null;
- this.tip = null;
- };
-
- _proto.show = function show() {
- var _this = this;
-
- if ($__default["default"](this.element).css("display") === "none") {
- throw new Error("Please use show on visible elements");
- }
-
- var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
-
- if (this.isWithContent() && this._isEnabled) {
- $__default["default"](this.element).trigger(showEvent);
- var shadowRoot = Util.findShadowRoot(this.element);
- var isInTheDom = $__default["default"].contains(
- shadowRoot !== null
- ? shadowRoot
- : this.element.ownerDocument.documentElement,
- this.element
- );
-
- if (showEvent.isDefaultPrevented() || !isInTheDom) {
- return;
- }
-
- var tip = this.getTipElement();
- var tipId = Util.getUID(this.constructor.NAME);
- tip.setAttribute("id", tipId);
- this.element.setAttribute("aria-describedby", tipId);
- this.setContent();
-
- if (this.config.animation) {
- $__default["default"](tip).addClass(CLASS_NAME_FADE$2);
- }
-
- var placement =
- typeof this.config.placement === "function"
- ? this.config.placement.call(this, tip, this.element)
- : this.config.placement;
-
- var attachment = this._getAttachment(placement);
-
- this.addAttachmentClass(attachment);
-
- var container = this._getContainer();
-
- $__default["default"](tip).data(this.constructor.DATA_KEY, this);
-
- if (
- !$__default["default"].contains(
- this.element.ownerDocument.documentElement,
- this.tip
- )
- ) {
- $__default["default"](tip).appendTo(container);
- }
-
- $__default["default"](this.element).trigger(
- this.constructor.Event.INSERTED
- );
- this._popper = new Popper__default["default"](
- this.element,
- tip,
- this._getPopperConfig(attachment)
- );
- $__default["default"](tip).addClass(CLASS_NAME_SHOW$4);
- $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra
- // empty mouseover listeners to the body's immediate children;
- // only needed because of broken event delegation on iOS
- // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
- if ("ontouchstart" in document.documentElement) {
- $__default["default"](document.body)
- .children()
- .on("mouseover", null, $__default["default"].noop);
- }
-
- var complete = function complete() {
- if (_this.config.animation) {
- _this._fixTransition();
- }
-
- var prevHoverState = _this._hoverState;
- _this._hoverState = null;
- $__default["default"](_this.element).trigger(
- _this.constructor.Event.SHOWN
- );
-
- if (prevHoverState === HOVER_STATE_OUT) {
- _this._leave(null, _this);
- }
- };
-
- if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$2)) {
- var transitionDuration = Util.getTransitionDurationFromElement(
- this.tip
- );
- $__default["default"](this.tip)
- .one(Util.TRANSITION_END, complete)
- .emulateTransitionEnd(transitionDuration);
- } else {
- complete();
- }
- }
- };
-
- _proto.hide = function hide(callback) {
- var _this2 = this;
-
- var tip = this.getTipElement();
- var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
-
- var complete = function complete() {
- if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
- tip.parentNode.removeChild(tip);
- }
-
- _this2._cleanTipClass();
-
- _this2.element.removeAttribute("aria-describedby");
-
- $__default["default"](_this2.element).trigger(
- _this2.constructor.Event.HIDDEN
- );
-
- if (_this2._popper !== null) {
- _this2._popper.destroy();
- }
-
- if (callback) {
- callback();
- }
- };
-
- $__default["default"](this.element).trigger(hideEvent);
-
- if (hideEvent.isDefaultPrevented()) {
- return;
- }
-
- $__default["default"](tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
- if ("ontouchstart" in document.documentElement) {
- $__default["default"](document.body)
- .children()
- .off("mouseover", null, $__default["default"].noop);
- }
-
- this._activeTrigger[TRIGGER_CLICK] = false;
- this._activeTrigger[TRIGGER_FOCUS] = false;
- this._activeTrigger[TRIGGER_HOVER] = false;
-
- if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$2)) {
- var transitionDuration = Util.getTransitionDurationFromElement(tip);
- $__default["default"](tip)
- .one(Util.TRANSITION_END, complete)
- .emulateTransitionEnd(transitionDuration);
- } else {
- complete();
- }
-
- this._hoverState = "";
- };
-
- _proto.update = function update() {
- if (this._popper !== null) {
- this._popper.scheduleUpdate();
- }
- }; // Protected
-
- _proto.isWithContent = function isWithContent() {
- return Boolean(this.getTitle());
- };
-
- _proto.addAttachmentClass = function addAttachmentClass(attachment) {
- $__default["default"](this.getTipElement()).addClass(
- CLASS_PREFIX + "-" + attachment
- );
- };
-
- _proto.getTipElement = function getTipElement() {
- this.tip = this.tip || $__default["default"](this.config.template)[0];
- return this.tip;
- };
-
- _proto.setContent = function setContent() {
- var tip = this.getTipElement();
- this.setElementContent(
- $__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)),
- this.getTitle()
- );
- $__default["default"](tip).removeClass(
- CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4
- );
- };
-
- _proto.setElementContent = function setElementContent($element, content) {
- if (typeof content === "object" && (content.nodeType || content.jquery)) {
- // Content is a DOM node or a jQuery
- if (this.config.html) {
- if (!$__default["default"](content).parent().is($element)) {
- $element.empty().append(content);
- }
- } else {
- $element.text($__default["default"](content).text());
- }
-
- return;
- }
-
- if (this.config.html) {
- if (this.config.sanitize) {
- content = sanitizeHtml(
- content,
- this.config.whiteList,
- this.config.sanitizeFn
- );
- }
-
- $element.html(content);
- } else {
- $element.text(content);
- }
- };
-
- _proto.getTitle = function getTitle() {
- var title = this.element.getAttribute("data-original-title");
-
- if (!title) {
- title =
- typeof this.config.title === "function"
- ? this.config.title.call(this.element)
- : this.config.title;
- }
-
- return title;
- }; // Private
-
- _proto._getPopperConfig = function _getPopperConfig(attachment) {
- var _this3 = this;
-
- var defaultBsConfig = {
- placement: attachment,
- modifiers: {
- offset: this._getOffset(),
- flip: {
- behavior: this.config.fallbackPlacement,
- },
- arrow: {
- element: SELECTOR_ARROW,
- },
- preventOverflow: {
- boundariesElement: this.config.boundary,
- },
- },
- onCreate: function onCreate(data) {
- if (data.originalPlacement !== data.placement) {
- _this3._handlePopperPlacementChange(data);
- }
- },
- onUpdate: function onUpdate(data) {
- return _this3._handlePopperPlacementChange(data);
- },
- };
- return _extends({}, defaultBsConfig, this.config.popperConfig);
- };
-
- _proto._getOffset = function _getOffset() {
- var _this4 = this;
-
- var offset = {};
-
- if (typeof this.config.offset === "function") {
- offset.fn = function (data) {
- data.offsets = _extends(
- {},
- data.offsets,
- _this4.config.offset(data.offsets, _this4.element) || {}
- );
- return data;
- };
- } else {
- offset.offset = this.config.offset;
- }
-
- return offset;
- };
-
- _proto._getContainer = function _getContainer() {
- if (this.config.container === false) {
- return document.body;
- }
-
- if (Util.isElement(this.config.container)) {
- return $__default["default"](this.config.container);
- }
-
- return $__default["default"](document).find(this.config.container);
- };
-
- _proto._getAttachment = function _getAttachment(placement) {
- return AttachmentMap[placement.toUpperCase()];
- };
-
- _proto._setListeners = function _setListeners() {
- var _this5 = this;
-
- var triggers = this.config.trigger.split(" ");
- triggers.forEach(function (trigger) {
- if (trigger === "click") {
- $__default["default"](_this5.element).on(
- _this5.constructor.Event.CLICK,
- _this5.config.selector,
- function (event) {
- return _this5.toggle(event);
- }
- );
- } else if (trigger !== TRIGGER_MANUAL) {
- var eventIn =
- trigger === TRIGGER_HOVER
- ? _this5.constructor.Event.MOUSEENTER
- : _this5.constructor.Event.FOCUSIN;
- var eventOut =
- trigger === TRIGGER_HOVER
- ? _this5.constructor.Event.MOUSELEAVE
- : _this5.constructor.Event.FOCUSOUT;
- $__default["default"](_this5.element)
- .on(eventIn, _this5.config.selector, function (event) {
- return _this5._enter(event);
- })
- .on(eventOut, _this5.config.selector, function (event) {
- return _this5._leave(event);
- });
- }
- });
-
- this._hideModalHandler = function () {
- if (_this5.element) {
- _this5.hide();
- }
- };
-
- $__default["default"](this.element)
- .closest(".modal")
- .on("hide.bs.modal", this._hideModalHandler);
-
- if (this.config.selector) {
- this.config = _extends({}, this.config, {
- trigger: "manual",
- selector: "",
- });
- } else {
- this._fixTitle();
- }
- };
-
- _proto._fixTitle = function _fixTitle() {
- var titleType = typeof this.element.getAttribute("data-original-title");
-
- if (this.element.getAttribute("title") || titleType !== "string") {
- this.element.setAttribute(
- "data-original-title",
- this.element.getAttribute("title") || ""
- );
- this.element.setAttribute("title", "");
- }
- };
-
- _proto._enter = function _enter(event, context) {
- var dataKey = this.constructor.DATA_KEY;
- context =
- context || $__default["default"](event.currentTarget).data(dataKey);
-
- if (!context) {
- context = new this.constructor(
- event.currentTarget,
- this._getDelegateConfig()
- );
- $__default["default"](event.currentTarget).data(dataKey, context);
- }
-
- if (event) {
- context._activeTrigger[
- event.type === "focusin" ? TRIGGER_FOCUS : TRIGGER_HOVER
- ] = true;
- }
-
- if (
- $__default["default"](context.getTipElement()).hasClass(
- CLASS_NAME_SHOW$4
- ) ||
- context._hoverState === HOVER_STATE_SHOW
- ) {
- context._hoverState = HOVER_STATE_SHOW;
- return;
- }
-
- clearTimeout(context._timeout);
- context._hoverState = HOVER_STATE_SHOW;
-
- if (!context.config.delay || !context.config.delay.show) {
- context.show();
- return;
- }
-
- context._timeout = setTimeout(function () {
- if (context._hoverState === HOVER_STATE_SHOW) {
- context.show();
- }
- }, context.config.delay.show);
- };
-
- _proto._leave = function _leave(event, context) {
- var dataKey = this.constructor.DATA_KEY;
- context =
- context || $__default["default"](event.currentTarget).data(dataKey);
-
- if (!context) {
- context = new this.constructor(
- event.currentTarget,
- this._getDelegateConfig()
- );
- $__default["default"](event.currentTarget).data(dataKey, context);
- }
-
- if (event) {
- context._activeTrigger[
- event.type === "focusout" ? TRIGGER_FOCUS : TRIGGER_HOVER
- ] = false;
- }
-
- if (context._isWithActiveTrigger()) {
- return;
- }
-
- clearTimeout(context._timeout);
- context._hoverState = HOVER_STATE_OUT;
-
- if (!context.config.delay || !context.config.delay.hide) {
- context.hide();
- return;
- }
-
- context._timeout = setTimeout(function () {
- if (context._hoverState === HOVER_STATE_OUT) {
- context.hide();
- }
- }, context.config.delay.hide);
- };
-
- _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
- for (var trigger in this._activeTrigger) {
- if (this._activeTrigger[trigger]) {
- return true;
- }
- }
-
- return false;
- };
-
- _proto._getConfig = function _getConfig(config) {
- var dataAttributes = $__default["default"](this.element).data();
- Object.keys(dataAttributes).forEach(function (dataAttr) {
- if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
- delete dataAttributes[dataAttr];
- }
- });
- config = _extends(
- {},
- this.constructor.Default,
- dataAttributes,
- typeof config === "object" && config ? config : {}
- );
-
- if (typeof config.delay === "number") {
- config.delay = {
- show: config.delay,
- hide: config.delay,
- };
- }
-
- if (typeof config.title === "number") {
- config.title = config.title.toString();
- }
-
- if (typeof config.content === "number") {
- config.content = config.content.toString();
- }
-
- Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
-
- if (config.sanitize) {
- config.template = sanitizeHtml(
- config.template,
- config.whiteList,
- config.sanitizeFn
- );
- }
-
- return config;
- };
-
- _proto._getDelegateConfig = function _getDelegateConfig() {
- var config = {};
-
- if (this.config) {
- for (var key in this.config) {
- if (this.constructor.Default[key] !== this.config[key]) {
- config[key] = this.config[key];
- }
- }
- }
-
- return config;
- };
-
- _proto._cleanTipClass = function _cleanTipClass() {
- var $tip = $__default["default"](this.getTipElement());
- var tabClass = $tip.attr("class").match(BSCLS_PREFIX_REGEX);
-
- if (tabClass !== null && tabClass.length) {
- $tip.removeClass(tabClass.join(""));
- }
- };
-
- _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(
- popperData
- ) {
- this.tip = popperData.instance.popper;
-
- this._cleanTipClass();
-
- this.addAttachmentClass(this._getAttachment(popperData.placement));
- };
-
- _proto._fixTransition = function _fixTransition() {
- var tip = this.getTipElement();
- var initConfigAnimation = this.config.animation;
-
- if (tip.getAttribute("x-placement") !== null) {
- return;
- }
-
- $__default["default"](tip).removeClass(CLASS_NAME_FADE$2);
- this.config.animation = false;
- this.hide();
- this.show();
- this.config.animation = initConfigAnimation;
- }; // Static
-
- Tooltip._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY$6);
-
- var _config = typeof config === "object" && config;
-
- if (!data && /dispose|hide/.test(config)) {
- return;
- }
-
- if (!data) {
- data = new Tooltip(this, _config);
- $element.data(DATA_KEY$6, data);
- }
-
- if (typeof config === "string") {
- if (typeof data[config] === "undefined") {
- throw new TypeError('No method named "' + config + '"');
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(Tooltip, null, [
- {
- key: "VERSION",
- get: function get() {
- return VERSION$6;
- },
- },
- {
- key: "Default",
- get: function get() {
- return Default$4;
- },
- },
- {
- key: "NAME",
- get: function get() {
- return NAME$6;
- },
- },
- {
- key: "DATA_KEY",
- get: function get() {
- return DATA_KEY$6;
- },
- },
- {
- key: "Event",
- get: function get() {
- return Event;
- },
- },
- {
- key: "EVENT_KEY",
- get: function get() {
- return EVENT_KEY$6;
- },
- },
- {
- key: "DefaultType",
- get: function get() {
- return DefaultType$4;
- },
- },
- ]);
-
- return Tooltip;
- })();
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME$6] = Tooltip._jQueryInterface;
- $__default["default"].fn[NAME$6].Constructor = Tooltip;
-
- $__default["default"].fn[NAME$6].noConflict = function () {
- $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;
- return Tooltip._jQueryInterface;
- };
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$7 = "popover";
- var VERSION$7 = "4.6.0";
- var DATA_KEY$7 = "bs.popover";
- var EVENT_KEY$7 = "." + DATA_KEY$7;
- var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7];
- var CLASS_PREFIX$1 = "bs-popover";
- var BSCLS_PREFIX_REGEX$1 = new RegExp(
- "(^|\\s)" + CLASS_PREFIX$1 + "\\S+",
- "g"
- );
-
- var Default$5 = _extends({}, Tooltip.Default, {
- placement: "right",
- trigger: "click",
- content: "",
- template:
- '' +
- '' +
- '' +
- '',
- });
-
- var DefaultType$5 = _extends({}, Tooltip.DefaultType, {
- content: "(string|element|function)",
- });
-
- var CLASS_NAME_FADE$3 = "fade";
- var CLASS_NAME_SHOW$5 = "show";
- var SELECTOR_TITLE = ".popover-header";
- var SELECTOR_CONTENT = ".popover-body";
- var Event$1 = {
- HIDE: "hide" + EVENT_KEY$7,
- HIDDEN: "hidden" + EVENT_KEY$7,
- SHOW: "show" + EVENT_KEY$7,
- SHOWN: "shown" + EVENT_KEY$7,
- INSERTED: "inserted" + EVENT_KEY$7,
- CLICK: "click" + EVENT_KEY$7,
- FOCUSIN: "focusin" + EVENT_KEY$7,
- FOCUSOUT: "focusout" + EVENT_KEY$7,
- MOUSEENTER: "mouseenter" + EVENT_KEY$7,
- MOUSELEAVE: "mouseleave" + EVENT_KEY$7,
- };
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var Popover = /*#__PURE__*/ (function (_Tooltip) {
- _inheritsLoose(Popover, _Tooltip);
-
- function Popover() {
- return _Tooltip.apply(this, arguments) || this;
- }
-
- var _proto = Popover.prototype;
-
- // Overrides
- _proto.isWithContent = function isWithContent() {
- return this.getTitle() || this._getContent();
- };
-
- _proto.addAttachmentClass = function addAttachmentClass(attachment) {
- $__default["default"](this.getTipElement()).addClass(
- CLASS_PREFIX$1 + "-" + attachment
- );
- };
-
- _proto.getTipElement = function getTipElement() {
- this.tip = this.tip || $__default["default"](this.config.template)[0];
- return this.tip;
- };
-
- _proto.setContent = function setContent() {
- var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events
-
- this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
-
- var content = this._getContent();
-
- if (typeof content === "function") {
- content = content.call(this.element);
- }
-
- this.setElementContent($tip.find(SELECTOR_CONTENT), content);
- $tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5);
- }; // Private
-
- _proto._getContent = function _getContent() {
- return this.element.getAttribute("data-content") || this.config.content;
- };
-
- _proto._cleanTipClass = function _cleanTipClass() {
- var $tip = $__default["default"](this.getTipElement());
- var tabClass = $tip.attr("class").match(BSCLS_PREFIX_REGEX$1);
-
- if (tabClass !== null && tabClass.length > 0) {
- $tip.removeClass(tabClass.join(""));
- }
- }; // Static
-
- Popover._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$7);
-
- var _config = typeof config === "object" ? config : null;
-
- if (!data && /dispose|hide/.test(config)) {
- return;
- }
-
- if (!data) {
- data = new Popover(this, _config);
- $__default["default"](this).data(DATA_KEY$7, data);
- }
-
- if (typeof config === "string") {
- if (typeof data[config] === "undefined") {
- throw new TypeError('No method named "' + config + '"');
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(Popover, null, [
- {
- key: "VERSION",
- // Getters
- get: function get() {
- return VERSION$7;
- },
- },
- {
- key: "Default",
- get: function get() {
- return Default$5;
- },
- },
- {
- key: "NAME",
- get: function get() {
- return NAME$7;
- },
- },
- {
- key: "DATA_KEY",
- get: function get() {
- return DATA_KEY$7;
- },
- },
- {
- key: "Event",
- get: function get() {
- return Event$1;
- },
- },
- {
- key: "EVENT_KEY",
- get: function get() {
- return EVENT_KEY$7;
- },
- },
- {
- key: "DefaultType",
- get: function get() {
- return DefaultType$5;
- },
- },
- ]);
-
- return Popover;
- })(Tooltip);
- /**
- * ------------------------------------------------------------------------
- * jQuery
- * ------------------------------------------------------------------------
- */
-
- $__default["default"].fn[NAME$7] = Popover._jQueryInterface;
- $__default["default"].fn[NAME$7].Constructor = Popover;
-
- $__default["default"].fn[NAME$7].noConflict = function () {
- $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;
- return Popover._jQueryInterface;
- };
-
- /**
- * ------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------
- */
-
- var NAME$8 = "scrollspy";
- var VERSION$8 = "4.6.0";
- var DATA_KEY$8 = "bs.scrollspy";
- var EVENT_KEY$8 = "." + DATA_KEY$8;
- var DATA_API_KEY$6 = ".data-api";
- var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8];
- var Default$6 = {
- offset: 10,
- method: "auto",
- target: "",
- };
- var DefaultType$6 = {
- offset: "number",
- method: "string",
- target: "(string|element)",
- };
- var EVENT_ACTIVATE = "activate" + EVENT_KEY$8;
- var EVENT_SCROLL = "scroll" + EVENT_KEY$8;
- var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$8 + DATA_API_KEY$6;
- var CLASS_NAME_DROPDOWN_ITEM = "dropdown-item";
- var CLASS_NAME_ACTIVE$2 = "active";
- var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
- var SELECTOR_NAV_LIST_GROUP = ".nav, .list-group";
- var SELECTOR_NAV_LINKS = ".nav-link";
- var SELECTOR_NAV_ITEMS = ".nav-item";
- var SELECTOR_LIST_ITEMS = ".list-group-item";
- var SELECTOR_DROPDOWN = ".dropdown";
- var SELECTOR_DROPDOWN_ITEMS = ".dropdown-item";
- var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle";
- var METHOD_OFFSET = "offset";
- var METHOD_POSITION = "position";
- /**
- * ------------------------------------------------------------------------
- * Class Definition
- * ------------------------------------------------------------------------
- */
-
- var ScrollSpy = /*#__PURE__*/ (function () {
- function ScrollSpy(element, config) {
- var _this = this;
-
- this._element = element;
- this._scrollElement = element.tagName === "BODY" ? window : element;
- this._config = this._getConfig(config);
- this._selector =
- this._config.target +
- " " +
- SELECTOR_NAV_LINKS +
- "," +
- (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") +
- (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
- this._offsets = [];
- this._targets = [];
- this._activeTarget = null;
- this._scrollHeight = 0;
- $__default["default"](this._scrollElement).on(
- EVENT_SCROLL,
- function (event) {
- return _this._process(event);
- }
- );
- this.refresh();
-
- this._process();
- } // Getters
-
- var _proto = ScrollSpy.prototype;
-
- // Public
- _proto.refresh = function refresh() {
- var _this2 = this;
-
- var autoMethod =
- this._scrollElement === this._scrollElement.window
- ? METHOD_OFFSET
- : METHOD_POSITION;
- var offsetMethod =
- this._config.method === "auto" ? autoMethod : this._config.method;
- var offsetBase =
- offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
- this._offsets = [];
- this._targets = [];
- this._scrollHeight = this._getScrollHeight();
- var targets = [].slice.call(document.querySelectorAll(this._selector));
- targets
- .map(function (element) {
- var target;
- var targetSelector = Util.getSelectorFromElement(element);
-
- if (targetSelector) {
- target = document.querySelector(targetSelector);
- }
-
- if (target) {
- var targetBCR = target.getBoundingClientRect();
-
- if (targetBCR.width || targetBCR.height) {
- // TODO (fat): remove sketch reliance on jQuery position/offset
- return [
- $__default["default"](target)[offsetMethod]().top + offsetBase,
- targetSelector,
- ];
- }
- }
-
- return null;
- })
- .filter(function (item) {
- return item;
- })
- .sort(function (a, b) {
- return a[0] - b[0];
- })
- .forEach(function (item) {
- _this2._offsets.push(item[0]);
-
- _this2._targets.push(item[1]);
- });
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$8);
- $__default["default"](this._scrollElement).off(EVENT_KEY$8);
- this._element = null;
- this._scrollElement = null;
- this._config = null;
- this._selector = null;
- this._offsets = null;
- this._targets = null;
- this._activeTarget = null;
- this._scrollHeight = null;
- }; // Private
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends(
- {},
- Default$6,
- typeof config === "object" && config ? config : {}
- );
-
- if (typeof config.target !== "string" && Util.isElement(config.target)) {
- var id = $__default["default"](config.target).attr("id");
-
- if (!id) {
- id = Util.getUID(NAME$8);
- $__default["default"](config.target).attr("id", id);
- }
-
- config.target = "#" + id;
- }
-
- Util.typeCheckConfig(NAME$8, config, DefaultType$6);
- return config;
- };
-
- _proto._getScrollTop = function _getScrollTop() {
- return this._scrollElement === window
- ? this._scrollElement.pageYOffset
- : this._scrollElement.scrollTop;
- };
-
- _proto._getScrollHeight = function _getScrollHeight() {
- return (
- this._scrollElement.scrollHeight ||
- Math.max(
- document.body.scrollHeight,
- document.documentElement.scrollHeight
- )
- );
- };
-
- _proto._getOffsetHeight = function _getOffsetHeight() {
- return this._scrollElement === window
- ? window.innerHeight
- : this._scrollElement.getBoundingClientRect().height;
- };
-
- _proto._process = function _process() {
- var scrollTop = this._getScrollTop() + this._config.offset;
-
- var scrollHeight = this._getScrollHeight();
-
- var maxScroll =
- this._config.offset + scrollHeight - this._getOffsetHeight();
-
- if (this._scrollHeight !== scrollHeight) {
- this.refresh();
- }
-
- if (scrollTop >= maxScroll) {
- var target = this._targets[this._targets.length - 1];
-
- if (this._activeTarget !== target) {
- this._activate(target);
- }
-
- return;
- }
-
- if (
- this._activeTarget &&
- scrollTop < this._offsets[0] &&
- this._offsets[0] > 0
- ) {
- this._activeTarget = null;
-
- this._clear();
-
- return;
- }
-
- for (var i = this._offsets.length; i--; ) {
- var isActiveTarget =
- this._activeTarget !== this._targets[i] &&
- scrollTop >= this._offsets[i] &&
- (typeof this._offsets[i + 1] === "undefined" ||
- scrollTop < this._offsets[i + 1]);
-
- if (isActiveTarget) {
- this._activate(this._targets[i]);
- }
- }
- };
-
- _proto._activate = function _activate(target) {
- this._activeTarget = target;
-
- this._clear();
-
- var queries = this._selector.split(",").map(function (selector) {
- return (
- selector +
- '[data-target="' +
- target +
- '"],' +
- selector +
- '[href="' +
- target +
- '"]'
- );
- });
-
- var $link = $__default["default"](
- [].slice.call(document.querySelectorAll(queries.join(",")))
- );
-
- if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
- $link
- .closest(SELECTOR_DROPDOWN)
- .find(SELECTOR_DROPDOWN_TOGGLE)
- .addClass(CLASS_NAME_ACTIVE$2);
- $link.addClass(CLASS_NAME_ACTIVE$2);
- } else {
- // Set triggered link as active
- $link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active
- // With both and